asp.net web管理工具自定义数据库

时间:2009-10-02 09:05:42

标签: asp.net asp.net-membership

我在这里陷入困境,需要某人提示。 我使用自己的SQL Server数据库来管理用户和角色(而不是aspnet数据库)。它工作正常,直到我向aspnet_membership表添加了一些自定义字段。这样做之后,我无法通过asp.net Web管理工具创建新用户。抛出以下异常:

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

以下消息可能有助于诊断问题:调用目标引发了异常。 at System.RuntimeMethodHandle._InvokeMethodFast(Object target,Object [] arguments,SignatureStruct& sig,MethodAttributes methodAttributes,RuntimeTypeHandle typeOwner)at System.RuntimeMethodHandle.InvokeMethodFast(Object target,Object [] arguments,Signature sig,MethodAttributes methodAttributes,RuntimeTypeHandle typeOwner)at at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo culture,Boolean skipVisibilityChecks)System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,Culture.fo.Administration.WebAdminMembershipProvider.CallWebAdminMembershipProviderHelperMethodOutParams(String methodName,Object []参数,Type [] paramTypes),System.Web.Administration.WebAdminMembershipProvider.CreateUser(String username,String password,String email,String passwordQuestion),CultureInfo culture) ,String passwordAnswer,Boolean isApproved,Object providerUserKey,MembershipCreateStatus& System.Web.UI.Web.trol.CnateUserWizard.OnNextButtonClick(WizardNavigationEventArgs e)System.Web.UI.WebControls.Wizard.OnBubbleEvent(Object source,EventArgs e)上的System.Web.UI.WebControls.CreateUserWizard.AttemptCreateUser()处于System.Web.UI.WebControls.CreateUserWizard.AttemptCreateUser() )在System.Web.UI.Web.UI.Control上的System.Web.UI.WebControls.Wizard.WindTable.OnBubbleEvent(Object source,EventArgs args)的System.Web.UI.WebControls.CreateUserWizard.OnBubbleEvent(Object source,EventArgs e)中。 System.Web.UI.WebControls.Button上System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)的System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e)中的RaiseBubbleEvent(Object source,EventArgs args) System.Web上System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)的System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)中的.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)。 UI.Page.ProcessRequestMain(布尔includeStagesBeforeA syncPoint,Boolean includeStagesAfterAsyncPoint)

仅在用户创建时发生。其他一切都很好。我已经尝试过再次运行aspnet_regsql实用程序。还有其他建议吗?任何帮助将非常感谢。

- 阿里

3 个答案:

答案 0 :(得分:1)

猜测,您添加的任何字段是否定义为Not NULL且没有默认值?

如果是这样,请确保在添加用户的代码中填充它们。

答案 1 :(得分:1)

是否允许额外列保存空值?如果不是,您是否定义了合适的默认值?

您是否更新了写入成员资格表的存储过程?如果是这样,那么你需要写一个custom membership provider来填充它们 - 它们是什么类型的细节?

将这些值存储在用户的Profile中可能会更好 - 除非他们明确地要对其成员资格进行处理,其中可以使用自定义提供程序。


修改以回复Ali's comments

在该实例中(将帐户标记为已删除/不活动)然后是,可能有必要将其存储在成员资格表中 - 它们与网站的用户成员资格有关。

然而 - 我可以看到你的方法的主要问题是,如果你使用默认的Login控件,用户仍然可以最初登录,然后你需要检查Deleted字段的值。无论是LoggingIn(在Authentication之前)还是LoggedIn(之后)事件处理程序 - 您都可以通过修改内置IsApproved属性来默认处理此问题。

答案 2 :(得分:0)

谢谢Zhaph和Oded。 NULL值是问题。 但是Zhaph指出了我想要了解的另一个问题。其他细节类似于isDeleted,其中我只是将isDeleted标记为true而不必实际删除用户,然后审计一些相关的详细信息,如deletedByUser,dateDeleted等(以及某些特定于应用程序)。 我没有更新写入成员资格表的存储过程。相反,我有一些额外的SP,一旦创建用户,就会填写额外的详细信息。这是(在会员表中存储字段并编写新程序)正确的方法吗?