السلام عليكم و رحمة الله و بركاته ..
كنت أستخدم كود VB.NET لعمل نسخ إحتياطى إحتياطى BACKUP و إستعادة قاعدة البيانات مرة أخرى RESTORE لقاعدة بيانات SQL SERVER 2005 كان يعمل بشكل صحيح و عندما قمت بإستخدام نفس الكود مع تغيير قاعدة البيانات إلى SQL SERVER 2008 لم يعمل الكود بشكل صحيح .. و إلى حضراتكم الكود و رسالة الخطأ .
* كود الـ BACKUP
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.SqlServer.Management.Common
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer
Imports Microsoft.SqlServer.Server
Imports Microsoft.SqlServer.Management
Private Const srvrConnectionString As String = "Data Source=MOHAMED-PC\SQLEXPRESS;Persist Security Info=True;User ID=sa;Password=1900818;Connect Timeout=30"
Public Sub Make_Backup()
Dim bError As Boolean
Dim dlgSaveFile As New SaveFileDialog()
bError = False
dlgSaveFile.Filter = "SQL Server database backup files|*.bak"
dlgSaveFile.FileName = "paintsDB_backup"
'********************************** حالة إلغاء إستعادة النسخة *********************************
select Case dlgSaveFile.ShowDialog(MDI)
Case Windows.Forms.DialogResult.Cancel
Exit Sub
Case Windows.Forms.DialogResult.OK
MDI.update()
'////////////////////////////////////////////////////////////////////////////////////////////////////////
FrmLoading.LblMsg.Text = "...... جارى إنشاء النسخة الإحتياطية لقاعدة البيانات"
FrmLoading.ShowDialog()
'/////////////////////////////////////////////////////////////////////////////////////////////////////////
'Null إنشاء كائن الإتصال
Dim sqlConnection As New SqlClient.SqlConnection(srvrConnectionString)
Dim srvrConnection As New ServerConnection(sqlConnection)
'Null ربط الإتصال بالملقم
Dim srvr As New Server(srvrConnection)
'Null إنشاء الكائن الذي سنستعمله لإنشاء النسخة الإحتياطية
Dim bkp As New Backup()
'Null تحديد العملية في إنشاء نسخة احتياطية لكامل قاعدة البيانات
bkp.Action = BackupActionType.Database
'Null تحديد اسم قاعدة البيانات
bkp.Database = "paints"
'Null تعليق على النسخة الإحتياطية
bkp.BackupSetDescription = "Database " + "paints" + " backup " + DateTime.Today.ToShortDateString()
'Null إسم النسخة الإحتياطية
bkp.BackupSetName = "paints" + "_backup"
'Null إنشاء نسخة كاملة لقاعدة البيانات وليس فقط للبيانات التي تم تغييرها
bkp.Incremental = False
'Null حساب مجموع البيانات للتأكد من صحة النسخة الإحتياطية
bkp.Checksum = True
'Null اقتطاع سجل قاعدة البيانات بعد إنشاء النسخة الإحتياطية
bkp.LogTruncation = BackupTruncateLogType.Truncate
'Null تحديد نوع الجهاز الذي سيتم عليه إنشاء النسخة الإحتياطية في ملف
Dim bdi As New BackupDeviceItem(dlgSaveFile.FileName, DeviceType.File)
bkp.Devices.Add(bdi)
Try
'Null بدأ عملية إنشاء النسخة الإحتياطية لقاعدة البيانات
bkp.SqlBackup(srvr)
Catch ex As Exception
'MessageBox.Show("فشلت عملية إنشاء النسخة الإحتياطية لقاعدة البيانات", "--", MessageBoxButtons.OK, MessageBoxIcon.Error)
MsgBox(ex.InnerException.ToString)
'MsgBox(ex.Message)
bError = True
End Try
If Not bError Then MessageBox.Show("تمت عملية إنشاء النسخة الإحتياطية بنجاح", " ---", MessageBoxButtons.OK, MessageBoxIcon.Information)
End select
'**********************************************************************************************
'***************************************************************************************
FrmLoading.LblMsg.Text = "...... جارى الخروج من البرنامج"
FrmLoading.ShowDialog()
Con.Close()
'End
End Sub
* كود الـ RESTORE
Public Sub Restore_Backup()
Dim bError As Boolean
Dim dlgOpenFile As New OpenFileDialog()
bError = False
dlgOpenFile.Filter = "SQL Server database backup files|*.bak"
'********************************** حالة إلغاء إستعادة النسخة *********************************
select Case dlgOpenFile.ShowDialog(MDI)
Case Windows.Forms.DialogResult.Cancel
Exit Sub
Case Windows.Forms.DialogResult.OK
MDI.update()
'////////////////////////////////////////////////////////////////////////////////////////////////////////
FrmLoading.LblMsg.Text = "...... جارى إستعادة قاعدة البيانات من النسخة الإحتياطية"
FrmLoading.ShowDialog()
'/////////////////////////////////////////////////////////////////////////////////////////////////////////
'Null إنشاء كائن الإتصال
Dim sqlConnection As New SqlClient.SqlConnection(srvrConnectionString)
Dim srvrConnection As New ServerConnection(sqlConnection)
'Null ربط الإتصال بالملقم
Dim srvr As New Server(srvrConnection)
'Null إنشاء الكائن الذي سنستعمله لاستعادة قاعدة البيانات من النسخة الإقتصادية
Dim rstr As New Restore()
'Null استبدال قاعدة البيانات بأكملها
rstr.Action = RestoreActionType.Database
'Null التأكد من صحة البيانات من خلال التأكد من حساب مجموع البيانات
rstr.Checksum = True
'Null استكمال العملية حتى بعد حصول أخطاء في عملية الإستعادة
rstr.ContinueAfterError = True
'Null اسم قاعدة البيانات التي سيتم استبدالها
rstr.Database = "paints"
'Null تحديد الجهاز الذي تتواجد به النسخة الإحتياطية
rstr.Devices.Add(New BackupDeviceItem(dlgOpenFile.FileName, DeviceType.File))
'Null قاعدة البيانات الحالية سيتم استبدالها بتلك الموجودة على النسخة الإحتياطية
rstr.ReplaceDatabase = True
'Null تأكيد استبدال قاعدة البيانات بأكملها و ليس جزء منها فقط
rstr.Partial = False
Try
'Null عملية التأكد من النسخة الإحتياطية قبل بدإ عملية الإستبدال
If rstr.SqlVerify(srvr) Then
'Null إيقاف كل ماهو مرتبط بقاعدة البيانات
srvr.KillAllProcesses("paints")
'Null عزل قاعدة البيانات عن الملقم
srvr.DetachDatabase("paints", True)
'Null بدأ عملية استعادة قاعدة البيانات
rstr.SqlRestore(srvr)
End If
Catch ex As Exception
MessageBox.Show("فشلت عملية استعادة قاعدة البيانات من النسخة الإحتياطية", "----", MessageBoxButtons.OK, MessageBoxIcon.Error)
bError = True
End Try
If Not bError Then MessageBox.Show("تمت عملية استعادة قاعدة البيانات من النسخة الإحتياطية بنجاح", "---", MessageBoxButtons.OK, MessageBoxIcon.Information)
End select
'***************************************************************************************
FrmLoading.LblMsg.Text = "...... جارى الخروج من البرنامج"
FrmLoading.ShowDialog()
Con.Close()
End
end sub
أما بخصوص رسالة الخطأ فهى مرفقة فى الصورة .. مرفق الرسالتين الآتيتين
MsgBox(ex.InnerException.ToString)
MsgBox(ex.Message)
المصغرات المرفقة