【问题标题】:ASP.NET app wont share database with Sql Server Management Studio ExpressASP.NET 应用程序不会与 Sql Server Management Studio Express 共享数据库
【发布时间】:2010-10-15 14:33:16
【问题描述】:

我有一个 ASP.NET 3.5 应用程序,其 App_Data 文件夹中有一个 SQL 2005 Express .mdf 数据库文件。让我们称之为 Foo.mdf。 ASP.NET 应用程序本身可以毫无问题地连接到数据库。到目前为止一切顺利。

然后,如果我在服务器上安装Sql Server Management Studio Express 并启动它,它会找到本地 SQLEXPRESS 实例并连接到它,但不会在数据库列表中显示 Foo.mdf。

所以我尝试通过右键单击数据库并选择 Attach.. 并找到 .MDF 来附加 Foo.mdf。这失败了一个模糊的错误:

CREATE FILE encountered operating system error 32(error not found)  
while attempting to open or create the physical file
'C:\inetpub\wwwroot\FooApp\App_Data\Foo.mdf'. (Microsoft SQL Server, Error: 5123)

如果我在 IIS 中停止我的 ASP.NET 站点,则附加确实工作,但是当我重新启动我的 ASP.NET 应用程序时,它无法连接到 Foo.mdf。

所以看起来 SQL Express 2005 只会让我的应用程序 Management Studio 连接。这看起来真的很垃圾——Sql Express 应该允许多个连接吗?我期待它的行为像普通的 Sql Server。

希望我做错了。请指教。

【问题讨论】:

  • 不是只有一个应用程序可以连接到数据库,而是只有一台服务器可以物理连接数据库。您应该将它附加到 SQL Express 并修改您的 ASP.NET 配置字符串以连接到该服务器和数据库。

标签: asp.net sql-server-2005-express app-data


【解决方案1】:

您能否检查您的应用程序连接字符串,看看它是否有 User Instance=true

例如:

Data Source=.\SQLEXPRESS;Integrated Security=true; AttachDbFilename=|DataDirectory|\mydb.mdf;User Instance=true;

From MSDN :用户实例的另一个主要问题是因为 SQL Server 以独占访问权限打开数据库文件。这是必要的,因为 SQL Server 在其内存中管理数据库数据的锁定。因此,如果多个 SQL Server 实例打开同一个文件,则可能会损坏数据。如果两个不同的用户实例使用同一个数据库文件,一个实例必须先关闭该文件,另一个实例才能打开它。

如果是这个问题,那么您可以在 SQL Server Management Studio 中附加数据库并按如下方式修改连接字符串,以便多个客户端可以连接到同一个数据库。

Server=.\SQLEXPRESS;Database=myDataBase;Trusted_Connection=True;

如果这不是您遇到的问题,还请查看上面链接中的“常见问题”部分。根据“常见问题”部分中的第 1 / 2 点,它可能与权限有关

【讨论】:

  • 我的连接字符串中确实有User Instance=True。我会更改它并尝试您的建议。另外那篇 MSDN 文章指出我可以使用 SSEUtil 对用户实例运行 sql 脚本,这也是我一直在寻找 SSMSE 的最初原因,所以也很方便。
【解决方案2】:

我没有任何使用默认 ASP.NET 数据库的经验,但是您是否尝试过将 MDF 移动到您的 SQL Express DATA 文件夹中? (默认:C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA) 进入文件夹后,您可以使用 Management Studio 将文件附加到 SQL Express 实例。您需要将 web.config 文件中的连接字符串修改为如下所示:

<connectionStrings>
    <add name="ApplicationServices"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=aspnetdb"
     providerName="System.Data.SqlClient" />
</connectionStrings>

【讨论】:

    【解决方案3】:

    将以下用户帐户添加到您网站的文件夹 *App_Data*:SQLServerMSSQLUser$。在高级安全权限中查找它,因此您在那里进行搜索,然后对其进行完全控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      相关资源
      最近更新 更多