SqlDataReader将Binary(1)列转换为bool

问题描述 投票:0回答:1

我们有一个表格,其中有一个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"]的正确方法。

c# sql-server ado.net
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.