以编程方式分离数据库

时间:2014-09-19 21:15:36

标签: c# sql-server tsql ado.net

我有一个数据库" D:\ MDF CONNECTION SAMPLE \ BIN \ DEBUG \ HARMDATABASE.MDF"。 我试图用这段代码分离或重命名它:

SqlConnection conn = new SqlConnection("Data Source=.\\MSSQLSERVER2008;database=Master;Integrated Security=True;");
SqlCommand cmd = new SqlCommand("", conn);
cmd.CommandText = @"sys.sp_detach_db D:\MDF CONNECTION SAMPLE\BIN\DEBUG\HARMDATABASE.MDF";
conn.Open(); 
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Dispose();

但是收到错误:

  

' \'

附近的语法不正确

3 个答案:

答案 0 :(得分:6)

你在查询中省略了一个引用,正如@KyleHale指出的那样 - 它需要是数据库的名称,而不是它的路径。

变化:

cmd.CommandText = @"sys.sp_detach_db D:\MDF CONNECTION SAMPLE\BIN\DEBUG\HARMDATABASE.MDF;";

是:

cmd.CommandText = @"sys.sp_detach_db 'dbName'";

答案 1 :(得分:5)

为了分离数据库并同时解决错误

  

无法分离数据库'YOUR_DATABASE',因为它当前正在使用

您只需使用以下代码:

    private void DetachDatabase()
    {
        String databaseConnectionString = "Data Source=localhost;MultipleActiveResultSets=True;Integrated Security=True";
        using (SqlConnection sqlDatabaseConnection = new SqlConnection(databaseConnectionString))
        {
            try
            {
                sqlDatabaseConnection.Open();
                string commandString = "ALTER DATABASE YOUR_DATABASE SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE YOUR_DATABASE SET SINGLE_USER EXEC sp_detach_db 'YOUR_DATABASE'";
                SqlCommand sqlDatabaseCommand = new SqlCommand(commandString, sqlDatabaseConnection);
                sqlDatabaseCommand.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

请注意, YOUR_DATABASE 有时会在没有单引号的情况下编写,有时也会使用单引号。只使用没有 .mdf 扩展名的数据库名称替换 YOUR_DATABASE ,并保留字符串的其余部分......

感谢此网站:Detach database dropping connections

这个网站:SQL Server – How to Detach a Database

顺便说一句,这在SQL SERVER 2014上对我有用

答案 2 :(得分:4)

如何使用SMO

您需要添加对Microsoft.SqlServer.Smo的引用,该引用在您的开发计算机上安装了SQL Express或SQL Server时可用。

using Microsoft.SqlServer.Management.Smo;

void Detach()
{
  Server smoServer = new Server("MSSQLSERVER2008");
  smoServer.DetachDatabase("HARMDATABASE", False);
}
相关问题