随笔 - 172  文章 - 1  评论 - 1569  阅读 - 166万

[备忘]SQL语句终止正在使用中的数据库

    网上找了一些资料,发现都有各自缺点和不兼容性,综合了一下,在SQL2005和2008下测试通过:

复制代码
/// <summary>
/// 终止正在被占用的数据库进程
/// </summary>
/// <param name="connectionStr">连接字符串</param>
/// <param name="dataBaseName">数据库名称</param>
private static void KillProcessInUse(string connectionStr, string dataBaseName)
{
    SqlConnection conn;
    conn 
= new SqlConnection(connectionStr);
    conn.Open();
    
string sql1 = "select spid from master..sysprocesses where dbid=db_id('" + dataBaseName + "')";
    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;

    cmd.CommandText 
= "use master";//关闭用户进程语句
    cmd.ExecuteNonQuery();

    
//强制结束掉所有链接AnalysisSystem数据库的进程
    for (int irow = 0; irow < spidTable.Rows.Count; irow++)//这里Count-1也可以
    {
        
try
        {
            
int spid = Convert.ToInt32(spidTable.Rows[irow][0]);
            
if (spid < 50)
            {
                
continue;
            }
            cmd.CommandText 
= "kill " + spid;//关闭用户进程语句
            cmd.ExecuteNonQuery();
        }
        
catch
        {
            
//TODO:Log
        }
    }
    conn.Close();
    conn.Dispose();
复制代码

} 

 

posted on   SZW  阅读(1045)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
< 2011年2月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 1 2 3 4 5
6 7 8 9 10 11 12

点击右上角即可分享
微信分享提示