PDA

View Full Version : سوال: خطای دیستابیس درحال استفاده در هنگام بازیابی دیتابیس



ahmad_lovely
چهارشنبه 16 تیر 1389, 15:00 عصر
با سلام
بعد از بکاپ گرفتن، وقتی که می خوام دیتابیس رو بازیابی کنم خطای دیتابیس در حال استفاده است می آید .
فکر کنم این خطا به خاطر اینه که من به صورت ویزاردی دیتابیس رو به برنامه شناسوندم . یعنی وقتی که دیتا گراید رو به صورت ویزاردی به دیتابیس وصل می شه این کد در فرم لود می آید :



this.table_Kala_MojoodTableAdapter.Fill(this.foroo shgaheKala_DatabaseDataSet._Table_Kala_Mojood);


حالا وقتی این کد رو برمی دارم مشکل برطرف میشه ولی من در جاهای مختلفی از این کد استفاده کردم حالا اگر بخوام این کد رو بردارم تقریبا کل کد نویسیسم رو باید تغییر بدم .

از دوستان می خوام که چطوری می تونم بدون برداشتن این کد، این مشکل رو برطرف کنم ؟
ممنون

میلاد قاضی پور
چهارشنبه 16 تیر 1389, 15:55 عصر
یه بول تعریف کنید و مقدار پیش فرض رو مثلا فالس بدید . بنویسید تا زمانی که فالس هست این کد رو اجرا کنه . حالا موقع ریستور کردن یه لحظه اون متغیر رو ترو کنید تا این کد اجرا نشه و مزاحمت برطرف بشه کار که انجام شد بعد دوباره فالسش کنید تا این کد دوباره فعال بشه... ها؟:اشتباه:

ahmad_lovely
چهارشنبه 16 تیر 1389, 16:55 عصر
این کار رو کردم ولی مثل اینکه کافیه یک بار این کد اجرا بشه تا همون خطا رو بده !

MSN_Issue
چهارشنبه 16 تیر 1389, 18:10 عصر
فکر میکنم تنها راهش اینه که خودتون دیتا بیس رو ست کنید !

حجتی نیا
چهارشنبه 16 تیر 1389, 18:10 عصر
منم مثه شما از این دست دستورات دارم اما از این کد واسه رستور استفاده میکنم و مشکلم هم حل شده :

objconnection.Open();
if (openFileDialog_restore.ShowDialog() == DialogResult.OK)
if (openFileDialog_restore.FileName.EndsWith(".bak") == true)
{
backgroundWorker1.RunWorkerAsync();
string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\sodour.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\sodour.mdf] SET MULTI_USER";
string query = "RESTORE DATABASE [" + Application.StartupPath + "\\sodour.mdf] FROM DISK ='" + openFileDialog_restore.FileName + "' WITH RECOVERY,REPLACE";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = s1;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();

cmd.CommandText = s2;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();

cmd.CommandText = query;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();

cmd.Dispose();
backgroundWorker1.CancelAsync();
Application.Restart();
}
else
FarsiMessageBox.FMessageBox.Show("فایل با پسوند .bak انتخاب کنید", "خطا", FarsiMessageBox.FMessageBoxButtons.OK, FarsiMessageBox.FMessageBoxIcons.Error, FarsiMessageBox.FMessageBoxDefaultButtons.Button3) ;

حجتی نیا
چهارشنبه 16 تیر 1389, 18:11 عصر
منم مثه شما از این دست دستورات دارم اما از این کد واسه رستور استفاده میکنم و مشکلم هم حل شده :

objconnection.Open();
if (openFileDialog_restore.ShowDialog() == DialogResult.OK)
if (openFileDialog_restore.FileName.EndsWith(".bak") == true)
{
backgroundWorker1.RunWorkerAsync();
string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\sodour.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\sodour.mdf] SET MULTI_USER";
string query = "RESTORE DATABASE [" + Application.StartupPath + "\\sodour.mdf] FROM DISK ='" + openFileDialog_restore.FileName + "' WITH RECOVERY,REPLACE";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = s1;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();

cmd.CommandText = s2;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();

cmd.CommandText = query;
cmd.Connection = objconnection;
cmd.ExecuteNonQuery();

cmd.Dispose();
backgroundWorker1.CancelAsync();
Application.Restart();
}
else
FarsiMessageBox.FMessageBox.Show("فایل با پسوند .bak انتخاب کنید", "خطا", FarsiMessageBox.FMessageBoxButtons.OK, FarsiMessageBox.FMessageBoxIcons.Error, FarsiMessageBox.FMessageBoxDefaultButtons.Button3) ;