我正在使用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。它使事情更明确,并防止出现此类错误。