我需要在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)
为什么会这样?
P.S。我尝试过使用Oracle.DataAccess 2.112.1.2和Oracle.ManagedDataAccess 4.212.1.0。
答案 0 :(得分:2)
允许不同的C#类型映射到不同的OracleDbType
;在this question的答案中显示了一个好的列表。
事实证明没有OracleDbType.UInt64
,但我无法解释原因。无论如何,我的问题可以通过在插入之前将参数转换为decimal
类型来解决:
command.Parameters.Add("SampleColumn", (decimal)(valueToInsert));
这使其成为OracleDbType.Decimal
,任何ulong
号码都可转换为。{/ p>