نحوه BackUp و Restore کردن بانک اطلاعاتی در #C
یکشنبه 17 آبان 1394در این مقاله میخواهیم شما را با یک نرم افزار محبوب برنامه نویسان آشنا کنیم در این آموزش به نحوه BackUp و Restore کردن بانک اطلاعاتی میپردازیم.
اغلب برای 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; }
- C#.net
- 7k بازدید
- 14 تشکر