c# - 在最简单的情况下,ODBC DataReader 在数据正确时无法获取布尔值
问题描述
我试图通过使用从理论上读取一个boolean
值,它应该可以正常工作,因为我们读取的列是 a并且传入的数据是或者ODBCDataReader
ODBCDataReader.GetBoolean(i)
boolean column
1
0
所以当我这样读时——
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(有什么不同吗?)
解决方案
推荐阅读
- python - 在数据帧上正确合并不同长度的系列
- ruby-on-rails - RSpec - 刷新关联
- pyspark - PySpark sql CASE 失败
- angular - Angular:NgbTypeahead 和 onScreen 键盘
- ios - Swift 中的 SideMenu 忽略 UIStatusBarStyle.lightContent
- android - 使用日期时间类型的房间
- python - 如何在 python odoo 中正确计算 For 循环?
- .net - 返回的对象具有空/空 ICollection,除非首先访问/检查它
- sql - 从 db 获取不同范围的多个 id 的结果
- instagram - 权限和功能