C#:更新查询值没有反映在预期的oracle表
我试图用c#更新oracle表中的一些记录。我没有收到错误,但是当我查看了我想要更新的记录时,我发现这些记录仍然具有相同的旧值。要查看每个查询是否已成功执行,我已使用此行rowid= cmd.ExecuteNonQuery();
,它通过查询19583
返回受影响的行数。我得到的数字是我表格中的行数。C#:更新查询值没有反映在预期的oracle表
[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=mydate, 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", OracleDbType.Date));
cmd.Parameters[3].Value = mydate;
rowid= cmd.ExecuteNonQuery();
myTrans.Commit();
}
}
return rowid;
}
看起来像是用当前值更新行。尝试添加:
在查询中的参数名:
UPDATE CustomObjectS SET num = :num,
mydate=:mydate, num2=:num2, user=:user WHERE num = :num
另外,我会避免为列和参数使用完全相同的名称(可能会添加像“par”这样的前缀)。和'cmd.Parameters [3] .Value = mydate;'似乎不是一个好主意:一旦你添加了另一个参数,“mydate”的索引可能会改变......'cmd.Parameters.Add(new OracleParameter “mydate”,OracleDbType.Date))。Value = mydate;'可能是更好的方法。 –
谢谢你好像我们已经解决了一部分问题。现在,我收到了这个错误:SoapFault - faultcode:'a:InternalServiceFault'faultstring:'ORA-1843:not a valid month'faultactor:'null'detail:org.kxml2.kdom.Node @ 6c9cf70' –
@se我建议将'string mydate = element.mydate;'转换为DateTime并将其作为参数传递。类似于'DateTime mydate = DateTime.ParseExact(element.mydate,“
,我们在您DML字符串'“UPDATE CustomObjectS SET NUM = NUM,指明MyDate =指明MyDate,NUM2 = NUM2,用户=用户没有绑定变量WHERE num = num“'。你打算''更新CustomObjectS SET num =:num,mydate =:mydate,num2 =:num2,user =:user WHERE num =:num“'? (并且你不需要在where子句中设置'num =:num')。 – MT0