在 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";
这应该可以解决问题
我安装了 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";
这应该可以解决问题