SqlDataReader将Binary列转换为bool

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlDataReader将Binary列转换为bool相关的知识,希望对你有一定的参考价值。

我们有一个表格,其中有一个IsChecked列,其中有Binary(1)作为数据类型。基本上,它存储0x000x01来表示是否检查了该数据行。

我知道使用Bit作为数据类型会更好,但是已经有很多其他模块与这个表相关联,所以让我们保持现在的状态。

我尝试过直观的方式

// _dr is the SqlDataReader
Convert.ToBoolean(_dr["IsChecked"]);
(bool)_dr["IsChecked"];

但它不能简单地转换,然后我尝试了一些我认为可行的方法

bool.Parse(_dr["IsChecked"].ToString());
Convert.ToBoolean((byte)_dr["IsChecked"]);
Convert.ToBoolean((byte[])_dr["IsChecked"]);
Convert.ToBoolean((int)_dr["IsChecked"]);

但是以上所有都让我转换失败了

指定演员表无效。

我看看我的同事如何在他们的模块中读取这个字段,它似乎需要一个输出参数,它将Bit作为数据类型来输出值。

但应该有一些方法更容易做同样的,对吧?我只需要知道转换_dr["IsChecked"]的正确方法。

答案

根据评论你得到_dr["IsChecked"]中的值是byte []或集合和[0] = 0所以你可以使用BitConverter.ToBoolean方法, 它返回从字节数组中指定位置的字节转换的布尔值。

bool isChecked = BitConverter.ToBoolean(_dr["IsChecked"],0);

试试这个working example。如果_dr["IsChecked"]的类型不是byte[]那么你可以在使用(byte[])_dr["IsChecked"]之前使用BitConverter.ToBoolean施放它们

以上是关于SqlDataReader将Binary列转换为bool的主要内容,如果未能解决你的问题,请参考以下文章

将 DataTableReader 转换为 SqlDataReader

如何使用 SqlDataReader 获取位值并将其转换为布尔值?

C# - 无法将类型“IBM.Data.DB2.iSeries.iDB2DataReader”隐式转换为“System.Data.SqlClient.SqlDataReader”

将 SqlDataReader 传递给函数作为转换参数

从 SqlDataReader 转换为 JSON

如何检查 SQLDataReader 项是不是为 DateTime os String 类型值?