SQL Server Express无法附加或删除mdf文件

时间:2012-02-07 20:25:35

标签: sql-server-express ssms

我的数据库文件Whist.mdf通过Management Studio附加到SQL Server Express,但它在我的asp.net解决方案中的NHibernate触发了一些连接异常的意义上停止了工作。我刚从Management Studio中分离出来,因为我无法在那里打开数据库。

但是当我尝试重新连接它时,我收到了这个错误:

  

为服务器'MyPCName \ SQLECPRESS'附加数据库失败。 (Microsoft.SqlServer.Smo)无法打开物理文件“C:\ Program   Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA \ Whist.mdf“。   操作系统错误32:“32(进程无法访问该文件,因为   它被另一个进程使用)“。(Microsoft SQL Server,错误:   5120)

我用谷歌搜索了它,但找不到适合我的解决方案。 E.g:

有一些关于用户实例的内容,但我无法弄清楚它是否与此有关:

我试图在Windows中删除mdf文件,但我也不能这样做:

  

由于文件在系统中打开

,因此无法完成操作

我已尝试停止SQL Server进程,关闭探索并从cmd中删除并重新启动...

希望有人可以提供帮助 - 我想这只是一件简单的事情......

3 个答案:

答案 0 :(得分:4)

我认为你走在正确的轨道上。您收到的错误消息表明某些SQL Server进程正在保持数据库文件打开。 SQL Server的目的是仅允许一次由单个SQL Server进程打开数据库文件。

您也可能怀疑SQL Server Express的用户实例是一个有罪的过程。用户实例是一种特殊的SQL Server进程,它不作为服务运行,而是由尝试连接到它的应用程序启动和拥有。在您的情况下,有两个用户实例可能是问题,一个由您提到的ASP.NET应用程序拥有,另一个由您拥有并由Visual Studio启动。如果您使用的是IIS Express,或者您为ASP.NET应用程序配置了IIS应用程序池以作为您的帐户运行,那么我们只需要担心一个用户实例。

我的建议是您不使用用户实例,也不要尝试直接连接到数据库文件。浏览您的连接字符串并从所有连接字符串中删除User Instance=true。您还想删除AttachDBFilename=...属性。

如果将数据库文件添加到任何Visual Studio解决方案中,请将其删除(请注意不要删除文件本身)。最后一步是从“服务器资源管理器”中的“数据连接”节点中删除与数据库文件的任何连接。

然后重新启动计算机以确保在后台运行的任何用户实例都已关闭。机器再次启动后,您应该能够使用SQL Server Management Studio将数据库文件附加回主SQL Server Express。我们将数据库命名为Whist

要连接到您的数据库,请使用以下连接字符串:

Data Source=.\SQLExpress;Integrated Security=true;Initial Catalog=Whist

从ASP.NET应用程序连接时,请确保已在SQL Server Express中为该应用程序创建了一个帐户。

答案 1 :(得分:1)

对我来说,Daemon工具的问题以及将.mdf文件关联为图像也是个问题。

答案 2 :(得分:1)

如果要从数据库中复制.mdf和.ldf文件,可以将数据库文件设置为“脱机”和“脱机”。第一请按照以下步骤操作:

Open your SQL Server 2008(suppose you are using SQL Server 2008 ).
Select your Database that you want to copy then left click.
Go to Tasks -> Take Offline.
Right click. 

然后,您可以将此数据库文件复制到任何文件夹。