基本的に、私はレプリケーションアプリケーションを作成しており、データベースのサイズとD:\ドライブで使用可能な空き容量を把握する必要があります。
データベースのサイズが空き領域よりも大きい場合は、ユーザーに警告する必要があります。
これは私がこれまでに持っているものです:
まず、Dドライブにどれだけの空き容量があるかを調べます。
DriveInfo di = new DriveInfo(@"D:\");
if (di.IsReady)
{
freeSpace = di.TotalFreeSpace;
}
次に、複製するデータベースのサイズを取得します。
dbSize = Database.GetDatabaseSize(ddlPublisherServer.Text, ddlPublisherDatabase.Text);
DBのサイズを取得するメソッドは次のとおりです。これを行うためのより良い方法があるかどうかはわかりませんが、サイズには「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);
}
}
}
}
}
今の私の質問は-
dbサイズとディスク空き容量を比較できるようにバイトをメガバイトに変換するにはどうすればよいですか?
これは私が持っているものですが、メガバイトとバイトなので、ここで変換を行う必要があります。
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);
}