PDA

View Full Version : سوال: پشتیبان گیری اتوماتیک از بانک اطلاعاتی SQL2000در vb.net



mahbobehshab
دوشنبه 06 دی 1389, 13:35 عصر
سلام دوستان
من میخوام که تو برنامه م کار کنم که کاربر به محض اینکه از برنامه خارج بشه یک آپ از بانک اطلاعاتی با تاریخ و ساعت همون روز ایجاد کنه.توروخداکمکم کنید.خیلی ضروریه:ناراحت:

DoDoklak
دوشنبه 06 دی 1389, 17:39 عصر
جهت اينکار ابتدا بايد پوشه محل قرار گیری نسخه پشتیبان را بسازید که احتیاج به دوتا تابع دارید

اولی تابعی برای گرفتن تاریخ شمسی



PublicFunction GetDate() AsString
Try
Dim ps AsNew Globalization.PersianCalendar()
Dim y AsString = ps.GetYear(DateTime.Now)
Dim m AsString = ps.GetMonth(DateTime.Now)
Dim d AsString = ps.GetDayOfMonth(DateTime.Now)
If y.Length <= 1 Then y = "0" + y
If m.Length <= 1 Then m = "0" + m
If d.Length <= 1 Then d = "0" + d
Return y & "/" & m & "/" & d
Catch ex As Exception
Return ""
EndTry
EndFunction


دومی تابعی برای ساختن پوشه با تاریخ و ساعت



PrivateFunction CreatePath(ByVal path AsString) AsString
Try
Dim t_time AsString = GetDate().Replace("/", "-") & " " & Date.Now.ToLongTimeString.Replace(":", "-")
If path(path.Length - 1) <> "\" Then
Directory.CreateDirectory(path + "\" + t_time)
Return path + "\" + t_time
Else
Directory.CreateDirectory(path + t_time)
Return path + t_time
EndIf
Catch ex As Exception
Return ""
EndTry
EndFunction


بعد با کد زیر پشتیبان را میگیرید



Dim str_path AsString = CreatePath(backPath)
Dim SqlCon AsNew SqlConnection("Data Source=LocalHost;User ID=;Password=")
If SqlCon.State <> ConnectionState.Open Then SqlCon.Open()
Using CMD AsNew SqlCommand("BACKUP DATABASE DBName TO DISK = N'" & str_path & "\Info.BAK', SqlCon)
CMD.CommandTimeout = 0
CMD.ExecuteNonQuery()
EndUsing
If SqlCon.State <> ConnectionState.Closed Then SqlCon.Close()

mansourii
دوشنبه 06 دی 1389, 17:46 عصر
به این تایپک یه سر بزن
(http://barnamenevis.org/showthread.php?178801-%D9%BE%D8%B4%D8%AA%D9%8A%D8%A8%D8%A7%D9%86-%DA%AF%D9%8A%D8%B1%D9%8A-%D8%A7%D8%B2-SQL-%D8%AF%D8%B1-VB.net)

mansourii
دوشنبه 06 دی 1389, 17:48 عصر
با این کد هم میتونید در اجرای برنامه بدون اینکه فایل پشتیبان رو Restore کنید /بصورت اتومات Restore بشه

Imports System.Data.SqlClient
Public Class FrmAttachDB
Dim constatus As Boolean = False
Dim con As SqlConnection

Private Sub FrmAttachDB_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If My.Computer.FileSystem.DirectoryExists("C:\database") = False Then
My.Computer.FileSystem.CreateDirectory("C:\Database")
End If
DropDatabase()
CopyDB()
AttachDB()
Me.Close()
End Sub

Function AttachDB() As Boolean
ConOpen()
Dim cmd As New SqlCommand()
Dim txt As String

txt = "sp_attach_db @dbname = N'MyDatabase', " & vbCrLf & _
"@filename1 = N'C:\Database\MyDatabase.MDF', " & vbCrLf & _
"@filename2 = N'C:\Database\MyDatabase_log.LDF'"

cmd.CommandText = txt
cmd.Connection = con
cmd.ExecuteNonQuery()
End Function

Public Sub ConOpen()
Try
constatus = True
con = New SqlConnection("Data Source=.;Initial Catalog=master;Integrated Security=True")
con.Open()
Catch ex As Exception
constatus = False
End Try
End Sub
Function DropDatabase() As Boolean
Dim cn As New SqlClient.SqlConnection
cn.ConnectionString = _
"Server=localhost;" & _
"DataBase=Master;" & _
"Integrated Security=SSPI;" & _
"data source=(local)"
Dim CreateDBCommand As New SqlClient.SqlCommand
CreateDBCommand.Connection = cn
CreateDBCommand.CommandText = "IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'MyDatabase') " & _
"DROP DATABASE [MyDatabase]"
cn.Open()
Try
CreateDBCommand.ExecuteNonQuery()
Catch Ex As Exception
End Try
cn.Close()
Return True
End Function
Function CopyDB() As Boolean
My.Computer.FileSystem.CopyFile(My.Application.Inf o.DirectoryPath + "\Database\MyDatabase.mdf", "C:\Database\MyDatabase.mdf", True)
My.Computer.FileSystem.CopyFile(My.Application.Inf o.DirectoryPath + "\Database\MyDatabase_log.ldf", "C:\Database\MyDatabase_log.ldf", True)
End Function
End Class

به شرطی که MDF و LOG دیتا بیستون در یک پوشه ای بنام Database در کنار برنامتون ذخیره کنید.