【问题标题】:Can't connect to localdb when using [DataDirectory] in Windows Forms C# .NET Core在 Windows 窗体 C# .NET Core 中使用 [DataDirectory] ​​时无法连接到 localdb
【发布时间】:2020-09-02 21:00:42
【问题描述】:

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

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

但如果我将 [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();

请帮忙。

【问题讨论】:

  • 描述和代码有区别(D:\Test.mdf vs.\f.mdf)????
  • 我猜你用错了,它是|DataDirectory|而不是 [DataDirectory]。数据目录的替换字符串。
  • @BelahceneBenzaraTahar 我正在使用 |DataDirectory|就像我几年前在.NetFramework中所做的那样,但现在我开始收到这个错误:键'attachdbfilename'的值无效然后有人给了我一个解决方案并告诉我这样写[DataDirectory]它修复了错误但我有这个新错误

标签: c# sql .net-core sqlclient datadirectory


【解决方案1】:

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

中的 AppDomains 和 |DataDirectory| 宏

为了使用 System.Data.SqlClient,连接字符串中的 DB 位置应使用:AppDomain.CurrentDomain.BaseDirectory 检索 所以System.Data.SqlClient 的连接字符串应该是这样的:

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

这应该可以解决问题

【讨论】:

    【解决方案2】:

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

    ADO.NET |DataDirectory| where is this documented?

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

    MS .Net blog | Porting to .NET Core

    应用程序域

    为什么停产了? AppDomains 需要运行时支持并且是 一般相当昂贵。虽然仍由 CoreCLR 实现,但它是 在 .NET Native 中不可用,我们不打算添加它 有能力。

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 2021-12-13
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      相关资源
      最近更新 更多