在C#中,使用SqlDataReader,有没有办法从DB读取布尔值?
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在DB中始终为1或0。我在MSDN上读到,Convert.ToBoolean()不接受1或0作为有效输入。它只接受真或假。有没有其他方法将DB值转换为bool?或者我需要在SqlDataReader之外执行此操作吗?
另外,我无法更改数据库值,所以请不要回答“将数据库值从1和0更改为true和false”。
谢谢!
答案 0 :(得分:36)
如果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
DBNull
证明并返回 false
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;
答案 1 :(得分:3)
施法作品: myVar =(bool)dataReader [“myColumn”];
答案 2 :(得分:1)
这个怎么样?
deleteExisting = (reader["delete_existing"] as int?) == 1;
布尔值可能是将某些内容转换为的简单类型。这是'Y','N'版本:
deleteExisting = string.Equals(reader["delete_existing"] as string, "Y", StringComparision.OrdinalIgnoreCase);
答案 3 :(得分:1)
如果您在SELECT中使用CASE并想使用GetBoolean,那么在阅读之前使用CAST将列更改为位。
例如:
SELECT CAST((CASE WHEN [Condition] THEN 1 ELSE 0 END) as bit) FROM Table_Name
然后你可以使用
reader.GetBoolean(0)
答案 4 :(得分:-1)
deleteExisting = reader.GetBoolean(reader["delete_existing"]);