VB實現SQL Server數據庫備份/恢復

發表于:2007-07-01來源:作者:點擊數: 標簽:
************************************************************************* **模 塊 名:fBackupDatabase_a **描 述:備份 數據庫 ,返回出錯信息,正?;謴?返回"" **調 用:fBackupDatabase_a "備份文件名","數據庫名" **參數說明: ** sBackUpfileName


´*************************************************************************
´**模 塊 名:fBackupDatabase_a
´**描    述:備份數據庫,返回出錯信息,正?;謴?返回""
´**調    用:fBackupDatabase_a "備份文件名","數據庫名"
´**參數說明:
´**          sBackUpfileName  恢復后的數據庫存放目錄
´**          sDataBaseName    備份的數據名
´**          sIsAddBackup     是否追加到備份文件中
´**說    明:引用Microsoft ActiveX Data Objects 2.x Library
´**創 建 人:鄒建
´**日    期:2003年12月09日
´*************************************************************************
Public Function fBackupDatabase_a(ByVal sBackUpfileName$ _
                                , ByVal sDataBaseName$ _
                                , Optional ByVal sIsAddBackup As Boolean = False _
                                ) As String
                               
    Dim iDb As ADODB.Connection
    Dim iConcStr$, iSql$, iReturn$
   
    On Error GoTo lbErr
   
    ´創建對象
    Set iDb = New ADODB.Connection
   
    ´連接數據庫服務器,根據你的情況修改連接字符串
    iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj"
    iDb.Open iConcStr
   
    ´生成數據庫備份語句
    iSql = "backup database [" & sDataBaseName & "]" & vbCrLf & _
            "to disk=´" & sBackUpfileName & "´" & vbCrLf & _
            "with description=´" & "zj-backup at:" & Date & "(" & Time & ")´" & vbCrLf & _
            IIf(sIsAddBackup, "", ",init")
           
    iDb.Execute iSql
    GoTo lbExit
   
lbErr:
    iReturn = Error
lbExit:
    fBackupDatabase_a = iReturn
End Function

´*************************************************************************
´**模 塊 名:frestoredatabase_a
´**描    述:恢復數據庫,返回出錯信息,正?;謴?返回""
´**調    用:frestoredatabase_a "備份文件名","數據庫名"
´**參數說明:
´**          sDataBasePath  恢復后的數據庫存放目錄
´**          sBackupNumber  是從那個備份號恢復
´**          sReplaceExist  指定是否覆蓋已經存在的數據
´**說    明:引用Microsoft ActiveX Data Objects 2.x Library
´**創 建 人:鄒建
´**日    期:2003年12月09日
´*************************************************************************
Public Function fRestoreDatabase_a(ByVal sBackUpfileName$ _
                                , ByVal sDataBaseName$ _
                                , Optional ByVal sDataBasePath$ = "" _
                                , Optional ByVal sBackupNumber& = 1 _
                                , Optional ByVal sReplaceExist As Boolean = False _
                                ) As String
   
    Dim iDb As ADODB.Connection, iRe As ADODB.Recordset
    Dim iConcStr$, iSql$, iReturn$, iI&
   
    On Error GoTo lbErr
   
    ´創建對象
    Set iDb = New ADODB.Connection
    Set iRe = New ADODB.Recordset
   
    ´連接數據庫服務器,根據你的情況修改連接字符串
    iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj"
    iDb.Open iConcStr
   
    ´得到還原后的數據庫存放目錄,如果沒有指定,存放到SQL SERVER的DATA目錄
    If sDataBasePath = "" Then
        iSql = "select filename from master..sysfiles"
        iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
        iSql = iRe(0)
        iRe.Close
        sDataBasePath = Left(iSql, InStrRev(iSql, "\"))
    End If
   
    ´檢查數據庫是否存在
    If sReplaceExist = False Then
        iSql = "select 1 from master..sysdatabases  where name=´" & sDataBaseName & "´"
        iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
        If iRe.EOF = False Then
            iReturn = "數據庫已經存在!"
            iRe.Close
            GoTo lbExit
        End If
        iRe.Close
    End If
   
    ´關閉用戶進程,防止其它用戶正在使用數據庫,導致數據恢復失敗
    iSql = "select spid from master..sysprocesses where dbid=db_id(´" & sDataBaseName & "´)"
    iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
    While iRe.EOF = False
        iSql = "kill " & iRe(0)
        iDb.Execute iSql
        iRe.MoveNext
    Wend
    iRe.Close
   
    ´獲取數據庫恢復信息
    iSql = "restore filelistonly from disk=´" & sBackUpfileName & "´" & vbCrLf & _
        "with file=" & sBackupNumber
    iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
   
    ´生成數據庫恢復語句
    iSql = "restore database [" & sDataBaseName & "]" & vbCrLf & _
        "from disk=´" & sBackUpfileName & "´" & vbCrLf & _
        "with file=" & sBackupNumber & vbCrLf
    With iRe
        While Not .EOF
            iReturn = iRe("PhysicalName")
            iI = InStrRev(iReturn, ".")
            iReturn = IIf(iI = 0, "", Mid(iReturn, iI)) & "´"
            iSql = iSql & ",move ´" & iRe("LogicalName") & _
                    "´ to ´" & sDataBasePath & sDataBaseName & iReturn & vbCrLf
            .MoveNext
        Wend
        .Close
    End With
    iSql = iSql & IIf(sReplaceExist, ",replace", "")
   
    iDb.Execute iSql
    iReturn = ""
    GoTo lbExit
   
lbErr:
    iReturn = Error
lbExit:
    fRestoreDatabase_a = iReturn
End Function


原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97