在 Windows Forms C# .NET Core 中使用 [DataDirectory] ​​时无法连接到 localdb

Can't connect to localdb when using [DataDirectory] in Windows Forms C# .NET Core

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

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

但如果我将 [datadirectory] ​​更改为另一个固定位置,如 D:\Test.mdf

,它将起作用

我的代码:

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

请帮忙。

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

ADO.NET |DataDirectory| where is this documented?

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

MS .Net blog | Porting to .NET Core

App Domains

Why was it discontinued? AppDomains require runtime support and are generally quite expensive. While still implemented by CoreCLR, it’s not available in .NET Native and we don’t plan on adding this capability there.

我对其进行了测试,字符串替换不适用于 .Net Core 3.1

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

终于找到了我的解决方案,我使用的 System.Data.SqlClient 不支持 |DataDirectory| in: 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";

这应该可以解决问题