首页 > 解决方案 > 在最简单的情况下,ODBC DataReader 在数据正确时无法获取布尔值

问题描述

我试图通过使用从理论上读取一个boolean值,它应该可以正常工作,因为我们读取的列是 a并且传入的数据是或者ODBCDataReaderODBCDataReader.GetBoolean(i)boolean column10

所以当我这样读时——

return reader.IsDBNull(col) ? null : reader.GetBoolean(col);

我明白了InvalidCastException

然后我试图获取读者作为

return reader.IsDBNull(col) ? null : Convert.ToBoolean(reader.GetValue(col));

上面一行抱怨The string is not recognized as a valid bool value.(值为“1”)

然后我写了下面的方法——

public static bool? GetDbSafeNullableBit(this IDataRecord reader, string propertyName, bool? defaultBool = null)
    {
        var returnValue = defaultBool;
        var col = reader.GetOrdinal(propertyName);
        if (reader.IsDBNull(col))
        {
            return returnValue;
        }

        var stringValue = reader[col].ToString();

        switch (stringValue)
        {
            case "1":
                returnValue = true;
                break;
            case "0":
                returnValue = false;
                break;
            default:
                throw new Exception($"Value read from reader is not defined as proper boolean, value is {stringValue}");
        }

        return returnValue;
    }

瞧,我发现这很好用。

有人可以指导我为什么前两种方法没有给出预期的结果。

PS:数据来自 PostgresSql(有什么不同吗?)

标签: c#.netpostgresqlodbcdatareader

解决方案


推荐阅读