Der folgende Code funktioniert, jedoch wird die Änderung in der Datenbank nicht festgeschrieben.C# SQL-Befehl nicht ordnungsgemäß beendet
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();
änderte ich den Code an das Snippet unten und erhalten den Fehler
Zusätzliche Informationen: ORA-00933: SQL-Befehl beendet nicht richtig
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();
Also dachte ich, ich vergaß das letzte ";" (wie unten zu sehen), aber das verursacht proble ms auch. Kann mir jemand helfen herauszufinden, warum ich den Code nicht dazu bringen kann, den Commit-Befehl zu akzeptieren?
cmd.CommandText = "UPDATE JCOLEMAN.IBI_TEST SET FLAG=:var2 WHERE USERNAME=:var1; commit;";
Haben Sie versucht, eine [OleDbTransaction] (https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbtransaction (v = vs.110) .aspx) direkt anstelle der Anhängen der 'commit' als Text? Wenn dies Oracle ist, ist es möglicherweise besser, ein Oracle-spezifisches ADO.NET-db-Objekt anstelle des OleDb-Objekts zu verwenden, das möglicherweise das Problem verursacht. – Igor
Ich würde eine Oracle-spezifische ado.net-Bibliothek wie [Oracle Data Provider für .NET] (http://www.oracle.com/technetwork/topics/dotnet/index-085163.html), NuGet install = 'Install- Paket Oracle.ManagedDataAccess'. Dies würde Ihre Befehle wahrscheinlich besser in eine geeignete Oracle-Plattformsyntax als Ole übersetzen. – Igor
Ich dachte, dass OleDb benannte Parameter nicht verwendet hat, was bedeutet, dass die Parameter in der Indexreihenfolge sein müssen. Versuchen Sie, die zwei Parameterzeilen umzuschalten. – LarsTech