PDA

View Full Version : مواجه شدن با خطا هنگام بازگردانی database



samiasoft
پنج شنبه 05 بهمن 1396, 16:48 عصر
سلام دوستان

وقتی که میخواستم دیتابیس رو ریستور کنم با خطای زیر مواجه میشوم ولی من قبلنا خاطرم هست که این دستورات به درستی اجرا میشدند :




Cannot open database "Attendance_DB" requested by the login. The login failed.


OpenFileDialog open1 = new OpenFileDialog();
open1.FilterIndex = 1;
open1.Title = "restory backup databse";
open1.Filter = "Backup File (*.Bak)|*.Bak";

if (open1.ShowDialog() == DialogResult.OK)
{
if (back_restor(@"Alter DataBase [Attendance_DB] set single_User with Rollback Immediate use master Restore Database [Attendance_DB] From Disk ='" + open1.FileName + "' with Replace "))
{
MessageBox.Show("بازگردانی اطلاعات با موفقیت انجام شد", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Restart();


}
else
{


MessageBox.Show("خطا در بازگردانی اطلاعات ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Error);


}


}

public static bool back_restor (string Query)
{


SqlConnection Con = new SqlConnection();
Con.ConnectionString = @"Data Source=.\sqlexpress;Initial Catalog=Attendance_DB;Integrated Security=True";
Con.FireInfoMessageEventOnUserErrors = true;

Con.Open();
SqlCommand cmd = new SqlCommand(Query, Con);

Con.FireInfoMessageEventOnUserErrors = false;
try
{
cmd.ExecuteNonQuery();
return true;





}
catch(SqlException ex)
{


MessageBox.Show(ex.Message);
return false;


}
finally
{
Con.Close();


}





}

samiasoft
پنج شنبه 05 بهمن 1396, 17:25 عصر
دوستان در دستورات بالا همانطور که گفتم خطا میاد و دیتابیس هم ایجاد نمیشود اما

وقتی در کانکشن که بصورت زیرنوشتم :
Con.ConnectionString = @"Data Source=.\sqlexpress;Initial Catalog=Attendance_DB;Integrated Security=True";

بیام به جای نام دیتابیسم از دیتابیس مستر استفاده کنم بدین صورت :
Con.ConnectionString = @"Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=True";

دراین حالت میبنم که دیتابیس به راحتی ایجاد میشود اما قبلش این خطا ظاهر میشود :

http://uupload.ir/files/0p9q_2018-01-25_175432.jpg

samiasoft
جمعه 06 بهمن 1396, 08:55 صبح
دوستان نظری ندارید؟

باور کنید من کلیه کدهای مربوط به ریستور کردن رو تست کردم با همه اونا همین خطای لاگین رو دارم ...به نظرتون مشکل از اسکیوال سرورمه؟ اخه داخل سیستم دیگر هم نسخه اکسپرس نصب کردم اونم به همین روال بود.

اگر کسی میتونه اینارو تست کنه ممنون میشم نتیجشو اطلاع بده

Mahmoud Zaad
جمعه 06 بهمن 1396, 10:28 صبح
سلام
توی یوزر Admindistrator ویندوز امتحان کنید یا برنامه رو Run As Administrator اجرا کنید.

samiasoft
جمعه 06 بهمن 1396, 12:16 عصر
سلام
توی یوزر Admindistrator ویندوز امتحان کنید یا برنامه رو Run As Administrator اجرا کنید.

متاسفانه تاثیری نداشت:ناراحت: الان در سیستم شما به راحتی جواب میده دستورات ؟

samiasoft
جمعه 06 بهمن 1396, 12:31 عصر
دوستان بالاخره مشکل رو فهمیدم کجاست!!!!!!!!!!!

قضیه اینه که دستوراتی که برای بازگردانی دیتابیس نوشته شده زمانی به درستی اجرا میشوند که از قبل همان دیتابیس در اسکیوال سرور وجود داشته باشد !

من میومدم اول از دیتابیس بکاپ میگرفتم بعد میومدم اون دیتابیس رو دی اتچ میکردم و زمانی که میخواستم بازگردانی کنم میدید که دیتابیس موردنظر در اسکیوال سرور برای جایگزینی وجود نداره برای همین خطا میومد:لبخند:خداییش این نکته 3 رو با روح و روانم بازی کرد.

Mahmoud Zaad
جمعه 06 بهمن 1396, 12:52 عصر
من متنی که توی پست اول گذاشته بوید رو خوندم و به عکس خطا توجه نکرده بودم. :افسرده: ولی نکته ای که فهمیدید تا حدی درسته توی عکس خطا هم گفته که دستور Alter Database به مشکل خورده یعنی دیتابیسی وجود نداره که بخواد single_User with Rollback Immediateش کنه! ولی ریستور چه دیتابیس اتچ باشه یا نباشه باید کار کنه، شما برای رفع این مشکل باید اول چک کنید که دیتابیس وجود داره یا نه اگر وجود داشت حذفش کنید با دستور Drop بعد ریستور رو انجام بدید.