使用C#

时间:2017-04-12 12:58:00

标签: c# .net localdb

我开发了一个使用SQL数据库的应用程序。我的挑战是能够使用应用程序本身运送数据库。当我使用安装程序打包我的mdf文件时,它将被部署。但是它无法连接到它。 我已经将以下作为先决条件 enter image description here

安装时,它会下载并安装所有先决条件。 我也使用以下连接字符串连接到它。

<connectionStrings><add name="MyDBContext" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;    Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\MyDB.mdf; MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /></connectionStrings>

安装在我的机器上时此设置正常。知道这对简单的机器有什么用吗?

1 个答案:

答案 0 :(得分:1)

最后我改变了很多东西后才开始工作。首先,连接字符串本身。这是

<connectionStrings><add name="MyDBContext" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;    Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\MyDB.mdf; MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /></connectionStrings>

但由于在安装过程中只在目标计算机上安装了SQL Express 2012(请参阅上面的图片),因此无法正常工作。所以改了它,以便它使用SQLServer Express的默认实例名称

<connectionStrings><add name="MyDBContext" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;    Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|MyFolder\MyDB.mdf; User Instance=True; Integrated Security=SSPI; MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /></connectionStrings>

请注意我在| DataDirectory |之后添加了一个文件夹。想法是在 AppData 中创建一个文件夹,这样它最终会在 C:\ users \ me \ AppData \ MyFolder \ MyDB.mdf

中创建一个文件夹

我还将User Instance设置为true,否则它无法从AppData文件夹中运行。

接下来,我添加了代码以将DataDirectory更新到我想要的位置,该位置位于AppData文件夹中

AppDomain.CurrentDomain.SetData("DataDirectory",Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));

我在程序文件的主要部分中进行了此更改