我开发了一个使用SQL Server 2005 SP3 Express的.NET桌面应用程序。
在Windows 7 64位计算机上安装SQL Server Express运行时和应用程序后,启动应用程序后出现以下错误:
System.Data.SqlClient.SqlException:无法生成用户实例 SQL Server由于启动用户进程失败而导致的 实例。连接将被关闭。
我在<application>.exe.config
文件中使用的连接字符串是:
<add name="cs" connectionString="Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\AppData\MWAIWFMLE1.mdf;
Integrated Security=True;
User Instance=True"
providerName="System.Data.SqlClient" />
MWAIWFMLE1.mdf
文件位于程序文件下的应用程序安装目录中名为AppData
的文件夹中 - 因此AppData
路径中的AttachDbFileName
。
我在这里错过了什么吗?
答案 0 :(得分:2)
阅读此very good overview of what user instances really are。
简而言之:
SQL Server允许您在一台计算机上拥有多个实例 - 只需使用主机的计算机名称(或IP地址)即可访问默认实例 - 全部其他实例需要由实例名称指定(例如您计算机上的SQLExpress
)
出于开发目的,您还可以创建用户实例 - 每个用户都有自己独立的SQL Server实例(仅适用于 Express Edition )并且数据库通过其文件名(path\Sales_DB.mdf
)附加到该用户实例。此实例按需启动,然后运行并在不再需要时关闭
虽然这对于开发非常有用,但它并不适合以后使用 - 当然不适合生产使用。
在生产环境中,您希望将数据库文件附加到应运行的实际SQL Server实例上 - 通常使用SQL Server Management Studio。执行此操作时,您不再通过文件名引用该数据库,而是使用在连接到服务器时为数据库提供的数据库名称 。在这种情况下,SQL Server将处理所有操作细节 - 并且SQL Server实例始终启动并运行(不需要一直“按需”启动),并且您可以使用诸如权限和登录以控制对数据库的访问。
您的连接字符串将如下所示:
<connectionStrings>
<add name="Sales_DBEntities"
connectionString="server=.\SQLEXPRESS;Database=YourDatabaseNameHere;Integrated Security=SSPI;" />
</connectionStrings>
将数据库附加到生产(或测试)SQL Server实例时,您不需要知道构成数据库的文件是什么,也不需要指定这些文件 - SQL Server将照顾好这一点。您只需通过数据库名称来引用数据库。