从DB读取布尔值?

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

谢谢!

如果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"]; 

或者更好,这一个是DBNullcertificate,如果列是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; 

投射作品:myVar =(bool)dataReader [“myColumn”];

这个怎么样?

 deleteExisting = (reader["delete_existing"] as int?) == 1; 

Boolean可能是将某些内容转换为的简单类型。 这是’Y’,’N’版本:

 deleteExisting = string.Equals(reader["delete_existing"] as string, "Y", StringComparision.OrdinalIgnoreCase); 

如果在SELECT中使用CASE并希望使用GetBoolean,则在读取之前使用CAST将列更改为位。

例如:

 SELECT CAST((CASE WHEN [Condition] THEN 1 ELSE 0 END) as bit) FROM Table_Name 

那你可以用

 reader.GetBoolean(0) 
 deleteExisting = reader.GetBoolean(reader["delete_existing"]);