Вопрос о типе "бит" - PullRequest
0 голосов
/ 11 июля 2011
    public static bool CheckIfUserISbanned(Guid guid)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("SELECT Banned");
    sb.Append(" FROM dbo.Users");
    sb.Append(" WHERE UsersID=@UserID");
    object o;
    bool isBanned = false;
    string myConnectionString = AllQuestionsPresented.connectionString;
    using (SqlConnection conn = new SqlConnection(AllQuestionsPresented.connectionString))
    {
        SqlCommand cmd = new SqlCommand(sb.ToString(), conn);
        conn.Open();
        cmd.Parameters.Add("@UserID", SqlDbType.UniqueIdentifier).Value = guid;
        o = cmd.ExecuteScalar();
    }

    isBanned = o == null ? false : true;//Problem here
    return isBanned;
}

Проблема в том, что объект всегда получает значение, которое не является нулевым. Но в таблице «Пользователи» в поле «Запрещено» я установил его тип «Разрешить пустые значения» ... Я вижу, что есть нулевые значения, но нулевое значение не возвращается .. Что-то еще делает ... что делает параметр "isBanned" правда .. все время .. Почему это происходит, и как я могу узнать, когда объект bool True.

Ответы [ 3 ]

6 голосов
/ 11 июля 2011

Если ваш запрос к базе данных возвращает NULL в SQL, он преобразуется в DBNull в .NET.Таким образом, вместо проверки на null, проверьте на DBNull.Value.

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

Вы должны проверить на DBNull.Value в вашем выражении

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

попробуйте это:

isBanned = o == null ? false : true;

также проверьте, является ли строка пустой или нет, используя string.Empty:

isBanned = o == string.Empty ? false : true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...