1

我将 mySQL 用作 ny db,并且所有 asp 成员资格配置都已到位。我在我的 web.comfig 文件中设置了额外的配置文件属性,如下所示;

 <profile defaultProvider="MySQLProfileProvider">
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
    <remove name="MySQLProfileProvider" />
    <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.6.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" enableExpireCallback="False" />
  </providers>
  <properties>
    <add name="AccountConfirmationId" type="System.String" />
    <add name="FullName" type="System.String" />
    <add name="CompanyName" type="System.String" />
    <add name="CompanyLocationName" type="System.String" />
  </properties>
</profile>

我的第一个问题是配置文件值实际存储在哪里?我的会员资料表中没有创建其他列。

其次,我使用下面概述的方法将注册过程中输入的值存储到配置文件中,来自“下一步”按钮单击事件。

 Protected Sub RegisterUser_NextButtonClick(sender As Object, e As WizardNavigationEventArgs) Handles RegisterUser.NextButtonClick
    'set Profile object and give it its property values
    Dim userProfile As ProfileCommon = TryCast(ProfileCommon.Create(RegisterUser.UserName), ProfileCommon)
    userProfile.AccountConfirmationId = Guid.NewGuid().ToString()
    userProfile.SetPropertyValue("FullName", FullName.Text)
    userProfile.SetPropertyValue("FullName", CompanyName.Text)
    userProfile.SetPropertyValue("FullName", CompanyLocationName.Text)
    userProfile.Save()


    Session("rolerequest") = ddlRegisterAs.SelectedItem.ToString()
    Session("acctconfid") = userProfile.AccountConfirmationId
    Session("completename") = FullName.Text
    Session("compname") = CompanyName.Text
    Session("compnamelocation") = CompanyLocationName.Text

End Sub

我尝试使用以下方法在我的管理员用户管理页面上检索配置文件值(由下拉列表中的用户名选择触发)

Protected Sub ddlSiteUsers_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlSiteUsers.SelectedIndexChanged

    Try
        Dim userProfile As ProfileCommon = Profile.GetProfile(ddlSiteUsers.SelectedItem.ToString())

        tbProfileUserFullname.Text = userProfile.GetPropertyValue("FullName").ToString()
        tbProfileCompany.Text = userProfile.GetPropertyValue("CompanyName").ToString()
        tbProfileCompLoc.Text = userProfile.GetPropertyValue("CompanyLocationName").ToString()
    Catch ex As Exception
        lblSiteUserErrMessage.Text = "User profile not found...   " & ex.Message.ToString()
        lblSiteUserErrMessage.Visible = True
    End Try

End Sub

所有值都作为空字符串出现。任何帮助表示赞赏。我使用的是网站项目而不是 Web 应用程序。

4

1 回答 1

0

为了回答您的第一个问题,属性名称和值被序列化并存储在现有表列中。有关更多详细信息,请参阅此博客文章: 如何使用 Sql Profile Provider 在数据库中序列化 ASP.NET 配置文件属性
这些是我的 Web 应用程序的配置文件表中的(自动生成的)列:

[UserId] [uniqueidentifier] NOT NULL,
[PropertyNames] [nvarchar](4000) NOT NULL,
[PropertyValueStrings] [nvarchar](4000) NOT NULL,
[PropertyValueBinary] [image] NOT NULL,
[LastUpdatedDate] [datetime] NOT NULL,

简而言之,不能直接访问配置文件属性以在配置文件提供程序之外进行查询。出于这个原因,我看到了一些不使用默认配置文件提供程序的建议,而是将用户详细信息存储在单独的UserDetails表中。我最终将列直接添加到用户表中,到目前为止这对我来说效果很好,但可能不是某些应用程序的最佳选择。

于 2013-01-09T15:57:45.370 回答