Backup از پایگاه داده با استفاده از C#

Backup

این مقاله مرتبط به پروژه پایگاه داده است که نشان می دهد که چگونه از یک پایگاه داده با استفاده از کد سی شارپ, Backup بگیریم و برنامه ی تحت ویندوزی بنویسیم که کارمان را برای backup گرفتن از پایگاه داده کاربر پسند کند. معمولا ما با استفاده از SQL Server از پایگاه داده Backup می گیریم.

SQL Server Management Object (که با نام SMO نیز شناخته می شود) به ما امکان دسترسی به اشیای Microsoft SQL Server را می دهد. SMO یک کتابخانه ی .NET است. همه ی توابع موجود در SQL Server Management Studio در SMO در دسترس هستند اما SMO ویژگی های بیشتری نیز نسبت به Management Studio دارد.

گام ۱

ویژوال استودیو را باز کنید و یک قالب Windows Application انتخاب کنید و نامی زیبا برای پروژه در نظر بگیرید.

Bakcup

گام ۲

فرم را مانند زیر طراحی کنید :

Bakcup

همانطور که در طراحی برنامه ی بالا می بینید زمانی که بر روی دکمه ی connect to server کلیک کنید پنجره ای باز میشود که تقاضای اعتبار برای پایگاه داده SQL می نماید.

دکمه ی دیگر “Fetch Database” است که امکان کشیدن کل پایگاه داده در داخل سرور که listbox را نمایش می دهد است.

و آخرین دکمه نیز دکمه ی “Backup Location” برای انتخاب فولدر مقصد برای مکانی که می خواهید فایل های backup را ذخیره نمایید , است.

گام ۳

یک پنجره ی دیگر برای Login همانند زیر طراحی کنید :

Bakcup

گام ۴

تمام پایگاه داده ها را درون سرور بیاندازید.

Bakcup

در زیر کدی برای اتصال به SQL Server و کشیدن پایگاه داده آورده شده است :

serverName = textBox1.Text;     
userName = textBox2.Text;     
password = textBox3.Text;     
string str = "Data Source=" + textBox1.Text + ";User ID=" + textBox2.Text + ";Password=" + textBox3.Text + "";     
SqlConnection con = new SqlConnection(str);     
try     
{     
con.Open();     
// MessageBox.Show("connection gets established");     
SqlCommand cmd = new SqlCommand("SELECT  db.[name] as dbname FROM [master].[sys].[databases] db", con);     
SqlDataAdapter sda = new SqlDataAdapter(cmd);                 
sda.Fill(ds,"DatabaseName");     
con.Close();     
this.Close();      
}     
catch(Exception ex)     
{     
MessageBox.Show(ex.Message);     
}

 

گام ۵

فولدر مقصد را برای جایی که مایل به ذخیره ی فایل های backup هستید , انتخاب کنید.

Bakcup

پس از انتخاب فولدر مقصد باید پایگاه داده و فولدر مقصد را برای عملیات های بیشتر انتخاب کنید.

Bakcup

گام ۶

حال یک مرجع برای backup پایگاه داده اضافه میکنیم.

باید دو فضای نام بسیار مهم زیر را نیز اضافه کنیم.

using Microsoft.SqlServer.Management.Smo;   
using Microsoft.SqlServer.Management.Common;  

 

گام ۷

حال کد مورد نیاز برای BackUp گرفتن از پایگاه داده را اجرا میکنیم.

پس از کلیک بر روی دکمه ی “Start Manual Back Up” :

private void button3_Click(object sender, EventArgs e)     
{     
try     
{     
if (DestPath == "" || DbName == "")     
{     
MessageBox.Show("Try to select Database and Destination Folder !");     
}     
else     
{     
string databaseName = DbName;//dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].FormattedValue.ToString();     
//Define a Backup object variable.     
Backup sqlBackup = new Backup();     
////Specify the type of backup, the description, the name, and the database to be backed up.     
sqlBackup.Action = BackupActionType.Database;     
sqlBackup.BackupSetDescription = "BackUp of:" + databaseName + "on" + DateTime.Now.ToShortDateString();     
sqlBackup.BackupSetName = "FullBackUp";     
sqlBackup.Database = databaseName;     
////Declare a BackupDeviceItem     
string destinationPath = DestPath;     
string backupfileName = DbName +".bak";     
BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath + "\\" + backupfileName, DeviceType.File);     
////Define Server connection     
//ServerConnection connection = new ServerConnection(frm.serverName, frm.userName, frm.password);     
ServerConnection connection = new ServerConnection(Form1.serverName, Form1.userName, Form1.password);     
////To Avoid TimeOut Exception     
Server sqlServer = new Server(connection);     
sqlServer.ConnectionContext.StatementTimeout = 60 * 60;     
Database db = sqlServer.Databases[databaseName];     
sqlBackup.Initialize = true;     
sqlBackup.Checksum = true;     
sqlBackup.ContinueAfterError = true;     
////Add the device to the Backup object.     
sqlBackup.Devices.Add(deviceItem);     
////Set the Incremental property to False to specify that this is a full database backup.     
sqlBackup.Incremental = false;     
sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);     
////Specify that the log must be truncated after the backup is complete.     
sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;     
sqlBackup.FormatMedia = false;     
////Run SqlBackup to perform the full database backup on the instance of SQL Server.     
sqlBackup.SqlBackup(sqlServer);     
////Remove the backup device from the Backup object.     
sqlBackup.Devices.Remove(deviceItem);     
toolStripStatusLabel1.Text = "Successful backup is created!";     
}     
}     
catch (Exception ex)     
{     
toolStripStatusLabel1.Text = ex.Message;     
// MessageBox.Show(ex.Message);     
}     
} 

 

خلاصه

در این مقاله آموختیم که چگونه SMO در دسترسی به عملیات های SQL در C# کمک می کند. می توانیم از این فضای نام ها استفاده کنیم و هر کاری که بخواهیم را انجام دهیم.

  • پسورد: www.mspsoft.com
داریوش فرخی

داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    ehsan پاسخ

    ("sda.fil(ds, "databasename
    ds اصلا در کد تعربف نشده ؟؟؟؟
    توضیح می دید چی هست

      مسعود شریفی پاسخ

      یک دیتاست است که اطلاعات درون آن قرارا میگیره ! دیتابیس باید قبلش پر بشه.

    yaser پاسخ

    سلام میشه کد بک آپ و رستورو بهم بگید و بگید کجاهاشو باید تغیر بدم؟
    ممنون