SqlDataReader将Binary(1)列转换为bool

时间:2019-04-26 04:47:42

标签: c# sql-server ado.net

我们有一个表,该表的列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"]的正确方法即可。

1 个答案:

答案 0 :(得分:0)

根据注释,您在_dr["IsChecked"]中得到的值是 byte []或集合,并且[0] = 0 因此,您可以使用BitConverter.ToBoolean方法,< br /> 返回一个从字节转换为字节数组指定位置的布尔值。

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

也尝试使用此working example。如果_dr["IsChecked"]的类型不是byte[],则可以在应用(byte[])_dr["IsChecked"]

之前使用BitConverter.ToBoolean进行投射