C# 错误:';ORA-01438:大于此列允许的指定精度的值';故障因素:';空';详情:org.kxml2.kdom。Node@99c0b9c
我正在尝试使用c#更新oracle表记录。当我执行代码SoapFault-faultcode:'a:InternalServiceFault'faultstring:'ORA-01438:值大于此列'faultactor:'null'允许的指定精度详细信息:org.kxml2.kdom时,我遇到此错误。Node@99c0b9c. 这是我在服务端使用的代码:C# 错误:';ORA-01438:大于此列允许的指定精度的值';故障因素:';空';详情:org.kxml2.kdom。Node@99c0b9c,c#,oracle,C#,Oracle,我正在尝试使用c#更新oracle表记录。当我执行代码SoapFault-faultcode:'a:InternalServiceFault'faultstring:'ORA-01438:值大于此列'faultactor:'null'允许的指定精度详细信息:org.kxml2.kdom时,我遇到此错误。Node@99c0b9c. 这是我在服务端使用的代码: [OperationContract] public int pushData(string CustomObjects) { Li
[OperationContract]
public int pushData(string CustomObjects)
{
List<CustomObject> myDeserializedObjList = (List<CustomObject>)Newtonsoft.Json.JsonConvert.DeserializeObject(CustomObjects,
typeof(List<CustomObject>));
string constr = "my connection string";
int rowid = 0;
using(OracleConnection con = new OracleConnection(constr)){
con.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
foreach (CustomObject element in myDeserializedObjList)
{
int num = element.num;
string mydate = element.mydate;
long num2 = element.num2;
string user = element.user;
string sqlStatement= "UPDATE CustomObjectS SET num = :num,
mydate=:to_date(:mydate, 'YYYY/MM/DD HH:MI:SS'), num2=:num2, user=:user WHERE num =:num";
OracleTransaction myTrans;
// Start a local transaction
myTrans = con.BeginTransaction();
// Assign transaction object for a pending local transaction
cmd.Transaction = myTrans;
cmd.CommandText=sqlStatement;
cmd.Parameters.Add(new OracleParameter("num", num));
cmd.Parameters.Add(new OracleParameter("user", user));
cmd.Parameters.Add(new OracleParameter("num2", num2));
cmd.Parameters.Add(new OracleParameter("mydate", mydate));
cmd.Parameters[3].Value = mydate;
rowid= cmd.ExecuteNonQuery();
myTrans.Commit();
}
}
return rowid;
}
[运营合同]
公共int pushData(字符串自定义对象)
{
List myDeserializedObjList=(List)Newtonsoft.Json.JsonConvert.DeserializeObject(CustomObjects,
(列表)的类型;
string constr=“我的连接字符串”;
int-rowid=0;
使用(OracleConnection con=新的OracleConnection(cont)){
con.Open();
OracleCommand cmd=新的OracleCommand();
cmd.Connection=con;
cmd.CommandType=CommandType.Text;
foreach(myDeserializedObjList中的CustomObject元素)
{
int num=element.num;
字符串mydate=element.mydate;
长num2=element.num2;
字符串user=element.user;
string sqlStatement=“更新自定义对象集num=:num,
mydate=:to_date(:mydate,'yyyyy/MM/DD HH:MI:SS'),num2=:num2,user=:user,其中num=:num”;
oracletrans;
//启动本地事务
myTrans=con.BeginTransaction();
//为挂起的本地事务分配事务对象
cmd.Transaction=myTrans;
cmd.CommandText=sqlStatement;
Add(新的OracleParameter(“num”,num));
cmd.Parameters.Add(新的OracleParameter(“user”,user));
添加(新的OracleParameter(“num2”,num2));
Add(新的OracleParameter(“mydate”,mydate));
cmd.Parameters[3]。Value=mydate;
rowid=cmd.ExecuteNonQuery();
myTrans.Commit();
}
}
返回rowid;
}
你能帮忙吗
ORA-01438:大于指定精度的值允许此操作
纵队
此错误在INSERT或UPDATE语句期间出现。这意味着,您试图为一列指定的值超出了为此列定义的精度。一个简单的例子:
CREATE TABLE abc1(
x NUMBER(5)
);
INSERT INTO abc1( x ) values (123456 );
ORA-01438: value larger than specified precision allowed for this column
INSERT INTO abc1( x ) values (12345 );
1 row inserted.
您可以做什么:
- 为列指定较小的精度值(不要指定太大的数字)
- 更改表的定义,以允许列中的数字精度更高。这可以通过ALTERTABLE语句完成
ORA-01438:大于指定精度的值允许此操作 纵队 此错误在INSERT或UPDATE语句期间出现。这意味着,您试图为一列指定的值超出了为此列定义的精度。
一个简单的例子:
CREATE TABLE abc1(
x NUMBER(5)
);
INSERT INTO abc1( x ) values (123456 );
ORA-01438: value larger than specified precision allowed for this column
INSERT INTO abc1( x ) values (12345 );
1 row inserted.
您可以做什么:
- 为列指定较小的精度值(不要指定太大的数字)
- 更改表的定义,以允许列中的数字精度更高。这可以通过ALTERTABLE语句完成
CustomObjectS
的定义是什么?num
和num2
的数据类型(在数据库中)是什么?它们的类型是数字CustomObjectS
的定义是什么?num
和num2
的数据类型(在数据库中)是什么?它们的类型是数字