2010-10-15 63 views
0

我有一个ASP.NET 3.5应用程序,在其App_Data文件夹中有一个SQL 2005 Express .mdf数据库文件。让我们称之为Foo.mdf。自己的ASP.NET应用程序可以连接到数据库没有问题。到现在为止还挺好。ASP.NET应用程序不会与Sql Server管理Studio Express共享数据库

然后,如果我在服务器上安装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只会让我的应用程序管理工作室连接。这似乎真的很糟糕 - 当然Sql Express应该允许多个连接?我期待它的行为像普通的Sql Server。

希望我做错了。请指教。

+0

这并不是说只有一个应用程序可以连接到数据库,而是只有一个服务器可以物理连接数据库。您应该将其附加到SQL Express并修改您的ASP。NET配置字符串连接到该服务器和数据库。 – 2010-10-15 15:15:24

回答

2

您可以检查您的应用程序连接字符串,看看它是否有用户实例=真

如:

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有关系

+0

我确实在我的连接字符串中有'User Instance = True'。我会改变它并尝试你的建议。此外,MSDN文章指出,我可以使用SSEUtil来针对用户实例运行SQL脚本,这也是我一直在寻找SSMSE的原因,因此也很方便。 – codeulike 2010-10-15 15:56:34

1

我没有任何使用默认ASP.NET数据库的经验,但您是否尝试过将MDF移动到您的SQL Express数据库夹? (默认: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> 
0

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

相关问题