ODP净甲骨文参数的构造函数与Boolean对象

问题描述 投票:2回答:2

我使用的ODP的OracleParameter构造函数:

public OracleParameter(string parameterName, object obj);

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

new OracleParameter("paramName", true)

它有一个“System.ArgumentException”崩溃。

为什么这不是布尔值工作?是否有已知类型的地方,这并不工作?

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

c# oracle odp.net
2个回答
1
投票

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

你首先要检查你的Oracle场bool /参数的数据类型。

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

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

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

正如你在评论中提到,您可以使用此qazxsw POI:

constructor

它允许你跳过定义大小。


否则,我将它转换为public OracleParameter(string parameterName, OracleDbType type, object obj, ParameterDirection direction); 因为NUMBER枚举不包含OracleDbType值。

创建一个新的Oracle参数时,我总是指定OracleDbType。这使事情变得更加明确和防止的那种错误。


0
投票

我不打算进入冗余解释Oracle数据库。但是希望你明白,Oracle类型不natch .NET类型如SQL Server类型做匹配。

例如,为了适应BOOLEAN值到Oracle,您需要创建列int。然而,这种尺寸比NUMBER(10)更大,当你做int返回Select col1. . .。所以,你需要做的long“适合”你的数据到Convert.ToInt32(reader["col1"])在应用程序中。

布尔这里同样的事情。目前还没有确切的类型。有时,人们储存假布尔在int,甚至Number(1)为“Y” /“N”(例如)。所以,如果你的数据库有一些数字数据类型,只是做

Varchar2(1)

它会给你bool val = GetVal(); var p = new OracleParameter("paramName", Convert.ToInt32(val)) 1true0

© www.soinside.com 2019 - 2024. All rights reserved.