【发布时间】:2014-01-28 02:34:43
【问题描述】:
我需要在 Oracle 数据库中插入一个 ulong(即 UInt64)号码,但我遇到了一个 ArgumentException。我将它插入到NUMBER 列中,我向自己保证应该能够存储从 0 到 2^64-1 的任何数字。
这是一个重现错误的最小示例:
// First create the following table:
//
// CREATE TABLE SampleTable (SampleColumn NUMBER)
//
using (var dbConnection = new OracleConnection("..."))
{
ulong valueToInsert = 123;
OracleCommand command = dbConnection.CreateCommand();
command.CommandText = @"INSERT INTO SampleTable (SampleColumn) VALUES (:SampleColumn)";
command.Parameters.Add("SampleColumn", valueToInsert);
command.ExecuteNonQuery();
}
如果valueToInsert 是任何其他整数类型(包括long),这段代码就可以正常工作,但是当我尝试使用ulong 时,我收到以下错误:
System.ArgumentException was unhandled by user code
HResult=-2147024809
Message=Value does not fall within the expected range.
Source=Oracle.DataAccess
StackTrace:
at Oracle.DataAccess.Client.OracleParameter..ctor(String parameterName, Object obj)
at Oracle.DataAccess.Client.OracleParameterCollection.Add(String name, Object val)
为什么会这样?
附:我尝试过同时使用 Oracle.DataAccess 2.112.1.2 和 Oracle.ManagedDataAccess 4.212.1.0。
【问题讨论】:
-
请显示表架构声明。
-
在 C# 注释中给出,但这里是:
CREATE TABLE SampleTable (SampleColumn NUMBER) -
如果在参数调用中明确设置数据类型会怎样?
-
嗯,看来你正在做某事;似乎没有 OracleDbType.UInt64,只有 OracleDbType.Int64。我不确定这里适合使用哪种 OracleDbType。
标签: oracle oracleclient odac argumentexception ulong