Как получить идентификатор пользователя из createuserwizard для базы данных mysql? - PullRequest
0 голосов
/ 18 июля 2011

Я использую createuserwizard для хранения дополнительной информации о пользователе в базе данных mysql, помимо информации, предоставленной поставщиком членства asp.net.Я хотел бы сохранить эту информацию в другой таблице под названием «userprofile».Идентификатор пользователя в 'userprofile' имеет тип int и является внешним ключом, ссылающимся на 'id' для 'my_aspnet_users.

Это моя проблема: я не могу получить идентификатор пользователя для вновь созданного пользователяхранить в моей таблице userprofile.Эти строки не работают:

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

Эти строки приводят к тому, что для имени пользователя устанавливается значение guid, возвращаемое ProviderUserKey, что очень странно!Столбец id из my_aspnet_users, с другой стороны, увеличивается на 1 при создании пользователя.И ничего не добавляется в таблицу userprofile.

Здесь я вставил приведенный выше код:

       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 для получения дополнительной информации?

Любая помощь будет оценена.Спасибо!

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Ваш оператор SQL не возвращает вновь созданное вами значение идентификатора.Это не возвращается автоматически при выполнении оператора вставки.

0 голосов
/ 21 июля 2011

Оказывается, нет ничего плохого в приведенном выше коде. Я возился со значением идентификатора пользователя в другой функции, которая вызывала проблемы здесь!

...