当前位置:编程学习 > C#/ASP.NET >>

请教啊“因为数据库正在使用,所以无法获得对数据库的独占访问权”

今天弄了个sqlserver数据库的还原 可是就出现这个话了“因为数据库正在使用,所以无法获得对数据库的独占访问权。 RESTORE DATABASE 正在异常终止。 已将数据库上下文更改为 'master'。”
请教一下怎么搞的?我估计是因为sqlserver服务没有关闭 请大家帮忙给出解决方法 谢谢了哈 --------------------编程问答-------------------- 你自己都说出来了,
还问什么呢?

关闭数据库服务,
然后通过管理工具还原. --------------------编程问答-------------------- 在Actvity Monitor中查看用数据库的进程,把这个进程杀掉。 --------------------编程问答-------------------- 你试试这个
protected void Button1_Click(object sender, EventArgs e)
    {
        string path = this.FileUpload1.PostedFile.FileName; //获得备份路径及数据库名称
        string dbname = this.Label1.Text;
        string SqlStr1 = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString1"].ToString();        
        string SqlStr2 = "use master restore database " + dbname + " from disk='" + path + "'";
        SqlConnection con = new SqlConnection(SqlStr1);
        con.Open();


        string strsql_kill = "SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='" + dbname + "'";
        DataSet ds = new DataSet();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = strsql_kill;
        cmd.ExecuteNonQuery();
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        sda.Fill(ds);

        ArrayList list = new ArrayList();
        for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
        {
            list.Add(ds.Tables[0].Rows[j][0].ToString());
        }

        for (int i = 0; i < list.Count; i++)
        {
            cmd = new SqlCommand("KILL " + list[i].ToString(), con);
            cmd.ExecuteNonQuery();
        }


        try
        {
            SqlCommand com = new SqlCommand(SqlStr2, con);
            com.ExecuteNonQuery();
            Response.Write("<script language=javascript>alert('还原数据成功!');location='ReplaceDataBase.aspx'</script>");
        }
        catch (Exception error)
        {
            Response.Write(error.Message);
            Response.Write("<script language=javascript>alert('还原数据失败!')</script>");
        }
        finally
        {
            con.Close();
        }
    } --------------------编程问答-------------------- -- 回滚不合法事务
ALTER DATABASE [DataBaseName]SET OFFLINE WITH ROLLBACK IMMEDIATE

执行完再还原就行了。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,