SQL Server Express 2008不分离自动附加文件?

为SQLEXPRESS的MSDN documentation说:SQL Server Express 2008不分离自动附加文件?

当应用程序首次建立了从SQL Server Express中的一个运行实例的连接时,SQL Server Express将自动附加一个.mdf文件。当用户关闭应用程序时,SQL Server Express将从实例中分离.mdf文件。

这看起来没有发生。如果我用新名称替换MDF文件(当然在删除日志文件后),SQL Server Express将拒绝附加它。

我已经试过几乎所有的连接字符串参数可能的组合,并且它让我发疯。有什么建议么?

回答:

分离/关闭确实发生。如果它不会发生,那么你不可能替换MDF文件,因为它会被使用。您引用的文档不完全准确。正确的文件是在SQL Server 2005 Express Edition User Instances:

  • 具有自动 关闭选项设置所以用户实例的数据库,如果有 为8-10 分钟数据库的连接,该数据库将关闭并 该文件已关闭。这会自动发生 ,但它可能需要 ,而特别是如果连接 池已为您的 连接启用。
  • 通过调用 sp_detach_db从实例中分离数据库 将关闭该文件。这个 是Visual Studio使用的方法到 确保数据库文件是 当IDE在 用户实例之间切换时关闭。

如果我斗胆尝试时,视为错误猜我会说,数据库没有拆下来,但自动关闭,并删除LDF后replcing的MDF会(理所当然)打开数据库。

由于旁注:

  • 一个永远也不会删除LDF文件。如果您想要恢复数据库,请将替换为 MDF和LDF与新的。
  • 确保您替换为正确的MDF和LDF版本。 SQL Server可以升级数据库,但不能降级它。
  • 获取错误。如果SQL Express拒绝附加数据库,它会给出一个理由。查看RANU创建的ERRORLOG(在用户配置文件中),systen事件日志或附加分析器到用户实例。

回答:

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();

}

}

}

以上是 SQL Server Express 2008不分离自动附加文件? 的全部内容, 来源链接: utcz.com/qa/265224.html

回到顶部