由于答案并没有真正涵盖这个问题,我在ASP.Net上发布了这个并完整地重述了它。我将在此处发布已编辑的问题:
我一直在使用attachDB连接字符串,我通常部署到IIS。该网站工作正常,但是,我对数据库进行了一些更改,并且最新版本不会像正在使用的文件一样进行复制。
我打开了SQL管理工作室并看到它已经安装,所以我做了一个方向。
然后我可以毫无问题地复制新版本,但是,当我下次运行该网站时,我得到:
无法打开物理文件“C:\ inetpub \ wwwroot \ vs \ App_Data \ aspnetdb.mdf”。操作系统错误5:“5(无法检索此错误的文本。原因:15105)”。 尝试为文件C:\ inetpub \ wwwroot \ vs \ App_Data \ aspnetdb.mdf附加自动命名的数据库失败。存在具有相同名称的数据库,或者无法打开指定的文件,或者它位于UNC共享上。
而且,如果我尝试访问.Net用户或IIS管理器中的其他几个选项,我会收到以下错误:
.NET用户
执行此操作时出错。
详细说明:
已成功与服务器建立连接,但在登录过程中发生错误。 (提供者:共享内存提供者,错误:0 - 管道的另一端没有进程。)
好的
我尝试过回收应用程序池,重新启动SQL实例,甚至重新启动计算机。
没有什么有用的,我无法弄清楚出了什么问题......它在哪里记得以前的数据库连接的位置以及它为什么不自动重新连接数据库?...有人说它们在2 1/2之后自动分离几个小时,但我等了5个小时没有使用数据库,SQL管理器显示它仍然附加。
当我手动重新连接数据库时,一切正常。
答案 0 :(得分:1)
当您要求使用AttachDBFileName连接字符串将数据库即时附加到SQL Express实例时,应用程序根本不会连接到SQL Expres sinstance,而是连接到子级实例,这是为请求附加操作的用户特定创建的新实例。见SQL Server 2005 Express Edition User Instances。这个子实例将附加数据库并将继续运行两个小时,之后它将自行关闭。
当您尝试从“企业管理器”连接时,您将无法连接到子实例(显然很难连接到一个,因此您不能意外地执行此操作),您正在连接到父实例和搞乱数据库。
总而言之,要么坚持使用RANU模型并使用AttachDBFileName,要么使用普通的数据库操作模式并从SSMS管理数据库。不要混淆两者。
答案 1 :(得分:0)
您确定您的网站指向的SQL Express实例上是否还没有附加相同名称的数据库?
此外,在尝试附加数据库时,网站运行的标识是否具有SQL Express中的管理员权限?如果没有,这个命令将不起作用(我不确定它在那种情况下给出了什么错误,但“拒绝访问”听起来合理)。
页面“SQL Server 2005 Express Edition User Instances”似乎可以很好地概述问题和解决方法。
编辑以添加
这可能是问题所在:
如果日志文件与数据文件位于同一目录中,并且在附加主数据文件时使用'database'关键字,则会生成错误。在这种情况下,请删除日志文件。附加数据库后,将根据物理路径自动生成新的日志文件。
取自SqlConnectionStringBuilder.AttachDBFileName Property
的文件在通过此方法重新附加数据库之前,您需要删除日志文件。