پشتیبان گیری (Backup) و بازگردانی (Restore) بانک اطلاعاتی SQL
فرض کنید که در برنامه تان دو دکمه یکی برای پشتیبان گیری و دیگری برای بازگردانی بانک اطلاعاتی دارید. ابتدا با زدن دکمه F7 به محیط کدنویسی رفته و کدهای زیر را به برنامه اضافه کنید :
using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; namespace BackupRestore { public partial class Form1 : Form { private string _connectionString = "Data Source=(local);Initial Catalog=DBName ;user id=sa"; private SqlConnection SqlConnection1 = new SqlConnection(); public Form1() { InitializeComponent(); this.SqlConnection1.ConnectionString = this._connectionString; } ...
در کدهای بالا که مشخص شده اند ما رشته اتصال یا connection string را تنظیم می کنیم. به این نکته توجه کنید که DBName نام دیتابیس شماست. برای ایجاد نسخه پشتیبان از کد زیر استفاده می کنیم :
private void Backup(string filename) { try { string command = @"Backup DataBase DBName To Disk='" + filename + "'"; this.Cursor = Cursors.WaitCursor; if (SqlConnection1.State != ConnectionState.Open) { SqlConnection1.Open(); } SqlCommand SqlCommand1 = null; SqlCommand1 = new SqlCommand(command, this.SqlConnection1); SqlCommand1.ExecuteNonQuery(); this.Cursor = Cursors.Default; MessageBox.Show("تهیه نسخه پشتیبان از اطلا عات با موفقیت انجام شد"); } catch (Exception ex) { MessageBox.Show("Error : ", ex.Message); } }
برای بازگردانی نسخه پشتیبان هم از متد زیر استفاده می کنیم :
private void Restore(string filename) { try { string command = @"ALTER DATABASE DBName SET SINGLE_USER with ROLLBACK IMMEDIATE " + " USE master " + " RESTORE DATABASE DBName FROM DISK= N'" + filename + "'"; this.Cursor = Cursors.WaitCursor; SqlCommand SqlCommand1 = null; if (SqlConnection1.State != ConnectionState.Open) { SqlConnection1.Open(); } SqlCommand1 = new SqlCommand(command, this.SqlConnection1); SqlCommand1.ExecuteNonQuery(); this.Cursor = Cursors.Default; MessageBox.Show("بازیابی اطلاعات از نسخه پشتیبان از با موفقیت انجام شد"); } catch (Exception ex) { MessageBox.Show("Error : ", ex.Message); } }
حال نوبت به کدنویسی دکمه ها می رسد. بر روی دکمه پشتیبان گیری دو بار کلیک کرده و کدهای زیر را داخل آن بنویسید :
private void button1_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog1 = new SaveFileDialog(); string filename = string.Empty; saveFileDialog1.OverwritePrompt = true; saveFileDialog1.DefaultExt = ""; saveFileDialog1.Filter = @"SQL Backup Files ALL Files (*.*) |*.*| (*.Bak)|*.Bak"; saveFileDialog1.FilterIndex = 1; saveFileDialog1.Title = "Backup SQL File"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { filename = saveFileDialog1.FileName; Backup(filename); } }
و سپس بر روی دکمه باز گردانی دو بار کلیک کرده و کدهای زیر را داخل آن بنویسید :
private void button2_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); string filename = string.Empty; openFileDialog1.Filter = @"SQL Backup Files ALL Files (*.*) |*.*| (*.Bak)|*.Bak"; openFileDialog1.FilterIndex = 1; openFileDialog1.Filter = @"SQL Backup Files (*.*)|"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { filename = openFileDialog1.FileName; Restore(filename); } }
جناب یونسی سلام. وقت شما بخیر. یک نکته برام پیش اومده. اونم این هست که چرا زمانی که آدرس درایو C رو به برنامه میدیم همچین خطایی میده در زمان پشتیبان گیری
Cannot open backup device ‘C:\\Users\\behfa\\Desktop\\Database-2021-09-15–12-03-20.bak’. Operating system error 5(Access is denied.).\r\nBACKUP DATABASE is terminating abnormally
چطوری میشه این مشکل رو حل کرد؟
با تقدیم احترام
استاد من بروش LInqکدنویسی کرده ام و میخوام به همین هم بکاپ گیری انجام بدم میشه به روش linqهم اموزش بزارید؟
سلام خسته نباشید خئمت ئوستان عزیز
من وقتی بک آپ بگیرم میگه دیتا بیس شما موجود نیست من دیتا بیسم جفت پروژه ست و کانکشنش مشکلی نداره دیتا ها رو میارم با SQLEXPRESS اما برای بک آپ مشکل دارم اگه میشه لطفا کمکم کنین باتشکری
سلام
سوالاتونو تو بخش پرسش و پاسخ مطرح بفرمایید.
با سلام و احترام
من میخاستم از اطلاعات داخل جداول در داخل sqlاطلاعات مربوط به دو ستون روی فرم داخل سی شارپ نمایش داده بشه. دوستان اگر ممکنه لطف بفرمایید راهنمایی کنید خیلی ممنون میشم
با تشکر
سلام، ممنون میشم سوالتونو توی انجمن مطرح بفرمایید
سلام و تشکر میشه بگید اگه بخواهیم پسورد بگذاریم رو بکاپ باید چه کنیم
با سلام و خسته نباشید من از نرم افزار های SQL Server 2008 وMicrosoft Visual Studio 2010 استفاده میکنم وconnectionStringمن هم برابر
connectionString="Data Source=MTAGHI-PC;Initial Catalog=Data;Integrated Security=True;"
این هستش که از app.configبرداشتم Backup میگیره ولی Restore نمیکنه تازه زمانی که Backup میگیره اجازه وارد شدن به جدول دیتابیس رو نمیده خواهش میکنم هرچه سریعتر این مشکل رو حل چون مشکل اکثر برنامه نویس های سی شارپ هستش با تشکر از زحمات شما و سایت بی نظیر شما در زمینه سی شارپ
سلام
بهتر نبود منبع رو معرفی می کردید (Learn Files)
شوخی بودا ناراحت نشید D: (آخه منم همین دیروز این فیلم رو دیدم خیلی شبیه اونه)
ممنون از زحمتی که برای ارتقای برنامه نویسی می کشید