2017-07-19 2 views
0

Ich schreibe ein Programm mit C#, um automatisch Daten in eine Navision-Datenbank über ODBC einzufügen. Ich fülle ein DataTable-Objekt, indem ich die OdbcDataAdapter.Fill() Methode aufruft. Nachdem ich einige Werte geändert habe, möchte ich die Original-DB mit OdbcDataAdapter.Update() aktualisieren. Dies führt jedoch immer zu:C# - OdbcDataAdapter.Update() führt zu Syntaxfehler

FEHLER [42000] [Simba] [SimbaMotor ODBC-Treiber] UPDATE Item SET Location =? WHERE ((Nr. < < ??? >> =?) UND ((? = 1 UND Ort ist NULL) ODER (Standort =?))) Fehler [42000] [Simba] [SimbaEngine ODBC-Treiber] Syntaxfehler.

Dies ist der Code:

static void Main(string[] args) 
    { 
     DataTable Item = new DataTable(); 

     OdbcConnection connection = new OdbcConnection("DSN=Navision Frank-Backup"); 

     connection.Open(); 
     OdbcDataAdapter adapter = new OdbcDataAdapter(); 
     adapter.SelectCommand = new OdbcCommand("select \"No.\", \"Location\" from Item where \"No.\" = 'AA0182'", connection); 
     OdbcCommandBuilder builder = new OdbcCommandBuilder(adapter); 

     adapter.Fill(Item); 

     Item.Rows[0].BeginEdit(); 
     Item.Rows[0]["Location"] = "SW"; 
     Item.Rows[0].EndEdit(); 

     adapter.UpdateCommand = builder.GetUpdateCommand(); 
     adapter.Update(Item); 
    } 

Ich bin der Hoffnung, jemand mir mit, dass helfen kann.

Edit: Ich habe gerade herausgefunden, dass, wenn ich den Update-Befehl manuell eingestellt,

adapter.UpdateCommand = new OdbcCommand("update Item set Location = 'SW' where \"No.\" = 'AA0182'"); 

mit Es funktioniert völlig in Ordnung. Allerdings kann ich diese Methode nicht verwenden, da ich mehrere Datensätze ändern muss.

+0

konnte nicht die angegebene Abfrage 'UPDATE Artikel SET ...' in der mitgelieferten Code finden! Bist du sicher, dass du den richtigen Code mit der Frage hinzugefügt hast? –

+0

Ja, das ist genau der Code, den ich gerade benutzt habe. – tubu

+0

Sie haben einen Trigger auf dem Tisch erstellt? Sind Sie sicher, dass der Fehler nur auf diesen Code zurückzuführen ist? –

Antwort

0

Ich fand die Lösung alleine. Der Fehler ist aufgetreten, weil einige Spaltennamen in Anführungszeichen eingeschlossen sind. Ich musste die Eigenschaften QuotePrefix und QuoteSuffix des Befehlsgenerators festlegen.

Der folgende Code funktioniert:

 static void Main(string[] args) 
    { 
     DataTable Item = new DataTable(); 

     OdbcConnection connection = new OdbcConnection("DSN=Navision Frank-Backup"); 

     connection.Open(); 
     OdbcDataAdapter adapter = new OdbcDataAdapter(); 
     adapter.SelectCommand = new OdbcCommand("select \"No.\", Location from Item where \"No.\" = 'AA0182'", connection); 
     OdbcCommandBuilder builder = new OdbcCommandBuilder(adapter); 
     builder.QuotePrefix = builder.QuoteSuffix = "\""; 

     adapter.Fill(Item); 

     Item.Rows[0].BeginEdit(); 
     Item.Rows[0]["Location"] = "TC"; 
     Item.Rows[0].EndEdit(); 

     adapter.UpdateCommand = builder.GetUpdateCommand(); 
     adapter.Update(Item); 
     connection.Close(); 
    }