Чтение логических значений из БД?

В С#, используя SqlDataReader, есть ли способ прочитать логическое значение из БД?

while (reader.Read())
{
    destPath = reader["destination_path"].ToString();
    destFile = reader["destination_file"].ToString();
    createDir = reader["create_directory"].ToString();
    deleteExisting = Convert.ToBoolean(reader["delete_existing"]);
    skipIFolderDate = reader["skipifolderdate"].ToString();
    useTempFile = reader["useTempFile"].ToString();
    password = reader["password"].ToString();
}

В приведенном выше коде delete_existing всегда 1 или 0 в БД. Я прочитал в MSDN, что Convert.ToBoolean() не принимает 1 или 0 как действительный ввод. Он принимает только истину или ложь. Есть ли альтернативный способ преобразования значения DB в bool? Или мне нужно сделать это за пределами SqlDataReader?

Кроме того, я не могу изменить значения DB, поэтому, пожалуйста, не отвечайте, говоря: "Измените значения DB от 1 до 0 на true и false".

Спасибо!

Ответ 1

Если тип delete_existing является типом sqlserver 'bit', вы можете сделать:

var i = reader.GetOrdinal("delete_existing"); // Get the field position
deleteExisting = reader.GetBoolean(i);

или (но он сработает, если delete_existing может быть DBNull)

deleteExisting = (bool)reader["delete_existing"];

или лучше, это одно ниже DBNull proof и возвращает false, если столбец DBNull

deleteExisting = reader["delete_existing"] as bool? ?? false;

В противном случае, если тип базы данных int:

deleteExisting = (reader["delete_existing"] as int? == 1) ? true : false;

или если это varchar

deleteExisting = (reader["delete_existing"] as string == "1") ? true : false;

Ответ 2

Литейные работы: myVar = (bool) dataReader [ "myColumn" ];

Ответ 3

Как насчет этого?

deleteExisting = (reader["delete_existing"] as int?) == 1;

Boolean, вероятно, является упрощенным типом преобразования. Здесь версия "Y", "N":

deleteExisting = string.Equals(reader["delete_existing"] as string, "Y", StringComparision.OrdinalIgnoreCase);

Ответ 4

Если вы используете CASE в SELECT и хотите использовать GetBoolean, используйте CAST для изменения столбца на бит перед чтением.

Например,

SELECT CAST((CASE WHEN [Condition] THEN 1 ELSE 0 END) as bit) FROM Table_Name

то вы можете использовать

reader.GetBoolean(0)

Ответ 5

deleteExisting = reader.GetBoolean(reader["delete_existing"]);