chatravin
چهارشنبه 12 مهر 1385, 15:36 عصر
من یک برنامه نوشتم که شامل Backup گرفتن از یک دیتابیس هست. در ضمن چون در تمام
طول برنامه از این Database استفاده میشود یک سری Connection هم به آن برقرار و بلافاصله بعد از انجام عملیات بسته میشود. مشکل اینجاست که اگر تا قبل از Restore کردن حتی یک Connection برقرار شود ، در هنگام Restore کردن خطای زیر اتفاق می افتد:
[Microsoft][ODBC SQL Server Driver][SQL Server]Exclusive access could not be obtained because the database is in use.
[Microsoft][ODBC SQL Server Driver][SQL Server]RESTORE DATABASE is terminating abnormally.]
کد مربوط به Restore و کد نمونه ای که یک Connection به Database برقرار و در رویداد From_Load اجرا میشود به صورت زیر است:
private void Restore()
{
try
{
SQLDMO.SQLServer srv = new SQLDMO.SQLServer();
srv.LoginSecure = true;
srv.Connect("(local)", "sa", "");
SQLDMO.Restore res = new SQLDMO.RestoreClass();
res.Devices = res.Files;
res.Files = @"C:\DbBackup";
res.Database = "database1";
res.ReplaceDatabase = true;
res.SQLRestore(srv);
MessageBox.Show("Database restored successfully.", "Restore Successfull");
}
catch (Exception err)
{
//this.Cursor = Cursors.Default;
MessageBox.Show(err.Message, "Error");
}
}
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection();
cn.ConnectionString = CONNECTION_STRING;
SqlCommand cm = new SqlCommand("", cn);
cm.CommandText = "SELECT * FROM table1";
cn.Open();
SqlDataReader dr = cm.ExecuteReader();
while (dr.Read())
{
}
cn.Close();
dr.Close();
}
طول برنامه از این Database استفاده میشود یک سری Connection هم به آن برقرار و بلافاصله بعد از انجام عملیات بسته میشود. مشکل اینجاست که اگر تا قبل از Restore کردن حتی یک Connection برقرار شود ، در هنگام Restore کردن خطای زیر اتفاق می افتد:
[Microsoft][ODBC SQL Server Driver][SQL Server]Exclusive access could not be obtained because the database is in use.
[Microsoft][ODBC SQL Server Driver][SQL Server]RESTORE DATABASE is terminating abnormally.]
کد مربوط به Restore و کد نمونه ای که یک Connection به Database برقرار و در رویداد From_Load اجرا میشود به صورت زیر است:
private void Restore()
{
try
{
SQLDMO.SQLServer srv = new SQLDMO.SQLServer();
srv.LoginSecure = true;
srv.Connect("(local)", "sa", "");
SQLDMO.Restore res = new SQLDMO.RestoreClass();
res.Devices = res.Files;
res.Files = @"C:\DbBackup";
res.Database = "database1";
res.ReplaceDatabase = true;
res.SQLRestore(srv);
MessageBox.Show("Database restored successfully.", "Restore Successfull");
}
catch (Exception err)
{
//this.Cursor = Cursors.Default;
MessageBox.Show(err.Message, "Error");
}
}
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection();
cn.ConnectionString = CONNECTION_STRING;
SqlCommand cm = new SqlCommand("", cn);
cm.CommandText = "SELECT * FROM table1";
cn.Open();
SqlDataReader dr = cm.ExecuteReader();
while (dr.Read())
{
}
cn.Close();
dr.Close();
}