0

我开发了一个使用 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程序文件下的应用程序安装目录中的一个文件夹中 - 因此AppDataAttachDbFileName路径中。

我在这里错过了什么吗?

4

1 回答 1

2

阅读这篇关于用户实例真正含义的非常好的概述

简而言之:

  • SQL Server 允许您在单台计算机上拥有多个自身实例- 可以仅使用主机的机器名称(或 IP 地址)访问默认实例 - 所有其他实例都需要由实例名称指定(如SQLExpress在你的机器上)

  • 出于开发目的,您还可以创建一个用户实例- 每个用户都有自己单独的 SQL Server 实例(仅适用于Express 版),并且数据库通过其文件名 ( 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 会处理那。您只需通过数据库名称引用数据库。

于 2012-06-06T04:56:29.347 回答