PDA

View Full Version : آموزش: حل مشکل بازیابی اطلاعات در C# با استفاده از SMO برای SQL SERVER



malakootian
جمعه 31 خرداد 1392, 13:48 عصر
سلام به همه دوستان
چون خودم در سایت کلی گشتم و اطلاعات پراکنده ای پیدا کردم برای راهنمایی بچه ها و استفاده همه این مطلب را می گذارم
اگر درسایت بگردید حتما نحوه بازیابی و پشتیبان گیری را بااستفاده از SMO برای SQL SERVER در C# پیدا میکنید
اما مشکلی که برای خیلی ها وجود داره اینه که زمانی که می خواهند فایل پشتیبان را برگردانند خطا می دهد اکثر مواقع مشکل از اینه که دیتابیس جایی دیگر درحال کار می باشد و بازگرداندن دیتابیس در حال کار امکان پذیر نیست
برای حل مشکل فوق بهترین کار اینه که هیچ ارتباطی با دیتابیس نداشته باشیم و اطلاعات را براحتی بازیابی کنیم
من کد زیر را در C# نوشتم ومشکلم را حل کردم توجه کنید:

public void KillActiveConnection(string DbName)
{
try
{
ConnectforMaster();// یک کانکشن به جدول master
cmd.CommandText = "SELECT min(spid) from master.dbo.sysprocesses where dbid = db_id(" + DbName + ") " +
" ";
cmd.CommandType = CommandType.Text;
cmd.Connection = cnn;
sda.SelectCommand = cmd;
sda.Fill(ds, "kill");
if (ds.Tables["kill"].Rows.Count - 1 != -1)
{
for (int i = 0; i <= ds.Tables["kill"].Rows.Count - 1; i++)
{
cmd.CommandText = "kill " + ds.Tables["kill"].Rows[i][0].ToString();
cmd.CommandType = CommandType.Text;
cmd.Connection = cnn;
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
}
}
}
catch (Exception a)
{
SqlErrorShow("Error in KillActiveConnection function : ", a.Message);
}
finally
{
cnn.Close();
Disconnect();
cnn.ConnectionString = "";
}
}
اینطوری هر کانکشنی که به دیتابیسم خورده را ازبین می برم و سپس عملیات بازیابی را شروع می کنم و دیگه خطایی بوجود نخواهد آمد
با سپاس
اگر مفید بود تشکر یادتون نره

malakootian
جمعه 31 خرداد 1392, 13:49 عصر
راستی در تکه کد بالا DBname هم نام دیتابیسم است