我做了个SQL数据库恢复的一段代码
但没次执行恢复操作的时候都提示"[Microsoft][ODBC SQl Server Driver][SQL Server]因为数据库正在使用,所以未能获得对数据库的排它访问权"请问这样的问题该如何解决请过路的朋友指点一下 谢谢

解决方案 »

  1.   

    我搜到一个办法:
    回复人: faysky2() ( ) 信誉:99  2005-11-3 14:03:43  
    数据库的连接都放在master数据库中的sysprocesses 表里,要断开某个数据库的连接,把sysprocesses 表里的那个数据库的连接删除就行了:Private Sub Command1_Click()
        Dim cn As ADODB.Connection,rs As New ADODB.RecordSet
        cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=登录名;Password=密码;Initial Catalog=master;Data Source=Sql服务器别名"'借助master数据库来删除数据库的连接
        cn.CursorLocation=adUseClient
        cn.Open
        rs.Open "select spid from sysprocesses where dbid=db_id('你的数据库名)", cn
        Do While Not rs.EOF
          cn.Execute "kill  " & rs("spid")   '杀掉你的数据库的所有连接rs.MoveNext
        Loop
        rs.Close
        cn.Close
        Set rs=Nothing
        Set cn=Nothing
    End Sub或许从SQLDMO中处理更好,不过还没有找到办法
      

  2.   

    我的恢复这段代码如下:string StorePath;
    StorePath = System.Environment.CurrentDirectory;
    if (ltbBackup.Items.Count < 0 || ltbBackup.SelectedIndex < 0)
    {
    MessageBox.Show("没有恢复点或没有选择恢复点","提示:",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    else
    {
    SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
    SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
    try
    {
    oSQLServer.LoginSecure = false;
    oSQLServer.Connect("localhost", "sa", "sa");
    oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
    oRestore.Database = "rsgl";string ResFile=StorePath + "\\DataBackUp\\" + ltbBackup.SelectedItem;
    oRestore.Files = ResFile;
    oRestore.FileNumber = 1;
    oRestore.ReplaceDatabase = true;
    oRestore.SQLRestore(oSQLServer);
    MessageBox.Show("数据库恢复成功.","提示:",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    catch(System.Exception mass)
    {
    MessageBox.Show(mass.Message);
    }
    finally
    oSQLServer.DisConnect();
    }
    }不知道该怎样关闭当前所有数据库操作
    真是头痛啊 555555555555