PDA

View Full Version : مشکل در ارتباط با دیتابیس بعد از restore کردن دیتابیس



mousa1992
جمعه 19 آبان 1391, 14:25 عصر
سلام دوستان ممنون از توجهتون
کدهایی که برای backup و restore کردن دیتابیس نوشتم رو میذارم و ConnectionString که باید مشکل از همینا باشه
ConnectionString:

Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\QuranDB.mdf;Initial Catalog=QuranDB;Integrated Security=True;User Instance=True");


Backup:

public void CreateBackUp(string Path)
{
string Command = @"backup database QuranDB to disk='" + Path + "'";
CMD = new SqlCommand(Command, DAl.Connection);
DAl.Connect();
CMD.ExecuteNonQuery();
DAl.DisConnect();
}



Restore:

public void RestoreBackUp(string Path)
{
SqlConnection.ClearAllPools();
DAl.Connect();
string FirstCommand = "ALTER DATABASE QuranDB SET OFFLINE WITH ROLLBACK IMMEDIATE";
CMD = new SqlCommand(FirstCommand, DAl.Connection);
CMD.ExecuteNonQuery();
string Command = @"restore database QuranDB from disk='" + Path + "'";
CMD = new SqlCommand(Command, DAl.Connection);
CMD.ExecuteNonQuery();
DAl.DisConnect();
}


از دیتابیس بکاپ میگیره , restore میکنه و اطلاعات به درستی برمیگردن اما با بستن برنامه و اجرای دوباره ی ان در ارتباط با دیتابیس ارور میگیره و میگه فایل log همخونی با فایل اصلی نداره !! (بعد از restore و اجرای دباره ی برنامه این اتفاق میافته )
ممنون از کمکتون

mousa1992
جمعه 19 آبان 1391, 18:12 عصر
دوستان منتظر نظراتتون هستم ، ممنونم از توجهتون

mousa1992
شنبه 20 آبان 1391, 20:58 عصر
دوستان کسی تا بحال با چنین مشکلی برخورد نکرده :متعجب:
connectionstring و کدهایی که برا Backup , restore نوشتم رو لطفا بررسی کنید ایرادشون کجاست :افسرده: ممنونم از لطفتون

mansourm
شنبه 20 آبان 1391, 21:17 عصر
دوست عزیز این کدو امتحات کنید البته ببخشید به C#‎‎ تبدیلش کنید زیاد تفاوتی ندارد






rwd.command.CommandText = "ALTER DATABASE ["& Path1 & "\Insurance.mdf] SET SINGLE_USER with ROLLBACK IMMEDIATE"



'rwd.command = New SqlCommand()



rwd.connection.Open()



rwd.command.ExecuteNonQuery()



rwd.connection.Close()



rwd.command.CommandText = "USE master; RESTORE DATABASE ["& Path1 & "\Insurance.mdf]"& " FROM DISK ='"& path & "'"



'rwd.command = New SqlCommand()



rwd.connection.Open()



rwd.command.ExecuteNonQuery()



rwd.connection.Close()



frmwaite.ShowDialog()
frmwaite.MdiParent = Mainform






MessageBox.Show("بازیابی داده ها با موفقیت انجام شد", "پشتیبان گیری", MessageBoxButtons.OK, MessageBoxIcon.Information)

mousa1992
شنبه 20 آبان 1391, 21:37 عصر
ممنونم از توجهت دوست عزیز
اره فقط باید کوئری هارو جایگزین کنم که باید همون کدی که نوشتم باشه
در مورد connectionstring ی نیگا بهش بندازین بینم درسته و یه سوال : initial catalog که برابر با نام دیتابیس قرار میدیم چه کاریو انجام میده ؟
و path 1 که تو کدها قرار دادین باید مسیر دیتابیس باشه درسته ؟

دیتابیسم SqlExpress هست

بازم ممنون

mansourm
شنبه 20 آبان 1391, 21:46 عصر
برای تعیین نام دیتا بیس از initial catalog استفاده میشه
path1 منظور آدرس دیتابیسه

دوست عزیز connection string را هم به این صورت بنویسید



SqlConnection Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\QuranDB.mdf;Integrated Security=True;User Instance=True;Connection Timeout=60");

mousa1992
شنبه 20 آبان 1391, 21:58 عصر
الان موقع بکاپ گیری هم بهم ارور میده میگه دیتابیس توسط process دیگه ای استفاده میشه ! باید چیکارش کنم ؟

mansourm
شنبه 20 آبان 1391, 22:06 عصر
اینم کد بکاپ اگه مشکل داشت بگو تا خودم برنامشو براتون بزارم





rwd.command.CommandText = "BACKUP DATABASE [" & Path1 & "\Insurance.mdf] TO DISK='" & path & "'" & " WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10"



rwd.connection.Open()



rwd.command.ExecuteNonQuery()



rwd.connection.Close()



frmwaite.ShowDialog()



frmwaite.MdiParent = Mainform



MessageBox.Show("پشتیبان گیری با موفقیت انجام شد", "پشتیبان گیری", MessageBoxButtons.OK, MessageBoxIcon.Information)

mousa1992
شنبه 20 آبان 1391, 22:25 عصر
ممنونم دوست عزیز لطف بزرگی کردی مشکل حل شد :بوس: :لبخند:
این کد رو نوشتم

public void RestoreBackUp(string Path)
{
SqlConnection.ClearAllPools();
DAl.Connect();
string FirstCommand = @"USE master;ALTER DATABASE ["+Application.StartupPath+"\\QuranDB.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
CMD = new SqlCommand(FirstCommand, DAl.Connection);
CMD.ExecuteNonQuery();
string Command = @"restore database ["+Application.StartupPath+@"\QuranDB.mdf] from disk='" + Path + "'";
CMD = new SqlCommand(Command, DAl.Connection);
CMD.ExecuteNonQuery();
DAl.DisConnect();
}

بازم ممنون از لطفت