SqlDataReader 将 Binary(1) 列转换为 bool
SqlDataReader convert Binary(1) column to bool
我们有一个 table,其中有一列 IsChecked
,其数据类型为 Binary(1)
。基本上,它存储 0x00
或 0x01
来表示是否检查了该数据行。
我知道使用 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"]
来转换它们
我们有一个 table,其中有一列 IsChecked
,其数据类型为 Binary(1)
。基本上,它存储 0x00
或 0x01
来表示是否检查了该数据行。
我知道使用 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"]
来转换它们