代码之家  ›  专栏  ›  技术社区  ›  Wil

SQL Express和IIS-如果手动分离数据库,则不会附加它?

  •  1
  • Wil  · 技术社区  · 15 年前

    由于答案并没有真正涵盖这个问题,我在asp.net上发布了这篇文章,并对其进行了完全的重新措辞。我将在此处发布编辑后的问题:


    我一直在使用attachdb连接字符串,通常会部署到iis。该网站的工作很好,但是,我对数据库做了一些更改,最新版本不会复制,因为它说的文件在使用中。

    我打开了sql management studio,看到它已经安装好了,所以我做了一个dettach。

    然后我可以毫无问题地复制新版本,但是,当我下次运行该站点时,我得到:

    无法打开物理文件“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个半小时后自动分离,但我等了5个小时,这时一个数据库不在使用中,而sql管理器显示它仍然处于连接状态。

    当我手动重新连接数据库时,一切正常。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Remus Rusanu    15 年前

    当您要求使用attachdbfilename连接字符串动态地将数据库附加到sql express实例时,应用程序将完全不连接到sql expres实例,而是连接到 小孩 实例,这是为请求附加操作的用户专门创建的新实例。见 SQL Server 2005 Express Edition User Instances . 此子实例将附加数据库,并将继续运行两个一小时,之后将自动关闭。

    当您尝试从“企业管理器”连接时,您将无法连接到子实例(显式连接到一个实例确实很复杂,因此您不能意外地连接),您正在连接到 起源 实例和处理数据库。

    总之,要么坚持使用ranu模型并使用attachdbfilename,要么使用普通的数据库操作模式并从ssms管理数据库。别把两者混在一起。

        2
  •  0
  •   Zhaph - Ben Duguid    15 年前

    您确定您的站点所指向的sql express实例上没有附加同名的数据库吗?

    另外,当站点试图附加数据库时,它运行的标识是否在sql express中具有管理权限?如果没有,这个命令将无法工作(我不确定在这种情况下它会给出什么错误,但“拒绝访问”听起来是合理的)。

    页面“ SQL Server 2005 Express Edition User Instances “似乎很好地概述了问题和解决办法。


    编辑添加

    这可能是问题所在:

    如果日志文件与数据文件位于同一目录中,并且附加主数据文件时使用了“database”关键字,则将生成错误。在这种情况下,请删除日志文件。附加数据库后,将根据物理路径自动生成新的日志文件。

    摘自 SqlConnectionStringBuilder.AttachDBFileName Property

    在通过此方法重新附加数据库之前,需要删除日志文件。