Когда имя пользователя ASP.NET существует, измените на username (x) - PullRequest
0 голосов
/ 25 января 2012

Использование поставщика членства SQL для членства в ASP.NET. Я использую first.last в качестве имени пользователя, которое создается программно из данных пользователя, заполненных в форме.

Когда пользователь отправляет форму, я хочу иметь возможность проверить, существует ли имя пользователя, и изменить его на username1, если это так, проверить username1, и сделать его username2, если он существует, и т. Д., Пока он не станет уникальным именем пользователя. .

Я не знаю, как делать хранимые процедуры, поэтому я пытаюсь использовать SQLDataReader, чтобы проверить, существует ли имя пользователя.

Проблема в моей петле. Логика в основном состоит в том, чтобы установить логическое значение и продолжать цикл и добавлять 1 к счетчику, пока он не найдет дубликат. Я проходил через это много раз, и даже когда он устанавливает логическое значение в false, он продолжает циклически повторяться.

Идеи, пожалуйста?

Код:

protected void Membership_add()
{
    SqlConnection con = new SqlConnection(connectionString);
    string NewUserNameString = FirstName.Text + "." + LastName.Text;

    //Check for duplicate aspnet membership name and add a counter to it if exists
    // Check for valid open database connection before query database
    bool match = true;
    SqlDataReader _SqlDataReader = null;
    string TestNameString = NewUserNameString;
    string selectDupeString = "SELECT UserId FROM aspnet_Users WHERE UserName = '" + TestNameString + "'";
    SqlCommand SQLdatareaderCmd = new SqlCommand(selectDupeString, con);
    int UserNameCounter = 0;
    con.Open();
    while (match = true)
    {
        //Open the connection

        try
        {
            //Read the table
            _SqlDataReader = SQLdatareaderCmd.ExecuteReader();
        }
        catch (Exception ex)
        {
            lblDatareaderEx.Text = "An Exception occurred. " + ex.Message + " " + ex.GetType().ToString();
        }

        if (_SqlDataReader.HasRows)
        {
            //match = true;
            //increase counter by 1 for each record found and change First.Name to First.Namex
            TestNameString = NewUserNameString;
            UserNameCounter = UserNameCounter + 1;
            TestNameString = TestNameString + UserNameCounter.ToString();
            _SqlDataReader.Close();
            _SqlDataReader.Dispose();
            selectDupeString = "SELECT UserId FROM aspnet_Users WHERE UserName = '" + TestNameString + "'";
            SQLdatareaderCmd = new SqlCommand(selectDupeString, con);
        }
        else
        {
            // close sql reader
            _SqlDataReader.Close();
            _SqlDataReader.Dispose();
            //get out of loop
            match = false;
        }
    }
    con.Close();
    con.Dispose();
}

Ответы [ 3 ]

1 голос
/ 25 января 2012

Эта строка:

while (match = true)

выполняет задание.
Если вы хотите, чтобы ваш код работал, вы должны сделать сравнение:

while (match == true)

Или, поскольку ваша переменная уже является логической переменной, вы можете просто использовать переменную напрямую:

while(match)
0 голосов
/ 25 января 2012

Если вы разбиваете код на более мелкие блоки, код становится проще и легче для чтения.

private string MembershipAddUser(string firstName, string lastName)
{
    string username = firstName + "." + lastName;

    int i = 0;
    while (UserExists(username))
    {
        i++;
        username = firstName + "." + lastName + i.ToString();
    }

    return username;
}

private bool UserExists(string username)
{
    string sql = "SELECT COUNT(*) FROM dbo.aspnet_Users WHERE UserName = @UserName";

    SqlConnection connection = new SqlConnection(connectionString);

    SqlCommand command = new SqlCommand(sql, connection);
    command.Parameters.AddWithValue("@UserName", username);

    using (connection)
    {
        connection.Open();

        int count = (int) command.ExecuteScalar();
        return (count != 0);
    }
}
0 голосов
/ 25 января 2012

В данный момент вы устанавливаете match вместо сравнения его значения.

Попробуйте установить while (match = true) в while (match == true)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...