SqlDataReader 将 Binary(1) 列转换为 bool

SqlDataReader convert Binary(1) column to bool

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

我知道使用 Bit 作为数据类型会更好,但是已经有很多其他模块与这个 table 相关联,所以让我们暂时保持原样。

我尝试了像

这样直观的方法
// _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"]);

但是以上都return我转换失败了

Specified cast is not valid.

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

但是应该有一些更简单的方法来做同样的事情,对吧? 我只需要知道转换 _dr["IsChecked"].

的正确方法

根据评论,您在 _dr["IsChecked"] 中得到的值是 byte[] 或集合 [0]=0 因此您可以使用 BitConverter.ToBoolean方法,
其中returns字节数组中指定位置的字节转换的布尔值

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

也试试这个 working example。如果 _dr["IsChecked"] 的类型不是 byte[] 那么你可以在应用 BitConverter.ToBoolean

之前使用 (byte[])_dr["IsChecked"] 来转换它们