如何将数据库大小从兆字节转换为字节,反之亦然?

问题描述 投票:0回答:3

基本上,我正在创建一个复制应用程序,我只需要计算出数据库大小以及 D:\ 驱动器上有多少可用空间。

如果数据库大小大于可用空间,那么我需要提醒用户。

这是我到目前为止所拥有的:

首先查看D盘还有多少可用空间。

DriveInfo di = new DriveInfo(@"D:\");

if (di.IsReady)
{
    freeSpace = di.TotalFreeSpace;
}

然后我得到我要复制的数据库的大小:

dbSize = Database.GetDatabaseSize(ddlPublisherServer.Text, ddlPublisherDatabase.Text);

这是获取数据库大小的方法。我不知道是否有更好的方法来做到这一点,但大小带有“MB”字符串,所以我需要删除它。

public static long GetDatabaseSize(string server, string database)
{
     string finalConnString = Properties.Settings.Default.rawConnectionString.Replace("<<DATA_SOURCE>>", server).Replace("<<INITIAL_CATALOG>>", database);

      using (SqlConnection conn = new SqlConnection(finalConnString))
      {
          using (SqlCommand cmd = new SqlCommand("sp_spaceused", conn))
          {
              cmd.CommandType = CommandType.StoredProcedure;

              conn.Open();
              cmd.ExecuteNonQuery();

              using (SqlDataAdapter da = new SqlDataAdapter(cmd))
              {
                  using (DataSet ds = new DataSet())
                  {
                      da.Fill(ds);

                      var spaceAvailable = ds.Tables[0].Rows[0][1].ToString();

                      string freeSpace = spaceAvailable.Remove(spaceAvailable.Length - 3, 3);

                      return Convert.ToInt64(freeSpace);
                   }
              }
         }
     }
}

我现在的问题是 -

如何将字节转换为兆字节,以便比较数据库大小和磁盘可用空间?

这就是我所拥有的,但它是兆字节和字节,所以我需要在这里进行转换。

if (dbSize > freeSpace)
{
     ClientScript.RegisterStartupScript(this.GetType(), "Insufficient Space", "alert('The database size is greater than the available space on the drive. Please make some room for the database in D drive of the subscriber server.');", true);
 }
c# asp.net byte megabyte
3个回答
6
投票

字节换算为兆字节 =

Bytes / (1024 * 1024)

兆字节 自 字节 =
Megabytes * (1024 * 1024.0)

请务必考虑整数除法,因此

1024.0
因此使用浮点数。


0
投票

1 KB 为 1024 个字节,1 MB 为 1024 KB。因此,将兆字节乘以 1024 * 1024(以获得字节)。或者将字节除以 1024 * 1024(得到兆字节)。


0
投票

我在这里用户NeverHopeless找到了一个很好的答案,并调整了代码以遵循IEC标准,例如omar的ByteSize NuGet

public static class SizeExtension
{
    public enum MetricUnits
    {
        Byte, kB, MB, GB, TB, PB, EB, ZB, YB, RB, QB
    }
    
    public enum BinaryUnits
    {
        Byte, KiB, MiB, GiB, TiB, PiB, EiB, ZiB, YiB
    }

    public static string ToSize(this Int64 value, MetricUnits sourceUnit, MetricUnits targetUnit)
    {
        return (value / (double)Math.Pow(1000, (Int64)(targetUnit - sourceUnit))).ToString("0.00");
    }

    public static string ToSize(this Int64 value, BinaryUnits sourceUnit, BinaryUnits targetUnit)
    {
        return (value / (double)Math.Pow(1024, (Int64)(targetUnit - sourceUnit))).ToString("0.00");
    }
}

现在你可以做这样的事情:

// Bytes to MegaBytes:
var sizeInMB = sizeInBytes.ToSize(SizeExtension.MetricUnits.Byte, SizeExtension.MetricUnits.MB);
// MegaBytes to Bytes:
var sizeInBytes = sizeInMB.ToSize(SizeExtension.MetricUnits.MB, SizeExtension.MetricUnits.Bytes);
© www.soinside.com 2019 - 2024. All rights reserved.