SqlDataReader将Binary列转换为bool
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlDataReader将Binary列转换为bool相关的知识,希望对你有一定的参考价值。
我们有一个表格,其中有一个IsChecked
列,其中有Binary(1)
作为数据类型。基本上,它存储0x00
或0x01
来表示是否检查了该数据行。
我知道使用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”