gpt4 book ai didi

c# - SQL Server LocalDB 根本无法创建数据库

转载 作者:行者123 更新时间:2023-11-30 20:39:37 27 4
gpt4 key购买 nike

这是我的完整示例:

var builder = new SqlConnectionStringBuilder();
builder.DataSource = "(localdb)\\v11.0";
builder.IntegratedSecurity = true;
builder.AttachDBFilename = "test.mdf";
builder.InitialCatalog = "test";
builder.ConnectTimeout = 60;

var connStr = builder.ToString();

using (var conn = new SqlConnection(connStr))
{
conn.Open();
}

异常:

System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file 'test.mdf' as database 'test'.
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
ClientConnectionId:6ea99bb4-5703-4354-84f3-cfc5bcd8c045
Error Number:1832,State:1,Class:14

如果我注释掉 AttachDBFilename 部分,我会得到:

Cannot open database "test" requested by the login. The login failed.

如果我注释掉 InitialCatalog 部分,我会得到:

An attempt to attach an auto-named database for file test.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.

我以普通用户身份运行,如果我使用 Path.GetTempPath() 指定数据路径,我会得到完全相同的错误,即我有权访问数据位置。

不存在test.mdf 文件,也没有test 数据库。我可以随心所欲地更改文件名和数据库名,并获得完全相同的消息。

如果我使用 sqllocaldb 工具停止删除 v11.0 实例,第一次然后我运行上面的代码,我得到:

Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=3274; handshake=1;

(这几乎是立即发生的,即它不会用完我在连接字符串中设置的 60 秒连接超时)

如果我重新启动计算机然后运行代码,我会看到同样的结果。

在那之后,我得到了上面的错误,每次都一样。

我不确定还能尝试什么!

最佳答案

好的,这是交易:

LocalDB 实际上不会自动创建数据库。只是大多数示例都是 Entity Framework 的,在很多配置中会创建丢失的数据库。

EF 实际上非常聪明,它将检测连接字符串中的 AttachDBFilename 值以构建自定义 CREATE DATABASE 命令,以及正确的数据/日志文件路径与指定值一致。它将尝试使用指定的连接字符串,如果失败,它将调整连接字符串以连接到 master DB 并发出一个 CREATE DATABASE。最后,我也是这么做的。

顺便说一句,我实际上在我的主要示例中使用了 EF。我问题中的代码是一个很好的测试用例,但我被困了很长时间,得到与我在此处概述的完全相同的异常,即使在“如果缺失时自动创建”配置模式下使用 EF 也是如此。这是因为我打开了异常中断,同时关闭了“仅我的代码”,即我看到了 EF 内部异常。

关于c# - SQL Server LocalDB 根本无法创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34220999/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com