我使用aspnet_regsql创建了一个数据库,数据库是在sql sever 2008中创建的,而不是在我的项目中的数据文件夹中创建的(我是否需要手动将其移动到文件夹中?)。
接下来,在网站管理工具中,我转到了提供者部分,然后单击了“测试”按钮。
我收到了一个错误:
无法建立连接 数据库。如果你还没有 创建了SQL Server数据库,退出 网站管理工具,使用 aspnet_regsql命令行实用程序 创建和配置数据库, 然后返回此工具进行设置 提供者。
也许我需要在web.config中设置一些东西,比如成员资格设置或连接字符串(或者ASP.NET网站管理员工具应该为我创建这些设置)?
更新
也许这是因为我使用的是SQL Server 2008并且没有表达?
更新2:
在网站管理工具中设置我的aspnetdb数据库的成员资格部分和连接字符串后,我打开了security->安全设置向导 - >定义角色(阶段4)我收到了这个错误:
遇到错误。请返回上一页,然后重试。
以下消息可能对您有所帮助 诊断问题:无法解决 连接到SQL Server数据库。在 System.Web.Administration.WebAdminPage.CallWebAdminHelperMethod(布尔 isMembership,String methodName, Object []参数,类型[] paramTypes)at ASP.security_wizard_wizardpermission_ascx.OnInit(EventArgs的 吃 System.Web.UI.Control.InitRecursive(控制 namingContainer)at System.Web.UI.Control.InitRecursive(控制 namingContainer)at System.Web.UI.Control.InitRecursive(控制 namingContainer)at System.Web.UI.Control.InitRecursive(控制 namingContainer)at System.Web.UI.Control.InitRecursive(控制 namingContainer)at System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)
答案 0 :(得分:5)
是的,您需要在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中定义,因为它可以从机器继承.Config在.Net Frameworks核心配置目录中。
您应该为连接字符串选择一个新名称,并更新您的成员资格,角色和个人资料(如果您使用它们)提供商以使用新名称。
然后在<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>
有关省略属性的更多详细信息,我建议使用文档:
一旦你配置了它,它应该都可以工作。
如果您无法创建用户/登录,我会检查:
data source
与您的服务器实例匹配(不仅仅是您的计算机名称,它可能类似于“MachineName \ SqlServer”)。aspnet_
角色(会员,个性化,个人资料和角色各一个)。 答案 1 :(得分:0)
打开sql management studio并打开master数据库,进行新查询并输入
sp_configure 'user instances enabled','1'
执行此操作,然后输入
reconfigure
并执行此操作以使更改生效。有关sp_configure的更多信息,如果要列出所有配置,则可以阅读http://msdn2.microsoft.com/en-us/library/ms188787.aspx,然后执行不带任何参数的sp_configure。
答案 2 :(得分:0)
按照以下步骤将正确的会员资格集成到您的网站(如果您看到上述错误,请
“Could not establish a connection to the database. If you have not yet created the SQL Server database, exit the Web Site Administration tool, use the aspnet_regsql command-line utility to create and configure the database, and then return to this tool to set the provider
”)。
第1步:
从计算机上的C:\ windows \ Microsoft.NET \ Framework \ v2.0.50727文件夹中运行 aspnet_regsql.exe 实用程序。选择或双击aspnet_regsql.exe实用程序将打开向导,如下所示。
在上面的窗口中选择“下一步”按钮将打开下一个窗口,您可以在其中为应用程序服务配置SQL Server或从现有数据库中删除应用程序服务信息。
第2步:
选择“为应用程序服务配置SQL Server”单选按钮以安装新数据库并选择“下一步”按钮。
第3步
输入您的SQL Express服务器名称,如下所示。请注意,您可以将应用程序服务数据库名称更改为所需名称(默认情况下为aspnetdb)。(或)您可以选择Sql Server身份验证(用户名,密码,需要相应的数据库名称)
请注意,我将数据库命名为ASPNETServices
第4步:
选择“下一步”按钮并确认您的设置是否正确以进一步安装(如下图所示)并选择“下一步”按钮。
第5步
在成功安装ASP.NET应用程序服务数据库后,选择上面窗口中的“下一步”按钮将转到确认窗口,如下所示。最后按“完成”。
第6步
您将看到已安装的ASPNET Services数据库已准备好在您的ASP.NET应用程序中使用
答案 3 :(得分:0)
我遇到过类似的问题,因为这是我第一次使用asp.net会员资格。如果设置<roleManager Enabled="False" />
,您将能够创建用户。
我在这里猜测,但我认为是AspNetSqlRoleProvider
的web.config中的另一个提供程序,并为其提供了一个连接字符串,该字符串指向具有访问角色的用户的asp服务数据库SQL端的管理信息(查看sql用户的“此用户拥有的模式”属性和“数据库角色成员资格”)将允许该工具正确进入数据库。
您是否在SQL Server上使用Windows身份验证或SQL身份验证?
PS -
我阅读和理解Zhaph的答案越多,我就越喜欢它。他给了AspNetSqlRoleProvider元素的msdn模式链接(不要被微软愚弄说文档不存在,只需从“其他版本”下拉列表中选择一个合适的版本)。
<强>更新强> 在实际测试我正在编写的内容之前,我在这里发布了一件坏事,但我确实完成了并将以下内容添加到web.config中,允许我继续编辑用户并添加/管理角色。
<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="MyConnectionString"/>
</providers>
</roleManager>
正如我之前提到的,我的连接字符串中指定的用户需要aspnet_Roles _... Access属性以及aspnet_Membership _... Access,除非您在integrated security=true
中使用<identity impersonate="true" userName="windowsUser" password="winUsrPassword" />
在哪种情况下,您的Windows用户需要这些属性。