Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有布尔对象的odp net oracle参数构造函数_C#_Oracle_Odp.net - Fatal编程技术网

C# 带有布尔对象的odp net oracle参数构造函数

C# 带有布尔对象的odp net oracle参数构造函数,c#,oracle,odp.net,C#,Oracle,Odp.net,我正在使用odp OracleParameter构造函数: public OracleParameter(string parameterName, object obj); 当我将不同的类型作为int或DateTime之类的对象传递时,效果很好。 但是,当我像这样使用bool时: new OracleParameter("paramName", true) 它因“System.ArgumentException”而崩溃 为什么这不适用于布尔值? 是否有已知的类型不起作用 我正在使用Orac

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

public OracleParameter(string parameterName, object obj);
当我将不同的类型作为int或DateTime之类的对象传递时,效果很好。 但是,当我像这样使用bool时:

new OracleParameter("paramName", true)
它因“System.ArgumentException”而崩溃

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


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

Oracle不支持将
bool
值作为其列的数据类型。PL/SQL是另一回事

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

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

new OracleParameter("paramName", OracleDbType.Int16, 1);  
这里第三个参数是
数值的大小

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

这允许您跳过定义大小


否则,我会将其转换为
NUMBER
,因为
OracleDbType
enum不包含
BOOLEAN
的值


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

我不打算讨论Oracle DB。但我想让您了解Oracle类型与Sql Server类型不匹配

例如,要将
int
值放入Oracle,需要创建列
NUMBER(10)
。但是,此大小大于
int
,当您选择
列时返回
long
。因此,您需要执行
Convert.ToInt32(读卡器[“col1”])
以将数据“适配”到应用程序中的
int

这里的布尔值也是一样。没有确切的类型。有时人们在
Number(1)
中存储假布尔值,甚至在
Varchar2(1)
中存储假布尔值为“Y”/“N”(例如)。因此,如果您的数据库有一些数字数据类型,只需执行以下操作

bool val = GetVal();
var p = new OracleParameter("paramName", Convert.ToInt32(val))

对于
true
它将为您提供
1
,对于
false它将为您提供
0

您在构造函数中使用输入值做什么?它不是我自己的构造函数。感谢你,这是我需要的信息的一部分。我从哪里得到这些信息,而不是绊倒在他们身上?还有其他类型的不起作用吗?@DanF至于其他类型的不起作用,我现在想不出任何类型。顺便说一句,为所有参数指定类型是一个很好的实践,除了bool类型之外,大多数参数都是自解释的。如果这解决了您的问题,请将答案标记为已接受。谢谢。你贴错了构造器。所需的是this one@DanF,我当前仅在使用Out参数时才使用带方向参数的构造函数。否则,我将使用我在回答中为in参数发布的参数,尽管将带有direction参数的参数也用于in参数也没有坏处。我尝试了您发布的参数,但oracle文档将第三个int参数标记为size。这就是我使用另一个的原因。您发布的内容不适用于我的项目。也许我们使用不同的图书馆?
bool val = GetVal();
var p = new OracleParameter("paramName", Convert.ToInt32(val))