Reputation: 332
The following code works, however it doesn't commit the change in the database.
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();
I changed the code to the snippet below and get the error
Additional information: ORA-00933: SQL command not properly ended
Code:
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();
So I thought I forgot the last ";"(as seen below) but that causes problems, too. Can anyone help me figure out why I can't get the code to accept the commit command?
cmd.CommandText = "UPDATE JCOLEMAN.IBI_TEST SET FLAG=:var2 WHERE USERNAME=:var1; commit;";
Upvotes: 0
Views: 652
Reputation: 332
The issue wasn't with the commit at all, it was with the use of the (:var2,1) line below:
cmd.Parameters.Add(new OleDbParameter(":var2","1"));
I removed it, replaced the variable with the hard coded flag '1' and it worked like a charm!
For future reference, the code below now works in place.
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();
Thank you @Henrique for pushing me in the right direction.
Upvotes: 0
Reputation: 610
This happens because in Oracle you must put BEGIN END; blocks to represent a statement.
In this case you should use a transaction in your command like:
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();
Upvotes: 1