从DB读取布尔值?

时间:2011-05-09 19:49:08

标签: c# .net sqldatareader

在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”。

谢谢!

5 个答案:

答案 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"]);