我正在使用odp OracleParameter构造函数:

public OracleParameter(string parameterName, object obj);


当我将不同类型的对象作为int或DateTime传递时,它可以正常工作。
但是,当我像这样使用布尔值时:

new OracleParameter("paramName", true)


它崩溃并带有“ System.ArgumentException”。

为什么这不适用于布尔值?
是否存在不起作用的已知类型?

我正在使用Oracle ManagedDataAccess.dll v4.121.2.0

最佳答案

Oracle不支持将bool值用作其列的DataType。 PL / SQL是另一回事。

首先,您必须检查Oracle中bool字段/参数的数据类型。

如果类似于NUMBER,请使用以下代码:

new OracleParameter("paramName", OracleDbType.Int16, 1);


这里的第三个参数是NUMBER值的大小。

正如您在评论中提到的,您可以使用以下constructor

public OracleParameter(string parameterName, OracleDbType type, object obj,
   ParameterDirection direction);


这使您可以跳过定义大小。



否则我将其转换为NUMBER,因为OracleDbType枚举不包含BOOLEAN的值。

创建新的Oracle参数时,我总是指定OracleDbType。它使事情更明确,并防止出现此类错误。

10-04 11:17