【问题标题】:OracleCommand cannot convert 0 to booleanOracleCommand 无法将 0 转换为布尔值
【发布时间】:2013-11-30 04:28:03
【问题描述】:

我收到的指定演员表无效。当我执行以下代码时:


incident.InjuryPM = Convert.IsDBNull(reader["CAD_INJ_TIME_PM"]) ? false : Convert.ToBoolean(reader["CAD_INJ_TIME_PM"]);


  • incident.InjuryPM 属性是布尔类型。
  • CAD_INJ_TIME_PM 的类型是 VARCHAR2(2 字节)。
  • CAD_INJ_TIME_PM 的值为“0”。
  • 阅读器的类型为 OracleDataReader

我对 Oracle 11g 很陌生,所以也许我遗漏了一些东西。谢谢

【问题讨论】:

  • 其实有很多来源比使用 RAW ado.net 管道是危险的。考虑使用一些微操作来删除它,因为明天你将面临另一个问题,然后又是另一个问题,依此类推......

标签: c# oracle11g


【解决方案1】:

在 C# Convert.ToBoolean() 中,不接受字符串“0”或“1”,只接受“true”或“false”的变体。因此,如果您有一个 varchar(2) 字符串作为列类型,您可能需要先转换为 int:

Convert.ToBoolean(Convert.ToInt32(reader["CAD_INJ_TIME_PM"]))

【讨论】:

  • 我确实尝试将 reader["CAD_INJ_TIME_PM"] 设为 int?它返回 Null
  • @Jesse,使用as int 是行不通的。 Int32 类是一个值类型。
  • @Jesse 此外,由于列的实际类型是字符串,因此您需要 Convert 或 int.Parse 将其转换为整数值。你不能简单地施放它。
【解决方案2】:

我很确定您正在寻找这个:

reader.IsDbNull(idx) ? false : Convert.ToBoolean(Convert.ToInt32(reader[idx]));

其中idx 是您要查找的字段的索引。

【讨论】:

  • 我使用的 Reader 是 OracleDataReader。我没有看到 GetBoolean 方法。
  • @Jesse,根据您对数据字段基础值的问题中的更新,您还需要先将其转换为Int32。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多