【问题标题】:Question about "bit" datatype关于“位”数据类型的问题
【发布时间】:2011-07-12 07:52: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;
}

问题是对象总是接收到一个非空值。但是在“禁止”字段的“用户”表中,我将其类型设置为“允许空值”......我可以看到有空值,但没有检索到空值......其他的东西......这使得“isBanned”参数成为真的..一直..为什么会发生,我怎么知道对象什么时候是布尔真。

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

    如果您的数据库查询在 SQL 中返回 NULL,这将在 .NET 中转换为 DBNull。因此,与其测试null,不如测试DBNull.Value

    【讨论】:

      【解决方案2】:

      你应该在你的表达式中测试DBNull.Value

      【讨论】:

        【解决方案3】:

        试试这个:

        isBanned = o == null ? false : true;
        

        还可以使用string.Empty检查字符串是否为空:

        isBanned = o == string.Empty ? false : true;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-14
          • 1970-01-01
          • 2011-07-20
          • 2010-11-22
          • 2022-01-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多