【问题标题】:ASP.NET Membership setup - Database problemsASP.NET 成员资格设置 - 数据库问题
【发布时间】:2010-02-14 19:20:00
【问题描述】:

我正在设置会员提供程序,因此,我收到以下错误消息:

An attempt to attach an auto-named database for file

C:\Users\Mcoroklo\Desktop\Programmering\Private Projekter\ASP.NET\Helpdesk\Version4\HelpDesk\ClientSite\App_Data\ASPNETDB.mdf 失败的。同名数据库 存在,或指定的文件不能 已打开,或者它位于 UNC 共享上。

我是设置会员的新手,所以我不能否认缺少一些真正重要的东西! :-)

我很确定这与我的连接字符串和/或 SQL 成员资格提供程序有关。我的 web.config 中有以下设置:

我的连接字符串:

  <connectionStrings>
<add name="MembershipServer" connectionString="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|\ASPNETDB.mdf; Trusted_Connection=Yes;"/>

我的 SQL 提供程序

 <membership defaultProvider="AspNetSqlProvider">
  <providers>
    <clear/>
    <add connectionStringName="MembershipServer" 
         name="AspNetSqlProvider"
         applicationName="/" 
         type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</membership>

我的身份验证和授权:

 <authentication mode="Forms">

  <forms name=".ASPXFORMSAUTH" loginUrl="Site/Login.aspx"
      cookieless="UseCookies"  >
  </forms>
</authentication>

<authorization>
  <deny users="?"/>
</authorization>

我网站中的文件结构是我的目录中有两个本地数据库。成员资格一(ASPNETDB.MDF)是我用我的连接字符串指向的成员。我已经使用 ASP.NET 工具来创建它。

我通过 LINQ TO SQL 类连接到的另一个数据库位于不同的项目中(使用层)。

非常感谢!!

【问题讨论】:

  • 您是否使用其他程序打开了数据库?
  • 你是在本地开发环境中运行这个吗?
  • 似乎你在不需要的时候工作太努力了。从一个新站点开始并运行配置。在您熟悉基于提供者的会员功能并需要自定义行为之前,没有必要通过复制默认行为来混淆事物。我说得通吗?例如您提供的值表明您实际上应该使用 machine.config 中的默认配置。

标签: asp.net sql-server web-config membership


【解决方案1】:

Visual Studio 将为您初始化所有这些。你妨碍了它。它尚未为您创建和配置该数据库。

删除连接字符串元素、成员资格元素、身份验证元素和授权元素。

或更好从一个全新的 Asp.Net 应用程序开始

然后点击项目(或网站)> Asp.net 配置并按照步骤操作。

否则您将需要使用 aspnet_reqsql.exe 创建和配置您自己的数据库。

【讨论】:

    【解决方案2】:

    尝试删除数据库名称前的 \。

    AttachDbFilename=|DataDirectory|ASPNETDB.mdf

    代替:

    AttachDbFilename=|DataDirectory|\ASPNETDB.mdf

    哦,另一个想法,你的机器上确实加载了 SQL Express,对吗?

    【讨论】:

      【解决方案3】:

      记住 machine.config 定义了一个名为“LocalSqlServer”的连接字符串,默认情况下你的应用会使用它。

      要解决此问题,请像这样显式删除名称:

      <connectionStrings>
          <remove name="LocalSqlServer" />
          <!-- your new connection string here -->
      </connectionStrings>
      

      或使用clear,但我没有测试过:

      <clear/>
      

      通常我所做的只是覆盖LocalSqlServer,所以我的连接字符串命名相同,这似乎可以解决大多数问题。

      就像其他人提到的那样,当您使用 ASP.NET 站点管理器设置应用程序时,您正在附加 ASPNETDB。

      【讨论】:

      • 都试过了。但是 .Net 4 的 machine.config 文件覆盖了更改。所以,不好。
      • 所有本地 web.config 都应该覆盖机器级别的配置,至少在我的经验中它总是如此。我会仔细检查您的标签是否都在同一个地方,并且没有拼写错误。重新启动应用程序池也不会受到伤害。
      猜你喜欢
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多