C# 更新查询从.net代码返回0行。从SQL Developer返回1行

C# 更新查询从.net代码返回0行。从SQL Developer返回1行,c#,sql,.net,oracle-sqldeveloper,oracle12c,C#,Sql,.net,Oracle Sqldeveloper,Oracle12c,我正在从C代码运行更新查询。同一查询更新Oracle SQL Developer中的1行。但是,更新代码中的0行 我正在使用: Oracle数据库12c、.Net Framework 4.0、Oracle.ManagedDataAccess、用于数据库连接的LDAP 代码: OracleConnection appConnection; appConnection.ConnectionString = "User Id=XXX;Password=XXX;Data Source=XXX"; app

我正在从C代码运行更新查询。同一查询更新Oracle SQL Developer中的1行。但是,更新代码中的0行

我正在使用: Oracle数据库12c、.Net Framework 4.0、Oracle.ManagedDataAccess、用于数据库连接的LDAP

代码:

OracleConnection appConnection;
appConnection.ConnectionString = "User Id=XXX;Password=XXX;Data Source=XXX";
appConnection.Open();

OracleTransaction tran = appConnection.BeginTransaction();

string query = "UPDATE TEST_TABLE SET COMMENT =:comment WHERE NAME =:name"
OracleCommand cmd= con.appConnection.CreateCommand();
cmd.CommandText = query;

cmd.Parameters.Clear();
cmd.Parameters.Add(new OracleParameter(":name", OracleDbType.Varchar2));
cmd.Parameters[":name"].Value = "New Name";
cmd.Parameters.Add(new OracleParameter(":comment", OracleDbType.Varchar2));
cmd.Parameters[":comment"].Value = "New Comment";

var val = cmd.ExecuteNonQuery();
tran.commit()
如果更新了一行,ExecuteOnQuery应返回值1。现在输出为0。

请看这篇有趣的文章:

它需要打开命名参数

OracleCommand cmd = new OracleCommand(query, con.appConnection) 
{ 
  CommandType = CommandType.Text, 
  BindByName = true 
};

否则,参数受位置约束。由于您在查询中的参数位置与添加到命令中的参数位置不同,因此无法工作。

您是否验证了该行是否在数据库中实际更新?这可能与设置了名为
cmd
的命令,同时执行名为
cmdUpdateGen
的命令有关,我认为在设置参数时应该省略冒号
。(
cmd.Parameters[“name”].Value=…
)很抱歉出现此错误。我已将
cmdUpdateGen
更正为
cmd
@StefanSteinegger是否有省略冒号
的具体原因?谢谢!卡了两天。