2016-05-08 25 views
2

Ich habe eine Access 2000 (* .mdb) Datei, die von OleDb Queries bearbeitet wird.C# - UPDATE SET WHERE Abfrageprobleme (OleDb)

Im Moment würde Ich mag eine Tabelle in eine Datenbank UPDATE, die nur zwei Spalten, wie Sie im Bild unten

enter image description here

Jede Spalte dieser Datenbank sehen können, ist vom Typ String

Dieser Code, thows ein OleDbException:

OleDbConnection con; 
OleDbCommand cmd; 

private void UpdateExistingRow() 
{ 
    string strProvider = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + path + ";" 
    string strSql = "UPDATE OPTIONS SET VAL='C:\\Edo\\Desktop\\Logo.png' WHERE IMP='LogoPath'"; 
    con = new OleDbConnection(strProvider); 
    cmd = new OleDbCommand(strSql, con); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
} 

Es scheint einfach, ich weiß, aber ich bin nicht in der Lage, eine Lösung zu finden.
Vielen Dank.

+1

Wie kann es sein? Ist es ein Tippfehler, den Sie am Ende von Zeile 4 vermissen? 'String strSql = 'UPDATE OPTIONS SET VAL =' C: \\ Edo \\ Desktop \\ Logo.png 'WHERE IMP =' LogoPath '; ' –

+0

Sorry, ich habe vergessen, es in diese Frage zu stellen! –

+0

@ PhamX.Bach Ich dachte das Gleiche. Selbst die Ausnahme fehlt ein "Der eigentliche Code würde nicht kompilieren, wenn die" fehlte, also vielleicht ist es eine fehlende 'stattdessen –

Antwort

2

Die Antwort war nicht so offensichtlich, wie wir ursprünglich dachten, aber ich glaube, ich fand es: IMP is a reserved keyword in Access SQL (oder wahrscheinlicher: ein Operator). Seltsamerweise obwohl it doesn't show up in the JET documentation.

So müssen Sie die DB-Engine stellen Sie sicher weiß, dass es ein Spaltenname von Ihrem colum Namen mit [] Flucht:

UPDATE [OPTIONS] SET VAL='C:\\Edo\\Desktop\\Logo.png' WHERE [IMP] = 'LogoPath' 
+0

Ich weiß wirklich nicht, wie ich Ihnen danken kann. Perfekte und detaillierte Antwort. –