我使用aspnet_regsql创建了一个数据库,该数据库是在sql sever 2008中创建的,而不是在我项目的data文件夹中创建的(我需要手动将其移动到该文件夹​​中吗?)。
接下来,在“网站管理工具”中,我转到提供程序部分,然后单击“ don Test”按钮。

我收到一个错误:


无法建立与
数据库。如果还没有
创建SQL Server数据库,退出
网站管理工具,使用
aspnet_regsql命令行实用程序
创建和配置数据库,
然后返回此工具进行设置
提供者。


也许我需要在web.config中进行设置,例如成员资格设置或连接字符串(或ASP.NET网站管理员工具应为我创建这些设置)?

更新:
可能是因为我使用的是SQL Server 2008 Full而没有表达吗?

更新2:

在网站管理工具中将成员身份部分和连接字符串设置为我的aspnetdb数据库后,我打开了安全性->安全设置向导->定义角色(阶段4),我得到了此错误:

遇到错误。请返回上一页,然后重试。


以下消息可能有助于
诊断问题:无法
连接到SQL Server数据库。在
System.Web.Administration.WebAdminPage.CallWebAdminHelperMethod(布尔
isMembership,字符串methodName,
Object []参数,Type []
paramTypes)
ASP.security_wizard_wizardpermission_ascx.OnInit(EventArgs

System.Web.UI.Control.InitRecursive(控件
namingContainer)在
System.Web.UI.Control.InitRecursive(控件
namingContainer)在
System.Web.UI.Control.InitRecursive(控件
namingContainer)在
System.Web.UI.Control.InitRecursive(控件
namingContainer)在
System.Web.UI.Control.InitRecursive(控件
namingContainer)在
System.Web.UI.Page.ProcessRequestMain(布尔
includeStagesBeforeAsyncPoint,布尔
includeStagesAfterAsyncPoint)

最佳答案

是的,您需要在web.config中修改连接字符串。

查看web.config,您可能会在<membership>元素中看到类似以下内容:

<membership>
  <providers>
    <clear />
    <add connectionStringName="LocalSqlServer"
         name="AspNetSqlMembershipProvider"
         [...]
         type="System.Web.Security.SqlMembershipProvider,
               System.Web,
               Version=2.0.0.0,
               Culture=neutral,
               PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</membership>


connectionStringName属性告诉框架在<connectionStrings>元素中查找名为“ LocalSqlServer”的连接字符串-您的web.config中可能未定义此字符串,因为它可以从.Net Frameworks中的Machine.Config继承。核心配置目录。

您可能应该为连接字符串选择一个新名称,并更新您的成员资格,角色和配置文件(如果全部使用)提供程序以使用新名称。

然后在<connectionStrings>元素中具有以下内容:

<connectionStrings>
  <remove name="LocalSqlServer" />
  <add name="MyConnectionString"
       connectionString="Data Source=[ServerName];Initial Catalog=[DatabaseName];Integrated Security=True"
       providerName="System.Data.SqlClient" />
</connectionStrings>


调整值以适合您的系统-与在Web.config中存储数据库登录名和密码相比,建议使用集成安全性,但是建议使用YMMV(例如,在共享主机上,我不能使用集成安全性,因此必须提供用户/密码详细信息)。

网站管理工具也将遵循这些连接字符串。

编辑以回复评论

您是否已成功登录?还是创建了用户?我只想排除您已配置了连接字符串并正常工作?

您是否已配置并打开了角色提供程序?您是否在其中更新了“ connectionStringName”属性?

请注意,和以前一样,machine.config为您指定一个默认的角色提供程序,它尝试指向本地SqlExpress实例-这可能是连接错误的来源。

<!-- Note enabled="true" - you need to turn this one on! -->
<roleManager enabled="true">
  <providers>
    <clear />
    <add connectionStringName="MyConnectionString"
         [...]
         type="System.Web.Security.SqlRoleProvider,
               System.Web,
               Version=2.0.0.0,
               Culture=neutral,
               PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</roleManager>


有关被消除的属性的更多详细信息,我建议使用以下文档:



roleManager Element
providers Element for membership



配置完后,它应该可以正常工作。

如果您无法创建用户/登录名,请检查以下内容:


连接字符串-确保名称匹配,确保data source与您的服务器实例匹配(不总是与您的计算机名称相同,它可能类似于“ MachineName \ SqlServer”)。
如果您使用的是集成安全性,则需要确保已授予您的网站根据数据库中的相应权限运行的帐户:您应该发现数据库中具有多个角色,从aspnet_开始,直至确保可以创建用户(如果您具有注册表,则需要使用该用户),应将帐户添加到aspnet_XXXX_FullAccess角色中(角色,个性化,配置文件和角色各一个)。

10-07 19:40
查看更多