SQLEXPRESS的MSDN documentation说:
当应用程序首次从正在运行的SQL Server Express实例建立连接时,SQL Server Express将自动附加.mdf文件。当用户关闭应用程序时,SQL Server Express会从实例中分离.mdf文件。
这似乎没有发生。如果我用相同名称的新文件替换MDF文件(当然,在删除日志文件之后)SQL Server Express将拒绝附加它。
我已经尝试了几乎所有连接字符串参数的组合,这让我发疯了。有什么建议吗?
答案 0 :(得分:4)
分离/关闭确实发生了。如果它不会发生,那么你不可能替换MDF文件,因为它将被使用。您引用的文档并不完全准确。正确的文档位于SQL Server 2005 Express Edition User Instances:
- 用户实例数据库具有自动 关闭选项设置,以便如果有 8-10没有与数据库的连接 分钟,数据库关闭和 该文件已关闭。有时候是这样的 自动,但它可以采取 而特别是如果连接 池已启用 连接。
- 分离数据库 从实例通过调用
sp_detach_db
将关闭该文件。这个 是Visual Studio使用的方法 确保数据库文件是 IDE切换时关闭 用户实例。
如果我冒昧地猜测我会说数据库没有分离但是自动关闭,并且在删除LDF后重新执行MDF将(正确地)在尝试打开数据库时被视为错误。< / p>
附注:
答案 1 :(得分:0)
private static void DetachMdf(string dbServer, string dbName)
{
SqlConnection.ClearAllPools();
using (SqlConnection conn = new SqlConnection(string.Format("Server={0};Database=master;Integrated Security=SSPI", dbServer)))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("sp_detach_db", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@dbname", dbName);
cmd.ExecuteNonQuery();
}
}
}