بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
نستكمل اليوم مشوارنا .
سنتحدث اليوم عن طريقة انشاء صورة و استرجاعها.
اولا سابدأ بطريقة إنشاء صورة لقاعدة البيانات التي يتم تحديدها في صندوق القواعد .
نضيف بعض الادوات على المشروع , الصورة التالية توضح هذه الادوات.
عمل صورة Backub
يمكننا كائن Backub المشمول ضمن SqlSmo من إنشاء صورة لقاعدة البيانات.
الكائن Backub يحوي عدة خصائص يمكنك استعراضها بعد انشاء نسخة من هذا الكائن بالطريقة التالية.
بعد انشاء نسخة من الكائن انت بحاجة الى تحديد نوع العنصر و اسمه وهي هنا قاعدة البيانات و اسمها.
و كما يمكننا التقاط حدث المعالجة (اقصد شريط Progress ) الخاص بـــ SqlServer ليدلنا على ان العملية قد تمت او لا.
لنبدأ بأعطاء معلومات لكائن Backub كما يلي:
بعد ذلك نحن بحاجة لتحديد مسار الصورة و نوعها.
انوه هنا على انني استخدمت الكائن FolderBrowserDialog ليقوم المستخدم بتحديد المسار يدويا.
بامكانك سحب الكائن من صندوق الادوات او تعريفه ضمن الكود و التعامل معه,انا اضفته من صندوق الادوات.
اضف عنصر FolderBrowserDialog و سميه FolderBkBros , او قم بتعريفه على حسب رغبتك.
الان علينا معالجة بعض الامور البسيطة لان الغاية من الكائن FolderBrowserDialog هو فتح مستعرض المجلدات
للبحث عن صور قواعد البيانات من النوع (*.bak) التي سننشأها لاحقا و كذلك الاحتفاظ بالمسار المفتوح و تخزينه في اعدادات البرنامج
ليفتح كل مرة على اخر مسار تم حفظه.
لذلك وجب علي ان اضيف متغير من النوع النصي لاعدادات البرنامج.
اذهب الى خصائص المشروع ثم الى التبويب Settings و اضف متغير نصي من النوع String و سميه BrowseBk
و اعطيه القيمة (D:\) و هو المسار الافتراضي الذي سيفتح عليه المستعرض لاول مرة ثم بعد ذلك سيتبدل و يحتفظ بالقيمة الجديدة
التي تختارها انت , الصورة التالية توضح المطلوب:
ملاحظة:الطريقة السابقة تفيدك كثيرا في التعامل مع تخزين نصوص الاتصال لقواعد البيانات في حال تغير مسار القاعدة.
بعد ذلك نحن بحاجة للقليل من الكود في حدث النقر على Button3 نكتب ما يلي:
الكود السابق يقوم بجلب كل ملفات (*.bak) في المسار المحدد و عرضها في قائمة bkfiles
و الاحتفاظ بالمسار في اعدادات البرنامج كما اسلفنا.
نعود الى الزر Button2 الذي سيقوم بانشاء صورة لقاعدة البيانات المحددة في مربع النص TextBox3
و يخزنها في المسار الذي حددناه قبل قليل و المعروض في مربع النص folderpath.
الكود التالي سيتكفل بالامر :
اما بالنسبة لمعالجة حدث percentcomplete فعليك اضافة هذا الاجراء:
طبعا انا خزنت اسم القاعدة مع ارسال التاريخ و الساعة و الدقيقة ليكون اسم الصورة اكثر وضوحا.
بهذا اصبح بامكاننا عمل صورة لاي قاعدة بيانات نريدها وفق المسار الذي نحدده.
الاستعادة Restore
كما هو الحال مع كائن Backub يمكننا إنشاء كائن Restore و التعامل مع خصائصه بسهولة
نحتاج الى نوع الملف و اسم الملف و مساره .
التالي كود الزر Button4 الخاص بالاستعادة.
لم يختلف عن الكود السابق كثيرا بهذا الشكل نكون اصبحنا قادرين على استعادة اي نسخة لاي قاعدة.
السلام عليكم و رحمة الله و بركاته
نستكمل اليوم مشوارنا .
سنتحدث اليوم عن طريقة انشاء صورة و استرجاعها.
اولا سابدأ بطريقة إنشاء صورة لقاعدة البيانات التي يتم تحديدها في صندوق القواعد .
نضيف بعض الادوات على المشروع , الصورة التالية توضح هذه الادوات.
- TextBox نسميه TextBox3
- TextBox نسميه folderpath
- TextBox نسميه txtrestorename
- Button نسميه Button2
- Button نسميه Button3
- Button نسميه Button4
- ProgressBar نسميه ProgressBar1
عمل صورة Backub
يمكننا كائن Backub المشمول ضمن SqlSmo من إنشاء صورة لقاعدة البيانات.
الكائن Backub يحوي عدة خصائص يمكنك استعراضها بعد انشاء نسخة من هذا الكائن بالطريقة التالية.
كود :
Dim backup As New Backup()بعد انشاء نسخة من الكائن انت بحاجة الى تحديد نوع العنصر و اسمه وهي هنا قاعدة البيانات و اسمها.
و كما يمكننا التقاط حدث المعالجة (اقصد شريط Progress ) الخاص بـــ SqlServer ليدلنا على ان العملية قد تمت او لا.
لنبدأ بأعطاء معلومات لكائن Backub كما يلي:
كود :
Dim database As Database = srv.Databases(LstDbs.SelectedItem.ToString)
Dim backup As New Backup()
backup.Action = BackupActionType.Database
backup.Database = database.Nameبعد ذلك نحن بحاجة لتحديد مسار الصورة و نوعها.
انوه هنا على انني استخدمت الكائن FolderBrowserDialog ليقوم المستخدم بتحديد المسار يدويا.
بامكانك سحب الكائن من صندوق الادوات او تعريفه ضمن الكود و التعامل معه,انا اضفته من صندوق الادوات.
اضف عنصر FolderBrowserDialog و سميه FolderBkBros , او قم بتعريفه على حسب رغبتك.
الان علينا معالجة بعض الامور البسيطة لان الغاية من الكائن FolderBrowserDialog هو فتح مستعرض المجلدات
للبحث عن صور قواعد البيانات من النوع (*.bak) التي سننشأها لاحقا و كذلك الاحتفاظ بالمسار المفتوح و تخزينه في اعدادات البرنامج
ليفتح كل مرة على اخر مسار تم حفظه.
لذلك وجب علي ان اضيف متغير من النوع النصي لاعدادات البرنامج.
اذهب الى خصائص المشروع ثم الى التبويب Settings و اضف متغير نصي من النوع String و سميه BrowseBk
و اعطيه القيمة (D:\) و هو المسار الافتراضي الذي سيفتح عليه المستعرض لاول مرة ثم بعد ذلك سيتبدل و يحتفظ بالقيمة الجديدة
التي تختارها انت , الصورة التالية توضح المطلوب:
ملاحظة:الطريقة السابقة تفيدك كثيرا في التعامل مع تخزين نصوص الاتصال لقواعد البيانات في حال تغير مسار القاعدة.
بعد ذلك نحن بحاجة للقليل من الكود في حدث النقر على Button3 نكتب ما يلي:
كود :
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
FolderBkBros.ShowDialog()
Try
If Windows.Forms.DialogResult.Yes = Windows.Forms.DialogResult.Yes Then
folderpath.Text = FolderBkBros.SelectedPath
My.Settings.BrowseBk = FolderBkBros.SelectedPath
My.Settings.Save()
Dim dir As New System.IO.DirectoryInfo(folderpath.Text)
bkfiles.Items.Clear()
For Each f As System.IO.FileInfo In dir.GetFiles("*.bak", SearchOption.AllDirectories)
bkfiles.Items.Add(f.Name)
Next
Else
Dim dir As New System.IO.DirectoryInfo(folderpath.Text)
bkfiles.Items.Clear()
For Each f As System.IO.FileInfo In dir.GetFiles("*.bak", SearchOption.AllDirectories)
bkfiles.Items.Add(f.Name)
Next
End If
Catch ex As Exception
End Try
End Subالكود السابق يقوم بجلب كل ملفات (*.bak) في المسار المحدد و عرضها في قائمة bkfiles
و الاحتفاظ بالمسار في اعدادات البرنامج كما اسلفنا.
نعود الى الزر Button2 الذي سيقوم بانشاء صورة لقاعدة البيانات المحددة في مربع النص TextBox3
و يخزنها في المسار الذي حددناه قبل قليل و المعروض في مربع النص folderpath.
الكود التالي سيتكفل بالامر :
كود :
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
'عمل النسخة الاحتياطية
If TextBox3.Text.Length > 0 Then
Dim database As Database = srv.Databases(LstDbs.SelectedItem.ToString)
Dim backup As New Backup()
backup.Action = BackupActionType.Database
backup.Database = database.Name
If MessageBox.Show(TextBox3.Text & " انت على وشك عمل نسخة احتياطية للقاعدة " & vbCrLf & folderpath.Text & " المسار الافتراضي ", "نسخة احتياطية", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign) = Windows.Forms.DialogResult.Yes Then
backup.Devices.AddDevice(FolderBkBros.SelectedPath & "\" & Trim(TextBox3.Text) & Date.Now.ToString("dd-MM-yyyy-hh.mm") & ".bak", DeviceType.File)
' backup..
backup.PercentCompleteNotification = 10
AddHandler backup.PercentComplete, AddressOf Me.ProgressEventHandler
backup.SqlBackup(srv)
MessageBox.Show("تمت العملية", "نسخة احتياطية", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
ProgressBar1.Value = 0
Try
folderpath.Text = FolderBkBros.SelectedPath
Dim dir As New System.IO.DirectoryInfo(folderpath.Text)
bkfiles.Items.Clear()
For Each f As System.IO.FileInfo In dir.GetFiles("*.bak", SearchOption.AllDirectories)
bkfiles.Items.Add(f.Name)
Next
Catch ex As Exception
End Try
Else
MessageBox.Show("تم الغاء العملية", "نسخة احتياطية", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End If
Else
MessageBox.Show("لم يتم تحديد القاعدة", "نسخة احتياطية", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End If
If srv.ConnectionContext.IsOpen Then
srv.ConnectionContext.Disconnect()
End If
End Subاما بالنسبة لمعالجة حدث percentcomplete فعليك اضافة هذا الاجراء:
كود :
Public Sub ProgressEventHandler(sender As Object, e As PercentCompleteEventArgs)
Me.ProgressBar1.Value = e.Percent
End Subطبعا انا خزنت اسم القاعدة مع ارسال التاريخ و الساعة و الدقيقة ليكون اسم الصورة اكثر وضوحا.
بهذا اصبح بامكاننا عمل صورة لاي قاعدة بيانات نريدها وفق المسار الذي نحدده.
الاستعادة Restore
كما هو الحال مع كائن Backub يمكننا إنشاء كائن Restore و التعامل مع خصائصه بسهولة
نحتاج الى نوع الملف و اسم الملف و مساره .
التالي كود الزر Button4 الخاص بالاستعادة.
كود :
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
'الاسترجاع
If TextBox3.Text = "" Then
MessageBox.Show("يرجى تحديد اسم القاعدة اولا", "إستعادة النسخة", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
ElseIf txtrestorename.Text = "" Then
MessageBox.Show("يرجى تحديد نسخة الاسترجاع", "إستعادة النسخة", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
If MessageBox.Show(TextBox3.Text & " انت على وشك عمل إستعادة صورة للقاعدة " & vbCrLf & txtrestorename.Text & " إسم ملف الصورة " & vbCrLf & "يرجى التاكد من تطابق الاسماء", "إسترجاع نسخة", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign) = Windows.Forms.DialogResult.Yes Then
Try
Dim database As Database = srv.Databases(LstDbs.SelectedItem.ToString)
Dim restore As New Restore()
restore.Action = RestoreActionType.Database
restore.Devices.AddDevice(FolderBkBros.SelectedPath & "\" & bkfiles.SelectedItem.ToString, DeviceType.File)
restore.Database = database.Name
restore.PercentCompleteNotification = 10
AddHandler restore.PercentComplete, AddressOf Me.ProgressEventHandler
restore.ReplaceDatabase = True
restore.SqlRestore(srv)
MessageBox.Show("تمت العملية", "إستعادة النسخة", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Catch exSMO As SmoException
MessageBox.Show(exSMO.ToString())
Catch ex As Exception
MessageBox.Show(ex.ToString())
Finally
Me.ProgressBar1.Value = 0
If srv.ConnectionContext.IsOpen Then
srv.ConnectionContext.Disconnect()
End If
End Try
Else
MessageBox.Show("تم إالغاء عملية الإستعادة", "إستعادة النسخة", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End If
End Subلم يختلف عن الكود السابق كثيرا بهذا الشكل نكون اصبحنا قادرين على استعادة اي نسخة لاي قاعدة.
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال


