SqlDataReader конвертирует двоичный столбец (1) в bool - PullRequest
0 голосов
/ 26 апреля 2019

У нас есть таблица со столбцом 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"].

1 Ответ

0 голосов
/ 26 апреля 2019

В соответствии с комментарием вы получаете значение в _dr["IsChecked"] это байт [] или коллекцию и [0] = 0 Так что вы можете использовать метод BitConverter.ToBoolean,
который возвращает логическое значение, преобразованное из байта в указанной позиции в байтовом массиве.

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

Попробуйте этот рабочий пример . если тип _dr["IsChecked"] не byte[], то вы можете разыграть их с помощью (byte[])_dr["IsChecked"] перед применением BitConverter.ToBoolean

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...