天天看点

使用SQL语句进行数据库恢复时数据库已被占用的解决方法

    有时候我们在操作数据库的时候会提示当前有一个或多个进程在使用数据库,访问被拒绝,这时我们就需要查看服务器中那些访问我们需要操作的数据库的进程,然后把它们全部都结束掉(除了本访问进程外),这些进程都是会被存在公共数据库master数据库的sysprocesses表中,所以我们必须先把他们给拿出来然后一个一个结束掉.

///其中db_name是你所要操作的数据库

            SqlConnection conn;

            conn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=db_name;");

            conn.Open();

            string sql1 = "select spid from master..sysprocesses where dbid=db_id('db_name')";

            SqlDataAdapter Da = new SqlDataAdapter(sql1, conn);

            DataTable spidTable = new DataTable();

            Da.Fill(spidTable);//把进程名称放到DataTable中

            SqlCommand cmd = new SqlCommand();

            cmd.CommandType = CommandType.Text;

            cmd.Connection = conn;

            if (spidTable.Rows.Count > 1)//只留下一个

            {

               //强制结束掉所有链接AnalysisSystem数据库的进程

                for (int irow = 0; irow < spidTable.Rows.Count - 1; irow++)

                {

                    cmd.CommandText = "kill" + spidTable.Rows[irow].ToString();//关闭用户进程语句

                    cmd.ExecuteNonQuery();

                }

            }

            conn.Close();

            conn.Dispose();

这种数据库已被占用的情况很多时候是出现在恢复或者其他一些重用的情况下,所以都必须先做这种处理后再进行以上操作。