桌面.NET应用程序中的SQL Server Express异常

时间:2012-06-05 22:19:28

标签: sql-server-express

我开发了一个使用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

我在这里错过了什么吗?

1 个答案:

答案 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将照顾好这一点。您只需通过数据库名称来引用数据库。