在C#中,使用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”。
谢谢!
@Laurent嗯...我宁愿选择第三种选择,因为有人可以在桌子上添加一列,然后很明显,应用程序会崩溃。但是,你能解释第二个选项到底发生了什么吗?我被“作为布尔?错误的”弄糊涂了。“特别是3?的... – 2011-05-09 19:56:57
第三种解决方案:我试图将读者[“delete_existing”]投给一个可为空的bool(bool?)。这样,如果字段包含DBNull.Value,则强制转换将失败并返回null。因为我宁愿变得错误,我正在使用?它将null转换为任何值(即:null ?? 45 = 45)。我使用了很多。 – Larry 2011-05-09 20:02:51
第二种解决方案:我正在对bool进行直接投射。如果该值不是布尔类型,这个将会抛出异常。例如,如果它是DBNull.Value。这就是为什么它应该与非空位数据库字段一起使用。只需选择一个适合您的需求^^ delete_existing btw的数据库类型是什么? – Larry 2011-05-09 20:08:13