19-04-25, 10:32 PM
نعم، يمكن عمل نسخة احتياطية (Backup) من قاعدة بيانات SQL LocalDB ، خاصة إذا كنت تستخدم ملف قاعدة بيانات (مثل .mdf) مرتبط بـ LocalDB.
إليك كودًا بسيطًا يقوم بنسخ ملف قاعدة البيانات والملف المصاحب له (.ldf) إلى مجلد النسخ الاحتياطي. يفترض أن قاعدة البيانات غير متصلة (Detached) أو أنه يمكنك فصل الاتصال مؤقتًا:
طريقة الاستخدام من النموذج (Form)
كود الاستعادة من النسخة الاحتياطية (Restore)
الاستخدام من الفورم (مثال عند الضغط على زر)
ملاحظات مهمة جدًا:
تأكد من غلق أي اتصال مع قاعدة البيانات قبل تنفيذ الاستعادة.
يمكنك مثلاً استخدام SqlConnection.Close() أو حتى إعادة تشغيل البرنامج بعد الاستعادة.
هذه الطريقة تعمل مع ملفات mdf المرتبطة بتطبيقك باستخدام |DataDirectory|.
يمكن أيضًا تعديل الكود لتحديث الاتصال أو إعادة التحميل بعد الاستعادة إذا رغبت.
بالتوفيق.
إليك كودًا بسيطًا يقوم بنسخ ملف قاعدة البيانات والملف المصاحب له (.ldf) إلى مجلد النسخ الاحتياطي. يفترض أن قاعدة البيانات غير متصلة (Detached) أو أنه يمكنك فصل الاتصال مؤقتًا:
PHP كود :
Imports System.IO
Public Class BackupHelper
Public Shared Sub BackupLocalDB(ByVal dbName As String, ByVal backupDirectory As String)
Dim dataDir As String = AppDomain.CurrentDomain.GetData("DataDirectory").ToString()
Dim mdfFile As String = Path.Combine(dataDir, dbName & ".mdf")
Dim ldfFile As String = Path.Combine(dataDir, dbName & "_log.ldf")
Dim backupMdf As String = Path.Combine(backupDirectory, dbName & "_backup.mdf")
Dim backupLdf As String = Path.Combine(backupDirectory, dbName & "_backup_log.ldf")
Try
' إنشاء مجلد النسخ الاحتياطي إن لم يكن موجوداً
Directory.CreateDirectory(backupDirectory)
' نسخ الملفات
File.Copy(mdfFile, backupMdf, True)
File.Copy(ldfFile, backupLdf, True)
MessageBox.Show("تم إنشاء النسخة الاحتياطية بنجاح", "نسخ احتياطي", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign Or MessageBoxOptions.RtlReading)
Catch ex As Exception
MessageBox.Show("حدث خطأ أثناء النسخ الاحتياطي: " & ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign Or MessageBoxOptions.RtlReading)
End Try
End Sub
End Class
طريقة الاستخدام من النموذج (Form)
PHP كود :
' مثال: عند الضغط على زر النسخ الاحتياطي
Private Sub BtnBackup_Click(sender As Object, e As EventArgs) Handles BtnBackup.Click
Dim databaseName As String = "MyDatabase" ' اسم القاعدة بدون الامتداد
Dim backupPath As String = "C:\BackupFolder"
BackupHelper.BackupLocalDB(databaseName, backupPath)
End Sub
كود الاستعادة من النسخة الاحتياطية (Restore)
PHP كود :
Imports System.IO
Public Class RestoreHelper
Public Shared Sub RestoreLocalDB(ByVal dbName As String, ByVal backupDirectory As String)
Dim dataDir As String = AppDomain.CurrentDomain.GetData("DataDirectory").ToString()
Dim mdfFile As String = Path.Combine(dataDir, dbName & ".mdf")
Dim ldfFile As String = Path.Combine(dataDir, dbName & "_log.ldf")
Dim backupMdf As String = Path.Combine(backupDirectory, dbName & "_backup.mdf")
Dim backupLdf As String = Path.Combine(backupDirectory, dbName & "_backup_log.ldf")
Try
' تأكد أن النسخة الاحتياطية موجودة
If Not File.Exists(backupMdf) OrElse Not File.Exists(backupLdf) Then
MessageBox.Show("النسخة الاحتياطية غير موجودة!", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign Or MessageBoxOptions.RtlReading)
Return
End If
' حذف الملفات الأصلية إن وُجدت
If File.Exists(mdfFile) Then File.Delete(mdfFile)
If File.Exists(ldfFile) Then File.Delete(ldfFile)
' نسخ النسخة الاحتياطية مكان الأصلية
File.Copy(backupMdf, mdfFile)
File.Copy(backupLdf, ldfFile)
MessageBox.Show("تمت استعادة النسخة الاحتياطية بنجاح.", "استعادة", MessageBoxButtons.OK, MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign Or MessageBoxOptions.RtlReading)
Catch ex As Exception
MessageBox.Show("حدث خطأ أثناء الاستعادة: " & ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign Or MessageBoxOptions.RtlReading)
End Try
End Sub
End Class
الاستخدام من الفورم (مثال عند الضغط على زر)
PHP كود :
Private Sub BtnRestore_Click(sender As Object, e As EventArgs) Handles BtnRestore.Click
Dim dbName As String = "MyDatabase"
Dim backupPath As String = "C:\BackupFolder"
RestoreHelper.RestoreLocalDB(dbName, backupPath)
End Sub
ملاحظات مهمة جدًا:
تأكد من غلق أي اتصال مع قاعدة البيانات قبل تنفيذ الاستعادة.
يمكنك مثلاً استخدام SqlConnection.Close() أو حتى إعادة تشغيل البرنامج بعد الاستعادة.
هذه الطريقة تعمل مع ملفات mdf المرتبطة بتطبيقك باستخدام |DataDirectory|.
يمكن أيضًا تعديل الكود لتحديث الاتصال أو إعادة التحميل بعد الاستعادة إذا رغبت.
بالتوفيق.
