C#在分离数据库时如何断开连接

J.P*_*cay 5 c# sql-server

我目前有以下命令

SqlCommand command = new SqlCommand(@"sys.sp_detach_db 'DBname'", conn);
Run Code Online (Sandbox Code Playgroud)

分离数据库,但是在执行数据库时会引发异常。说数据库正在使用中。在断开连接时或断开连接之前,如何断开连接?

更新:我目前正在使用SMO,但仍无法正常工作:

bool DetachBackup(string backupDBName)
        {
            string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            var builder = new SqlConnectionStringBuilder(connectionString);
            string serverName = builder.DataSource; 
            string dbName = builder.InitialCatalog;
            try
            {
                Server smoServer = new Server(serverName);
                smoServer.DetachDatabase(backupDBName + DateTime.Now.ToString("yyyyMMdd"), false);
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return false;
            }
        }
Run Code Online (Sandbox Code Playgroud)

Rah*_*thi 2

您可以使用SMO

从 SQL Server 实例中分离指定的数据库,并可选择在分离数据库之前更新统计信息。

using Microsoft.SqlServer.Management.Smo;

 void DetachDatabase()
 {
      Server smoServer = new Server("MSSQLSERVER2008");
      smoServer.DetachDatabase("Yourdatabasename", False);
 }
Run Code Online (Sandbox Code Playgroud)

要从 app.config 获取服务器名称,您可以尝试如下操作:

string connectString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);  
string serverName = builder.DataSource;   //Server name
string dbName = builder.InitialCatalog; //Database name
Run Code Online (Sandbox Code Playgroud)