无法将 SQL Server LocalDB 用于我的 WPF 应用程序

Posted

技术标签:

【中文标题】无法将 SQL Server LocalDB 用于我的 WPF 应用程序【英文标题】:Haven't been able to utilize SQL Server LocalDB for my WPF application 【发布时间】:2020-11-13 00:05:41 【问题描述】:

我有一个 WPF 应用程序,其实体框架连接到 SQL Server 2017。我将为我的客户提供一个试用/演示版本进行测试。由于我现在不想安装完整的 SQL Server 让他不知所措,所以我将 .mdf 数据库添加到根目录并尝试使用 SQL Server LocalDB 解决方案来连接。

所以我使用 Advanced Installer 部署软件并添加所有先决条件。当我将它安装在我正在编码的机器上时,该程序运行良好,但是一旦我尝试其他 PC,它就无处可去。一开始有一个登录窗口,在输入凭据后,该窗口要么消失,要么在某些情况下变得没有响应。

我尝试了一堆不同类型的连接字符串,但到目前为止都没有运气。这是主要的连接字符串:

<add name="IncomsDatabase" 
     connectionString="Server=(LocalDB)\MSSQLLocalDB; Integrated Security=true ;AttachDbFileName=|DataDirectory|\Incoms.mdf" 
     providerName="System.Data.SqlClient"/>

我什至将|DataDirectory| 更改为根文件夹的直接位置,但它也不起作用。

我还尝试了不同版本的 SQL Server LocalDB,例如 2017、2016 和 2014,但没有成功。

如果有人能提出解决方法,我们将不胜感激。

【问题讨论】:

你安装到什么路径? 软件还是 Sql LocalDB? 【参考方案1】:

最有可能出错的有两件事:

1) 实例名称。 Localdb 有一个实例名称,就像“完整”的 sql server 一样,也许它不是默认的。您可以使用

检查安装的实例
SqlLocalDB.exe i

这将安装在:

 C:\Program Files\Microsoft SQL Server\nnn\Tools\Binn

其中 nnn 是 sql server 版本号。应该是 120 左右吧。

您还可以获得有关哪些数据库与特定实例相关联的信息。 例如

SqlLocalDB.exe i "MSSQLLocalDB"

mdf 位置。

用户无法写入文件最终会出现在程序文件中。 当您在应用程序上工作时,代码可能不在程序文件中。 一个最终与您的 bin 中的 exe 一起出现的数据库可以正常工作。 当您安装应用程序时,可能是您的 mdf 位于程序文件下的某个位置,用户将无法连接到他们无法写入的数据库。

DataDirectory 应该在 appdata 中。

仔细检查设置的内容。

你应该有类似的东西:

AppDomain.CurrentDomain.SetData("DataDirectory", uri);

其中 uri 是使用 Environment.SpecialFolder 选项之一(例如 LocalApplicationData)使用 appdata 的路径构建的。 ApplicationData 一指漫游。

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));

您还需要一个文件夹用于您的应用程序,可能在另一个文件夹中,即您的公司名称。

可能客户端电脑没有漫游应用数据,或者每次登录都会重置。

我会检查您的安装是否在您运行时将 mdf 实际复制到了预期的文件夹中。

【讨论】:

感谢您的回复。事实证明,localDB 没有正确安装/启动。我删除了实例,再次添加并启动,它工作正常。

以上是关于无法将 SQL Server LocalDB 用于我的 WPF 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server LocalDB:将数据库分离并重新附加到同一台计算机(机器,相同路径)后,无法备份数据库

为 SQL Server LocalDB 创建永久别名

无法连接到 localDB SQL Server 2019

WiX 3.8安装IIS Express和SQL Server LocalDB 2012

将 SQL Server 身份验证与 localdb 一起使用

怎么卸载Microsoft SQL Server 2012LocalDB