从DB读取布尔值?

Mr.*_*Ant 15 .net c# 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();
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,delete_existing在DB中始终为1或0.我在MSDN上读到,Convert.ToBoolean()不接受1或0作为有效输入.它只接受真或假.有没有其他方法将DB值转换为bool?或者我是否需要在SqlDataReader之外执行此操作?

另外,我无法更改数据库值,所以请不要回答"将数据库值从1和0更改为true和false".

谢谢!

Lar*_*rry 37

如果类型delete_existing是sqlserver'bit'类型,你可以这样做:

var i = reader.GetOrdinal("delete_existing"); // Get the field position
deleteExisting = reader.GetBoolean(i);
Run Code Online (Sandbox Code Playgroud)

或(但如果delete_existing可能会崩溃DBNull)

deleteExisting = (bool)reader["delete_existing"];
Run Code Online (Sandbox Code Playgroud)

或者更好,这一个是DBNull证明,如果列是,则返回falseDBNull

deleteExisting = reader["delete_existing"] as bool? ?? false;
Run Code Online (Sandbox Code Playgroud)

否则,如果数据库类型是int:

deleteExisting = (reader["delete_existing"] as int? == 1) ? true : false;
Run Code Online (Sandbox Code Playgroud)

或者如果是 varchar

deleteExisting = (reader["delete_existing"] as string == "1") ? true : false;
Run Code Online (Sandbox Code Playgroud)