Проблема с логическим результатом поиска записи SQL - PullRequest
0 голосов
/ 08 января 2019

Я сделал функцию, которая проверяет, существует ли уже имя пользователя в таблице, для использования с проверкой создания учетной записи в c #. Однако, даже если я знаю, что запись уже существует, он все равно возвращает, что имя пользователя доступно. Я не могу понять, почему, когда я искал ответ на этот вопрос, я следовал тому, что было рекомендовано, и у него все еще остается та же проблема, поэтому любая помощь будет принята с благодарностью.

Я попытался удалить апострофы, заменив "=" на аналогичные, используя счетчик (*) для проверки на наличие экземпляров, но все равно безрезультатно

public bool isUsernameAvailable(string uName)
    {
        ConnectionString.OpenConnection();
        string Query = "SELECT Username FROM Users WHERE Username= '@user'";
        SqlCommand checkUsername = new SqlCommand(Query, ConnectionString.GetConnection());
        checkUsername.Parameters.AddWithValue("@user", uName);
        var UserExist = checkUsername.ExecuteScalar();

        if (UserExist != null)
        {
            return false;
        }
        else
        { 
            return true;
        }
    }

Ответы [ 3 ]

0 голосов
/ 08 января 2019
public bool isUsernameAvailable(string uName)
{
    string sql = "SELECT Username FROM Users WHERE Username= @user";
    string connString = ConnectionString.GetConnection();

    using (SqlConnection connection = new SqlConnection(connString))
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
        var uNameParam = new SqlParameter("user", SqlDbType.String);
        uNameParam.Value = uName;

        command.Parameters.Add(uNameParam);
        var exists = command.ExecuteScalar();

        if (exists != null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

Можешь попробовать что-нибудь подобное? Я сделал несколько предположений о вашем коде, но, надеюсь, это сработает.

По сути, удаление кавычек - это все, что требовалось, однако приведенный ниже код обеспечивает правильное удаление SqlConnection и SqlCommand, поскольку они реализуют IDisposable.

Дополнительно, используя параметры. Добавление над AddWithValue - это лишь небольшая работа, но она позволяет явно указать тип параметра.

0 голосов
/ 08 января 2019

public bool isUsernameAvailable (строка uName) { ConnectionString.OpenConnection (); * * тысяча один

    string Query = "SELECT Username FROM Users WHERE Username=@user";

    SqlCommand checkUsername = new SqlCommand(Query, ConnectionString.GetConnection());
    checkUsername.Parameters.AddWithValue("@user", uName);
    var UserExist = checkUsername.ExecuteScalar();

    if (UserExist == null)
    {
        return true;
    }
    else
    { 
        return false;
    }
}

Надеюсь, вам нужно значение True, когда имя пользователя не существует

0 голосов
/ 08 января 2019

Попробуйте этот текст sql

string Query = "SELECT Username FROM Users WHERE Username= @user";
    SqlCommand checkUsername = new SqlCommand(Query, ConnectionString.GetConnection());
    checkUsername.Parameters.AddWithValue("@user", uName);
    var result= checkUsername.ExecuteScalar();

    if (result==null)
    {
        return true;
    }
    else
    { 
        return false;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...