asp.net - 如何从mysql数据库的createuserwizard获取用户ID?

标签 asp.net mysql guid createuserwizard

除了 asp.net 成员(member)资格提供商提供的信息之外,我正在使用 createuserwizard 将其他用户信息存储到 mysql 数据库中。我想将此信息存储到另一个名为“用户配置文件”的表中。 “userprofile”中的用户 ID 为 int 类型,是引用“my_aspnet_users”的“id”的外键。

这是我的问题: 我似乎无法将新创建的用户的用户 ID 存储在我的“用户配置文件”表中。这些行不起作用:

        MembershipUser newUser = Membership.GetUser(RegisterUser.UserName);
        Int32 newUserId = (Int32)newUser.ProviderUserKey;            

这些行导致用户名被设置为 ProviderUserKey 返回的 guid 值,这太奇怪了!另一方面,当创建用户时,my_aspnet_users 中的 id 列会增加 1。并且没有任何内容添加到“用户配置文件”表中。

这是我插入上述代码的地方:

       protected void RegisterUser_CreatedUser(object sender, EventArgs e)
    {
        FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);

        string continueUrl = RegisterUser.ContinueDestinationPageUrl;
        if (String.IsNullOrEmpty(continueUrl))
        {
            continueUrl = "~/";
        }

        // Retrieve all the values from the registration form to insert into database
        TextBox FirstNameTextBox = (TextBox)RegisterUserWizardStep.ContentTemplateContainer.FindControl("FirstName");
        TextBox LastNameTextBox = (TextBox)RegisterUserWizardStep.ContentTemplateContainer.FindControl("LastName");
        TextBox UsernameTextBox = (TextBox)RegisterUserWizardStep.ContentTemplateContainer.FindControl("UserName");
        TextBox EmailTextBox = (TextBox)RegisterUserWizardStep.ContentTemplateContainer.FindControl("Email");

        // Get the UserId of the just-added user
        MembershipUser newUser = Membership.GetUser(RegisterUser.UserName);
        Int32 newUserId = (Int32)newUser.ProviderUserKey;            

        MySqlConnection DBConn = new MySqlConnection(WebConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString);
        MySqlCommand DBCmd = new MySqlCommand(); 

        try
        {
            // Add Insert statement to insert into database
            DBCmd = new MySqlCommand(
                "INSERT INTO userprofile(UID, Email, Fname, Lname)" +
                "VALUES (@UID, @Email, @Fname, @Lname)", DBConn);

            // Add database parameters
            DBCmd.Parameters.Add("@UID", MySqlDbType.Int32).Value = newUserId;
            DBCmd.Parameters.Add("@Email", MySqlDbType.VarChar).Value = EmailTextBox.Text;
            DBCmd.Parameters.Add("@Fname", MySqlDbType.VarChar).Value = FirstNameTextBox.Text;
            DBCmd.Parameters.Add("@Lname", MySqlDbType.VarChar).Value = LastNameTextBox.Text;
            DBCmd.ExecuteNonQuery();
        }

        catch(Exception exp){
            Response.Write(exp);
        }

        // Close database connection and dispose database objects
        DBCmd.Dispose();
        DBConn.Close();
        DBConn = null;

        Response.Redirect(continueUrl);

    }

有人使用过 mysql 和 createuserwizard 来获取更多信息吗?

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

您的 SQL 语句未返回新创建的 ID 值。当您执行插入语句时,不会自动返回该值。

关于asp.net - 如何从mysql数据库的createuserwizard获取用户ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6727866/

相关文章:

php - MySQL : Insert Data With Single Query, 但非自动递增列上的数字自动递增

mysql - SQL:比较 MySQL 中的版本字符串 (W.X.Y.Z)

c++ - GUID 和哈希表 - 如何使用它们?

batch-file - 计算机不遵守 powercfg GUID 命令行指令

asp.net - 在 ASP.NET 中获取给定日期的周数

html - 使用 CSS 从 ASP.NET 母版页中删除元素符号

mysql - 多个外键 ERD

c# - 使用存储在 session 中的 Guid 过滤 Linq

c# - 如何在 Asp.net MVC 5 中填充没有 Entity Framework 的模型

javascript - 无法隐藏我页面的部分内容,但相同的代码适用于 JSFiddle