我正在从 C# 代码运行更新查询。同一查询从 Oracle SQL Developer 更新 1 行。但是,从代码中更新 0 行。
我正在使用: Oracle Database 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()
如果一行已更新,则 ExecuteNonQuery 应返回值 1。现在输出为 0。
最佳答案
查看这个有趣的帖子:https://www.codeproject.com/Articles/208176/Gotcha-sharp-Using-Named-Parameters-with-Oracl
需要打开命名参数。
OracleCommand cmd = new OracleCommand(query, con.appConnection)
{
CommandType = CommandType.Text,
BindByName = true
};
否则,参数将受位置约束。由于查询中的参数位置与添加到命令中的参数位置不同,因此它不起作用。
关于c# - 更新查询从 .net 代码返回 0 行。从 SQL Developer 返回 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49648087/