关于“比特”的问题数据类型

本文关键字:问题 数据类型 比特 关于 | 更新日期: 2023-09-27 18:01:48

    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;
}

问题是对象总是接收到一个非空值。但在禁止字段的用户表中,我将其类型设置为"允许null"…我可以看到有null,但是没有检索到null ..这使得"isprohibited"参数一直为真…为什么它会发生,我怎么知道当对象是bool True

关于“比特”的问题数据类型

如果您的数据库查询在SQL中返回NULL,则在。net中转换为DBNull。所以不检测null,检测DBNull.Value

您应该在表达式

中测试DBNull.Value

try this:

isBanned = o == null ? false : true;

还可以使用string.Empty:

检查字符串是否为空。
isBanned = o == string.Empty ? false : true;