我用这段代码创建了一个数据库:
public static void CreateDatabase(string databasePath)
{
AppDomain.CurrentDomain.SetData("DataDirectory", databasePath);
using (var connection = new System.Data.SqlClient.SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=master; Integrated Security=true;;"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText =
String.Format("CREATE DATABASE {0} ON PRIMARY (NAME={0}, FILENAME='{1}')", "CoolDatabase", databasePath + @"\database.mdf");
command.ExecuteNonQuery();
command.CommandText =
String.Format("EXEC sp_detach_db '{0}', 'true'", "CotanDB");
command.ExecuteNonQuery();
}
connection.Close();
}
}
为我的单元测试创建了一个很好的工作.mdf
文件。但是,在对它运行所有测试之后,我想再次将其删除,以免占用空间。
我试过了:
public static void DestroyDatabase(string databasePath)
{
if (File.Exists(databasePath + @"\database.mdf"))
{
File.Delete(databasePath + @"\database.mdf");
}
if (File.Exists(databasePath + @"\database_log.ldf"))
{
File.Delete(databasePath + @"\database_log.ldf");
}
}
但是会引发错误
进程无法访问文件'数据库路径\ database.mdf' 因为它正被另一个进程使用。
所以我尝试关闭所有与数据库的连接,以便删除它并删除该文件。但是,这不起作用:
var server = new Server();
server.KillDatabase(databasePath + @"\database.mdf");
哪个投掷
无法连接到服务器..
如何销毁本地数据库文件?
编辑:我在评论的答案中尝试了代码:
using (var connection = new System.Data.SqlClient.SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=master; Integrated Security=true;;"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText =
String.Format("USE master");
command.ExecuteNonQuery();
command.CommandText =
String.Format("ALTER DATABASE {0} SET SINGLE_USER WITH ROLLBACK IMMEDIATE", "CotanDB");
command.ExecuteNonQuery();
command.CommandText =
String.Format("DROP DATABASE {0}", "CoolDatabase");
command.ExecuteNonQuery();
}
connection.Close();
}
后面跟着相同的File.Delete代码。但这引发了:
用户无权更改数据库“CoolDatabase”, 数据库不存在,或者数据库未处于允许的状态 访问检查。
答案 0 :(得分:0)
自己想出来。如果调用SqlConnection.ClearPool(连接),则会删除与mdf文件的所有连接,之后您可以轻松删除它。