首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 程式碼刪除資料庫:殺掉連線進程後執行 DROP DATABASE

     編輯:程式設計綜合問答

建立資料庫、建表失敗後欲刪除資料庫,提示「資料庫正在使用中」。需先斷開所有連線再刪除。

T-SQL 腳本(在 Master 資料庫執行)

USE MASTER;
GO
DECLARE @dbname SYSNAME = 'YourDbName';
DECLARE @sql NVARCHAR(MAX) = '';

-- 殺掉所有佔用該資料庫的連線
SELECT @sql = @sql + 'KILL ' + CAST(spid AS VARCHAR) + '; '
FROM sys.sysprocesses
WHERE dbid = DB_ID(@dbname);

EXEC sp_executesql @sql;

-- 刪除資料庫
EXEC ('DROP DATABASE [' + @dbname + ']');
GO

C# 呼叫方式

using (var conn = new SqlConnection("Server=.;Database=master;Integrated Security=true;"))
using (var cmd = conn.CreateCommand()) {
    conn.Open();
    cmd.CommandText = @"
        DECLARE @dbname SYSNAME = @name;
        DECLARE @sql NVARCHAR(MAX) = '';
        SELECT @sql = @sql + 'KILL ' + CAST(spid AS VARCHAR) + '; '
        FROM sys.sysprocesses WHERE dbid = DB_ID(@dbname);
        EXEC sp_executesql @sql;
        EXEC ('DROP DATABASE [' + @dbname + ']');
    ";
    cmd.Parameters.AddWithValue("@name", dbName);
    cmd.ExecuteNonQuery();
}

關鍵點

  • 必須連線 master 資料庫執行 DROP。
  • sys.sysprocesses (舊) 或 sys.dm_exec_sessions (新) 取得佔用進程 ID。
  • 參數化防注入,避免字串拼接。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved