2017-04-27 70 views
1

我使用的ODP的OracleParameter构造:ODP净甲骨文参数的构造函数与Boolean对象

public OracleParameter(string parameterName, object obj); 

当我通过不同类型的像int或datetime对象,它工作正常。 但是当我使用bool的是这样的:

new OracleParameter("paramName", true) 

其与 “System.ArgumentException” 崩溃。

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

我使用的是Oracle ManagedDataAccess.dll v4.121.2.0

+0

你在输入值的构造函数中做了什么? – WhileTrueSleep

+0

这不是我自己的构造函数。它来自odp .NET [链接](https://docs.oracle.com/database/121/ODPNT/OracleParameterClass.htm#i1011308) –

回答

0

Oracle不支持bool值的数据类型为它的列(PL/SQL是另一回事)。

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

如果它像NUMBER使用下面的代码:

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

这里第三paremeter是NUMBER值的大小。

,正如你在评论mentionned,您可以使用此constructor

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

,它允许你跳过定义大小。


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

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

+0

谢谢你,这是我需要的信息的一部分。我在哪里得到这些信息,而不是绊倒他们?有没有其他类型的地方,这不起作用? –

+0

@DanF至于其他类型,这不起作用,我现在想不出任何权利。顺便指定所有参数的类型是一种很好的做法,除了bool类型之外,大多数都是非常明显的。如果这解决了您的问题,请将答案标记为已接受。谢谢。 – Gilles

+0

您发布了错误的构造函数。一个需要ist这一个[链接](https://docs.oracle.com/database/121/ODPNT/OracleParameterClass.htm#i1011428) –