C# 最终用户计算机上的SQL Server LocalDB部署

C# 最终用户计算机上的SQL Server LocalDB部署,c#,sql-server,wpf,C#,Sql Server,Wpf,我有VSTO Excel工具,我使用SQL LocalDB作为数据源。通过实体框架6.1.3与数据库连接。我还有一个WPF表单和一个DataGrid来显示数据 一切都在开发计算机上完美地工作,但是当我尝试使用InstallShield LE部署工具时,在成功安装之后,WPF数据库表单将为空,没有任何错误消息。经过几次尝试,我终于在一台测试计算机上运行了数据库。但是,当我尝试在另一个上安装它时,同样是空表单,并且没有与数据库的连接 由于安装有时成功,有时不成功,我认为代码或安装程序没有问题。一定是

我有VSTO Excel工具,我使用SQL LocalDB作为数据源。通过实体框架6.1.3与数据库连接。我还有一个WPF表单和一个DataGrid来显示数据

一切都在开发计算机上完美地工作,但是当我尝试使用InstallShield LE部署工具时,在成功安装之后,WPF数据库表单将为空,没有任何错误消息。经过几次尝试,我终于在一台测试计算机上运行了数据库。但是,当我尝试在另一个上安装它时,同样是空表单,并且没有与数据库的连接

由于安装有时成功,有时不成功,我认为代码或安装程序没有问题。一定是别的原因

LocalDB仅在有对数据库的调用时作为一个进程启动,之后不久它就会自动关闭。我对数据库比较陌生,但可能启动LocalDB服务,然后第一次尝试建立连接需要很多时间,这可能是连接失败的原因

问题是:超时是否可能是连接失败的原因?如果是,如何增加此超时?为了避免LocalDB安装出现问题,我还应该做些什么


我花了很多时间开发这个工具,现在我无法发布它。任何帮助都将不胜感激。谢谢大家!

我的应用程序也使用LocalDB,我遇到了类似的问题。我假设您的InstallShield包能够可靠地安装LocalDB引擎;如果没有,则添加相应的MSM包作为其要求之一

是的,当有人试图连接到LocalDB时,它会自动启动。您可以先显式地启动它,然后再建立SQL连接,但我发现这并不是必需的

您遇到的超时是连接超时,可以通过为
SqlConnectionStringBuilder.ConnectTimeout
属性设置足够大的值来缓解。在我的案例中,一些客户的旧笔记本电脑的硬盘速度非常慢,因此启动一个实例需要一段时间。然而,120秒似乎对几乎所有人来说都足够了

当然,您始终可以选择另一条路径,即生成一个进程,如

sqllocaldb.exe s "InstanceName"

然后等待它的完成。甚至最终可能会更可靠。

我的应用程序也使用LocalDB时遇到类似问题。我假设您的InstallShield包能够可靠地安装LocalDB引擎;如果没有,则添加相应的MSM包作为其要求之一

是的,当有人试图连接到LocalDB时,它会自动启动。您可以先显式地启动它,然后再建立SQL连接,但我发现这并不是必需的

您遇到的超时是连接超时,可以通过为
SqlConnectionStringBuilder.ConnectTimeout
属性设置足够大的值来缓解。在我的案例中,一些客户的旧笔记本电脑的硬盘速度非常慢,因此启动一个实例需要一段时间。然而,120秒似乎对几乎所有人来说都足够了

当然,您始终可以选择另一条路径,即生成一个进程,如

sqllocaldb.exe s "InstanceName"

然后等待它的完成。甚至最终可能更可靠。

下面是我的App.config,我将连接超时增加到3000,以确保这不是问题

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="MDBEntities1" connectionString="metadata=res://*/MDBModel.csdl|res://*/MDBModel.ssdl|res://*/MDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\MapDatabase.mdf;integrated security=True;connect timeout=3000;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
</configuration>
对我来说,奇怪的是,一旦与某个特定文件夹建立了连接,我就不会对该文件夹有任何问题,即使我卸载了应用程序,删除了该文件夹,然后再次安装

但是如果我更改文件夹,数据库将变空。我需要手动将MDF文件连接到LocalDB,然后删除它,然后安装应用程序。在这种情况下,新的安装文件夹将像第一个一样正常工作。但我不能在每个用户的计算机上都这样做。我不知道如何在安装过程中强制LocalDB添加我的数据库


如果我的术语不正确,很抱歉,但我对数据库没有太多经验。我以前使用的版本是SQL Server Compact,我从未遇到过这些问题

下面是我的App.config,我将连接超时时间增加到3000,以确保这不是问题

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="MDBEntities1" connectionString="metadata=res://*/MDBModel.csdl|res://*/MDBModel.ssdl|res://*/MDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\MapDatabase.mdf;integrated security=True;connect timeout=3000;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
</configuration>
对我来说,奇怪的是,一旦与某个特定文件夹建立了连接,我就不会对该文件夹有任何问题,即使我卸载了应用程序,删除了该文件夹,然后再次安装

但是如果我更改文件夹,数据库将变空。我需要手动将MDF文件连接到LocalDB,然后删除它,然后安装应用程序。在这种情况下,新的安装文件夹将像第一个一样正常工作。但我不能在每个用户的计算机上都这样做。我不知道如何在安装过程中强制LocalDB添加我的数据库


如果我的术语不正确,很抱歉,但我对数据库没有太多经验。我以前使用的版本是SQL Server Compact,我从未遇到过这些问题

谢谢你的回答,但看起来我的情况不同。我增加了ConnectTimeout和CommandTimeout,但运气不好。仅当我将数据库安装到特定文件夹中时,才会显示该数据库。不知何故,我已经设法使这个文件夹“成功”较早。如果我在同一台计算机上更改安装文件夹,或者在任何其他计算机上使用此“成功”文件夹,则此选项无效。也许我错过了什么?为了建立与LocalDB的连接,我应该在安装之后做一些特定的事情吗?然后显示您的连接字符串。确实,有一些选项是LocalDB特有的。谢谢你的回答,但我的情况似乎有所不同。我增加了ConnectTimeout和CommandTimeout,但运气不好。仅当我将数据库安装到特定文件夹中时,才会显示该数据库。某物