سلام دوست عزیز کارهایی که بهشون اشاره کردی (برنامه حسابداری هلو) کد نویسی بسیار ساده ای داره . در واقع یکی از ویژگیهای جدید .Net این اجازه رو به برنامه نویس میده که بدون استفاده از توابع Sql و تنها با اضافه کردن چند رفرنس و اجرای فانکشهای از پیش تعریف شده اونها ، اعمال مورد نظر رو انجام بده .
مراحل انجام کار رو برات توضیح میدم .
ابتدا رفرنس های زیر رو به برنامتون اضافه کنید :
Microsoft.SqlServer.Smo
Microsoft.SqlServer.ConnectionInfo
بعد
nameSpace های زیر رو به صورت زیر به کلاستون Import کنید :
Imports System.Data.SqlClient
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common
کد زیر رو برای گرفتن پشتیبان از دیتابیس استفاده کنید.
Public Shared Sub BackupDatabase(ByVal ConnectionStr As String, ByVal DevicePath As String)
Dim DataName As String="DataBaseName.bak"
Using cnn As New SqlConnection(ConnectionStr)
cnn.Open()
Dim Srvcon As New ServerConnection(cnn)
Dim Srv As New Server(Srvcon)
' Create backup device item for the backup
Dim bdi As New BackupDeviceItem(DevicePath & DataName, DeviceType.File)
' Create the backup informaton
Dim Backup As New Backup
Backup.Devices.Add(bdi)
With Backup
'Type Of Backup
.Action = BackupActionType.Database
.BackupSetDescription = "Backup DataBase"
.BackupSetName = "DB"
.Database = cnn.Database.ToString()
.LogTruncation = BackupTruncateLogType.Truncate
'Backup.ExpirationDate = New DateTime(2007, 5, 1)
' Run the backup
.SqlBackup(Srv)
End With
End Using
End Sub
پارامترهای این رویه شامل کانکشن استرینگ که رشته مربوط به اتصال به دیتابیس رو مشخص میکنه و
Device Path که مسیر ذخیره بانک اطلاعاتی رو مشخص میکنه هست . شما میتونید با استفاده از یک
SaveFileDialog این مسیر رو از کاربر دریافت کنید .
متغییر
DataName نام فایل پشتیبان رو مشخص میکنه که پسوند اون
bak است.
تا اینجا مربوط به پشتیبان گیری بود. برای انجام عمل restore از رویه زیر استفاده کنید.:
Public Shared Sub RestoreBackup(ByVal ConnectionStr As String, ByVal DevicePath As String)
Using cnn As New SqlConnection(ConnectionStr)
cnn.Open()
Dim DBName As String = cnn.Database
cnn.ChangeDatabase("master")
Dim Srvcon As New ServerConnection(cnn)
Dim Srv As New Server(Srvcon)
' Create backup device item for the backup
Dim bdi As New BackupDeviceItem(DevicePath, DeviceType.File)
' Create the restore object
Dim Restore As New Restore()
'cnn.Close()
With Restore
.Devices.Add(bdi)
.NoRecovery = False
.ReplaceDatabase = True
.Database = DataBaseName.bak
' Restore the database
Srv.KillAllProcesses(DBName) 'Important Code For Remove All Processes
.SqlRestore(Srv)
End With
End Using
End Sub
پارامترها مانند قبلند با این تفاوت که
Device Path در اینجا شامل
مسیر ونام بانک اطلاعاتی است که میتوان با استفاده از
OpenFileDialog آن را از کاربر دریافت نمود . متد
ChangeDatabase نیز باعث میشه مشکلی که جناب
rezaei manesh بهش اشاره کردن پیش نیاد . برای اطمینان بیشتر متد
KillAllProcesses رو هم استفاده کنید .
لازم به ذکر است که این روش رو خودم بارها پیاده سازی کردم وکاملا هم جواب داده . اگه جایی مشکل پیدا کردی مطرح کن .