Чтение логических значений из БД?
В С#, используя 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"]);