C#Oracle 9i-使用参数不工作更新双值
我使用的是.net 4.5.1,windows命令行应用程序使用的是Oracle.DataAccess(ODP.net)x86 2.122.1.0 其中C#Oracle 9i-使用参数不工作更新双值,c#,.net,oracle,oracle9i,C#,.net,Oracle,Oracle9i,我使用的是.net 4.5.1,windows命令行应用程序使用的是Oracle.DataAccess(ODP.net)x86 2.122.1.0 其中tran是Oracle数据库事务 OracleCommand updCmd = new OracleCommand("update mytable set price =0.5 where anseq = :p_id", tran.Connection); updCmd.Transaction = tran; updCmd.Par
tran
是Oracle数据库事务
OracleCommand updCmd =
new OracleCommand("update mytable set price =0.5 where anseq = :p_id", tran.Connection);
updCmd.Transaction = tran;
updCmd.Parameters.Add("p_id", itemId);
var count= updCmd.ExecuteNonQuery();
计数
==1
鉴于:
OracleCommand updCmd =
new OracleCommand("update mytable set price =:p_price where anseq = :p_id", tran.Connection);
updCmd.Transaction = tran;
updCmd.Parameters.Add("p_id", itemId);
updCmd.Parameters.Add("p_price", 0.5);
var count= updCmd.ExecuteNonQuery();
计数
==0
即使显式设置参数类型:
updCmd.Parameters.Add(
new OracleParameter("p_price",
OracleDbType.Double,
22, System.Data.ParameterDirection.Input,
false, 16, 2, "myprice",
System.Data.DataRowVersion.Default, 0.5));
结果没有更新任何记录
以前有没有人遇到过这个问题,或者知道是什么原因造成的
TIA好的,弗洛林强调了这个问题,这要归功于他 我做了更多的挖掘,发现问题是由设计引起的
OracleCommand
对象有一个BindByName
属性,默认为false
如本文所示,ODP.NET驱动程序默认完全忽略参数名,除非BindByName
属性为true
正如Florin所指出的那样,我的问题的答案是改变参数的添加顺序——或者——正如我随后发现的设置
BindByName=true
您是否尝试过改变参数的顺序。添加?先添加价格,然后添加itemId?不,我为什么要这样做!!!!但它当然有效。如果你知道原因,请以回复的形式发布,很高兴这对你有帮助。另外,在pl/sql中,顺序或绑定非常重要。换句话说,如果不按名称绑定,则按顺序绑定。您使用的是Oracle.DataAccess(ODP.NET)x86的2.112.1.0版还是2.122.1.0版?当使用Oracle.DataAccess(ODP.NET)x86 2.112.1.0连接到Oracle 9i时,它抛出异常,指出不再支持Oracle 9i版本。你能告诉我你是怎么做到的吗?