C# SqlDataReader.GetBoolean返回不正确的值

C# SqlDataReader.GetBoolean返回不正确的值,c#,sqldatareader,C#,Sqldatareader,我在数据库表中有一列存储“bit”类型。值可以为null、false或true。我正在使用SqlDataReader对象读取此表中的行,并且能够成功读取除此“位”列之外的所有列值。代码如下所示: if(!dataReader.IsDBNull(columnOrdinal)) { bool? value = dataReader.GetBoolean(columnOrdinal); } 可以安全地假设columnOrdinal值是正确的,因为其余的列正在按预期读取。”由于业务需要,“值”

我在数据库表中有一列存储“bit”类型。值可以为null、false或true。我正在使用SqlDataReader对象读取此表中的行,并且能够成功读取除此“位”列之外的所有列值。代码如下所示:

if(!dataReader.IsDBNull(columnOrdinal))
{
    bool? value = dataReader.GetBoolean(columnOrdinal);
}
可以安全地假设columnOrdinal值是正确的,因为其余的列正在按预期读取。”由于业务需要,“值”是可为空的布尔值

问题:当列的值在db中为“false”时,“value”变量设置为“true”


对象模型的设置方式使我无法测试列值为“true”时的情况,但无论如何我都有一个问题。我不知道为什么会发生这种情况,任何帮助或指点都将不胜感激

试试这个:布尔?值=数据读取器[“columnOrdinal”]作为布尔??无效的orValues可以是null、0或1,而不是false或true。你有什么数据?我想你错了。声明中明确表示不会执行任何转换。因此,它将读取0并返回false,或读取1并返回true,但不返回NULL。@abatishchev-如果为NULL,它将抛出异常。文档中没有说它将0/1转换为false/true,它说基础数据必须已经是布尔值,因此根本没有转换。糟糕的是,代码一直在使用存储过程从数据库读取数据,而存储过程总是返回null或1。抱歉,谢谢你们的回复。