我的数据库文件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中删除并重新启动...
希望有人可以提供帮助 - 我想这只是一件简单的事情......
答案 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.
然后,您可以将此数据库文件复制到任何文件夹。