天天看點

使用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();

這種資料庫已被占用的情況很多時候是出現在恢複或者其他一些重用的情況下,是以都必須先做這種處理後再進行以上操作。