以编程方式分离数据库

我有一个数据库“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(); 

但是得到一个错误:

‘\’附近的语法不正确。

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

更改:

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

成为:

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

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

无法分离数据库’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 ,并保留字符串的其余部分……

感谢这个网站: 分离数据库丢弃连接

这个网站: SQL Server – 如何分离数据库

顺便说一句,这对我在SQL SERVER 2014上起作用了

使用SMO怎么样?

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

 using Microsoft.SqlServer.Management.Smo; void Detach() { Server smoServer = new Server("MSSQLSERVER2008"); smoServer.DetachDatabase("HARMDATABASE", False); }