见一同事用VB实现了在程序中调用sql server2000中的自带的备份与恢愎窗体对数据库进行备份与恢愎,请问在VC6中如何实现该功能。VB中部分代码如下:'备份数据库
Private Sub sysBackup()
On Error GoTo ErrHandler
hArray(1) = objSQLNS.GetFirstChildItem(hArray(0), SQLNSOBJECTTYPE_DATABASES)
hArray(2) = objSQLNS.GetFirstChildItem(hArray(1), SQLNSOBJECTTYPE_DATABASE, ConnectDB.pubDataBase)
Dim objSQLNSObj As SQLNamespaceObject
Set objSQLNSObj = objSQLNS.GetSQLNamespaceObject(hArray(2))
objSQLNSObj.Commands(10).Execute
Cleanup:
Set objSQLNSObj = Nothing
Exit Sub
ErrHandler:
GoTo Cleanup
End Sub
'恢复数据库
Private Function sysRestore() As Boolean
On Error GoTo ErrHandler
sysRestore = True
hArray(1) = objSQLNS.GetFirstChildItem(hArray(0), SQLNSOBJECTTYPE_DATABASES)
hArray(2) = objSQLNS.GetFirstChildItem(hArray(1), SQLNSOBJECTTYPE_DATABASE, ConnectDB.pubDataBase)
Dim objSQLNSObj As SQLNamespaceObject
Set objSQLNSObj = objSQLNS.GetSQLNamespaceObject(hArray(2))
myConn.Execute "use master"
Dim rst As New ADODB.Recordset, rstr As String
Set rst = myConn.Execute("sp_who")
Do While Not rst.EOF
If rst.Fields("dbname") = ConnectDB.pubDataBase Then
rstr = rstr & "登录名:" & rst("loginame") & " , " & "机器名:" & rst.Fields("hostname") & Chr(13)
End If
rst.MoveNext
Loop
If rstr <> "" Then
If MsgDBox("有如下人员正在使用数据库,是否强制恢复?" & Chr(13) & rstr, vbYesNo, "提示信息") = vbYes Then
Me.MousePointer = 13
rst.MoveFirst
Do While Not rst.EOF
If rst.Fields("dbname") = ConnectDB.pubDataBase Then
myConn.Execute "kill " & rst("spid")
End If
rst.MoveNext
Loop
Else
sysRestore = False
Exit Function
End If
End If
objSQLNSObj.Commands(11).Execute
If rst.State <> 0 Then rst.Close
Set rst = Nothing
Cleanup:
Set objSQLNSObj = Nothing
Exit Function
ErrHandler:
sysRestore = False
GoTo Cleanup
End Function
Private Sub sysBackup()
On Error GoTo ErrHandler
hArray(1) = objSQLNS.GetFirstChildItem(hArray(0), SQLNSOBJECTTYPE_DATABASES)
hArray(2) = objSQLNS.GetFirstChildItem(hArray(1), SQLNSOBJECTTYPE_DATABASE, ConnectDB.pubDataBase)
Dim objSQLNSObj As SQLNamespaceObject
Set objSQLNSObj = objSQLNS.GetSQLNamespaceObject(hArray(2))
objSQLNSObj.Commands(10).Execute
Cleanup:
Set objSQLNSObj = Nothing
Exit Sub
ErrHandler:
GoTo Cleanup
End Sub
'恢复数据库
Private Function sysRestore() As Boolean
On Error GoTo ErrHandler
sysRestore = True
hArray(1) = objSQLNS.GetFirstChildItem(hArray(0), SQLNSOBJECTTYPE_DATABASES)
hArray(2) = objSQLNS.GetFirstChildItem(hArray(1), SQLNSOBJECTTYPE_DATABASE, ConnectDB.pubDataBase)
Dim objSQLNSObj As SQLNamespaceObject
Set objSQLNSObj = objSQLNS.GetSQLNamespaceObject(hArray(2))
myConn.Execute "use master"
Dim rst As New ADODB.Recordset, rstr As String
Set rst = myConn.Execute("sp_who")
Do While Not rst.EOF
If rst.Fields("dbname") = ConnectDB.pubDataBase Then
rstr = rstr & "登录名:" & rst("loginame") & " , " & "机器名:" & rst.Fields("hostname") & Chr(13)
End If
rst.MoveNext
Loop
If rstr <> "" Then
If MsgDBox("有如下人员正在使用数据库,是否强制恢复?" & Chr(13) & rstr, vbYesNo, "提示信息") = vbYes Then
Me.MousePointer = 13
rst.MoveFirst
Do While Not rst.EOF
If rst.Fields("dbname") = ConnectDB.pubDataBase Then
myConn.Execute "kill " & rst("spid")
End If
rst.MoveNext
Loop
Else
sysRestore = False
Exit Function
End If
End If
objSQLNSObj.Commands(11).Execute
If rst.State <> 0 Then rst.Close
Set rst = Nothing
Cleanup:
Set objSQLNSObj = Nothing
Exit Function
ErrHandler:
sysRestore = False
GoTo Cleanup
End Function
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货