0

我安装了 VS2019 并开始训练,我正在尝试使用 [DataDirectory] ​​连接到我的数据库 DB 文件位于我的 Debug 文件夹中 我正在使用以下 Conn 字符串cstr = @"server=(localdb)\MSSQLLocalDB;AttachDbFilename=[DataDirectory]\test.mdf;Integrated Security = True;"; ,但出现此错误

尝试为文件 [DataDirectory]\test.mdf 附加自动命名的数据库失败。存在同名数据库,或无法打开指定文件,或位于 UNC 共享上

但如果我用另一个固定位置(如 D:\Test.mdf)更改 [datadirectory] ​​它将起作用

我的代码:

string cstr;
SqlConnection cnn;
cstr = @"server=(localdb)\MSSQLLocalDB;AttachDbFilename=[DataDirectory]\Test.mdf;Integrated Security = True;";
cnn = new SqlConnection(cstr);
cnn.Open();
MessageBox.Show("Connection Open  !");
cnn.Close();

请帮忙。

4

2 回答 2

1

终于找到了我的解决方案,我使用System.Data.SqlClient的是不支持|DataDirectory| 在:AttachDbFilename=。新的SqlClient Provider包:Microsoft.Data.SqlClient从现在开始应该使用它,它支持AppDomains|DataDirectory|AttachDbFilename=

对于使用System.Data.SqlClient连接字符串中的数据库位置应该使用检索:AppDomain.CurrentDomain.BaseDirectory 所以连接字符串System.Data.SqlClient应该是这样的:

cstr = @"server=(localdb)\MSSQLLocalDB;AttachDbFilename="+ AppDomain.CurrentDomain.BaseDirectory+"Database.mdf ; Integrated Security = True";

这应该可以解决问题

于 2020-09-01T22:48:56.917 回答
0

从当前 AppDomain 中读取替换字符串。

ADO.NET |数据目录| 这是在哪里记录的?

但在 .Net Core 中,AppDomain 是一项已停产的技术

MS .Net 博客 | 移植到 .NET Core

应用程序域

为什么停产了?AppDomain 需要运行时支持并且通常非常昂贵。虽然仍由 CoreCLR 实现,但它在 .NET Native 中不可用,我们不打算在其中添加此功能。

我测试了它,字符串替换不适用于 .Net Core 3.1

因此,您必须自己实现该替换或从外部配置文件中读取数据。

于 2020-08-24T10:49:08.057 回答