نحوه BackUp و Restore کردن بانک اطلاعاتی در #C

یکشنبه 17 آبان 1394

در این مقاله میخواهیم شما را با یک نرم افزار محبوب برنامه نویسان آشنا کنیم در این آموزش به نحوه BackUp و Restore کردن بانک اطلاعاتی میپردازیم.

نحوه BackUp و Restore کردن  بانک اطلاعاتی در #C

اغلب برای BackUp و Restore  بانک اطلاعاتی نیاز به نصب نرم افزار SqL Server   داریم ولی در این  آموزش میخواهیم بدون استفاده از نرم افزار Sql به BackUp و  Restore کردن بانک اطلاعاتی بپردازیم

برای شروع ویژوال استادیو را باز کرده و یک پروژه از نوع winform  ایجاد میکنیم

فقط  این نکته را یادآوری کنم ما در این  آموزش از SMO assembly استفاده میکنیم برای استفاده از SMo   بایستی از فضای نام های زیر را به برنامه اضافه کنید.

برای اضافه کردن فایل ها در C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies رفته و و با dll های زیر روبه رو میشوید

Microsoft.SqlServer.Smo

Microsoft.SqlServer.SmoExtended

Microsoft.SqlServer.Management.Sdk.Sfc

Microsoft.SqlServer.ConnectionInfo

حال در قسمت refernceرفته و دو فضای نام زیر را به برنامه اضافه میکنیم

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

در پروژه  میتوانید بانک اطلاعاتی را علاوه بر این که از سیستم local  استفاده کنید میتوانید از شبکه نیز بانک را انتخاب کنید

برای این کار از تابع زیر استفاده  میکنیم

RegistryKey rk = Registry.LocalMachine.OpenSubKey
		(@"SOFTWARE\Microsoft\Microsoft SQL Server");
String[] instances = (String[])rk.GetValue("InstalledInstances");
if (instances.Length > 0)
{
    foreach (String element in instances)
    {
        if (element == "MSSQLSERVER")
            lstLocalInstances.Items.Add(System.Environment.MachineName);
        else
            lstLocalInstances.Items.Add(System.Environment.MachineName + @"\" + element);
    }
}

حال برای آن که بتوان از  تمام جداول بانک اطلاعاتی Backup تهیه کرد کافی است ازمتد EnumAvailableSqlsevrers  که در کلاس SomAppliction  است استفاده کنیم


 
DataTable dt = SmoApplication.EnumAvailableSqlServers(false);

if (dt.Rows.Count > 0)
{
    foreach (DataRow dr in dt.Rows)
    {
        AddNetworkInstance(dr["Name"].ToString());
    }
}

حال برای Backup گرفتن از بانک اطلاعاتی از کد زیر استفاده میکنیم

Backup bkp = new Backup();

this.Cursor = Cursors.WaitCursor;
this.dataGridView1.DataSource = string.Empty;
try
{
    string fileName = this.txtFileName.Text;
    string databaseName = this.ddlDatabase.SelectedItem.ToString();

    bkp.Action = BackupActionType.Database;
    bkp.Database = databaseName;
    bkp.Devices.AddDevice(fileName, DeviceType.File);
    bkp.Incremental = chkIncremental.Checked;
    this.progressBar1.Value = 0;
    this.progressBar1.Maximum = 100;
    this.progressBar1.Value = 10;

    bkp.PercentCompleteNotification = 10;
    bkp.PercentComplete += new PercentCompleteEventHandler(ProgressEventHandler);

    bkp.SqlBackup(srv);
    MessageBox.Show("Database was successfully backed up to: " + fileName, "Info");
}

catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}
finally
{
    this.Cursor = Cursors.Default;
    this.progressBar1.Value = 0;
}

حال برای نشان دادن درضد پیشرفت از یک event استفاده میکنیم که این event درصد پیشرفت کار را نشان میدهد که بین 0 تا 100 میباشد.

public void ProgressEventHandler(object sender, PercentCompleteEventArgs e)
{
    this.progressBar1.Value = e.Percent;
}

گاهی برای Backup گرفتن از بانک اطلاعاتی دچار مشکل میشویم و به صورت درست از بانک اطلاعاتی Backup نمیگیرد حال برای  بررسی و صحت فایل Backup گرفته شده کافی است از SqlVerify  استفاده میکنیم

public void ProgressEventHandler(object sender, PercentCompleteEventArgs e)
{
    this.progressBar1.Value = e.Percent;
}

و در نهایت برای Restor کردن بانک اطلاعاتی از کد زیر در برنامه استفاده میکنیم

Restore res = new Restore();

this.Cursor = Cursors.WaitCursor;
this.dataGridView1.DataSource = string.Empty;

try
{
    string fileName = this.txtFileName.Text;
    string databaseName = this.ddlDatabase.SelectedItem.ToString();

    res.Database = databaseName;
    res.Action = RestoreActionType.Database;
    res.Devices.AddDevice(fileName, DeviceType.File);

    this.progressBar1.Value = 0;
    this.progressBar1.Maximum = 100;
    this.progressBar1.Value = 10;

    res.PercentCompleteNotification = 10;
    res.ReplaceDatabase = true;
    res.PercentComplete += new PercentCompleteEventHandler(ProgressEventHandler);
    res.SqlRestore(srv);

    MessageBox.Show("Restore of " + databaseName + 
	" Complete!", "Restore",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}
finally
{
    this.Cursor = Cursors.Default;
    this.progressBar1.Value = 0;
}

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 7k بازدید
  • 14 تشکر

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید