C#SQL命令未正确结束



下面的代码可以工作,但它不会在数据库中提交更改。

cnn.Open();
OleDbCommand cmd = cnn.CreateCommand();
cmd.Parameters.Add(new OleDbParameter(":var1", ds.Tables[0].Rows[i]["USERNAME"].ToString()));
cmd.Parameters.Add(new OleDbParameter(":var2","1"));
cmd.CommandText = "UPDATE JCOLEMAN.IBI_TEST SET FLAG=:var2 WHERE USERNAME=:var1";
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cnn.Close();

我将代码更改为下面的代码段,并得到错误

附加信息:ORA-00933:SQL命令未正确结束

代码:

cnn.Open();
OleDbCommand cmd = cnn.CreateCommand();
cmd.Parameters.Add(new OleDbParameter(":var1", ds.Tables[0].Rows[i]["USERNAME"].ToString()));
cmd.Parameters.Add(new OleDbParameter(":var2","1"));
cmd.CommandText = "UPDATE JCOLEMAN.IBI_TEST SET FLAG=:var2 WHERE USERNAME=:var1; commit";
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cnn.Close();

所以我以为我忘了最后一个";"(如下所示),但这也会带来问题。有人能帮我弄清楚为什么我不能获得接受commit命令的代码吗?

cmd.CommandText = "UPDATE JCOLEMAN.IBI_TEST SET FLAG=:var2 WHERE USERNAME=:var1; commit;";

之所以会发生这种情况,是因为在Oracle中必须将BEGIN END;块来表示语句。

在这种情况下,您应该在命令中使用事务,如:

cnn.Open();
OleDbTransaction transaction = cnn.BeginTransaction();
OleDbCommand cmd = cnn.CreateCommand();
cmd.Transaction = transaction;
cmd.Parameters.Add(new OleDbParameter(":var1", ds.Tables[0].Rows[i]["USERNAME"].ToString()));
cmd.Parameters.Add(new OleDbParameter(":var2","1"));
cmd.CommandText = "UPDATE JCOLEMAN.IBI_TEST SET FLAG=:var2 WHERE USERNAME=:var1";
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
transaction.Commit();
cnn.Close();

问题根本不在于提交,而是使用了下面的(:var2,1)行:

cmd.Parameters.Add(new OleDbParameter(":var2","1"));

我删除了它,用硬编码的标志"1"替换了变量,它就像一个符咒!

为了将来参考,下面的代码现在可以正常工作了。

                cnn.Open();
                OleDbTransaction transaction = cnn.BeginTransaction();
                OleDbCommand cmd = cnn.CreateCommand();
                cmd.Transaction = transaction;
                cmd.Parameters.Add(new OleDbParameter(":var1", ds.Tables[0].Rows[i]["USERNAME"].ToString()));
                cmd.CommandText = "UPDATE JCOLEMAN.IBI_TEST SET FLAG=1 WHERE USERNAME=:var1";
                cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                transaction.Commit();
                cnn.Close();

谢谢@Henrique把我推向了正确的方向。

相关内容

  • 没有找到相关文章

最新更新