Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Oracle 9i-使用参数不工作更新双值_C#_.net_Oracle_Oracle9i - Fatal编程技术网

C#Oracle 9i-使用参数不工作更新双值

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

我使用的是.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.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版本。你能告诉我你是怎么做到的吗?