2016-08-09 22 views
0

Ich habe die folgenden, die in Ordnung sein aussieht, aber aus irgendeinem Grund es wirft ORA-00936: missing expressionAusgabe läuft INSERT Befehl OleDbCommand in C#

... 
var query = "INSERT INTO MY_TABLE VALUES (@id, @filepath, @filename, @filesize, @md5)"; 

using (var insertCmd = new OleDbCommand(query, conn)) 
{ 
    insertCmd.CommandType = CommandType.Text; 
    insertCmd.Parameters.AddRange(new OleDbParameter[] 
    { 
     new OleDbParameter("@id", FindItemId(filePath)), 
     new OleDbParameter("@filepath", filePath), 
     new OleDbParameter("@filename", new FileInfo(filePath).Name), 
     new OleDbParameter("@filesize", new FileInfo(filePath).Length), 
     new OleDbParameter("@md5", GetMd5Hash(filePath)) 
    }); 
    insertCmd.ExecuteNonQuery(); 
} 
... 

enter image description here

In debug, kann ich die Parameterwerte sehen richtig gebunden. Was mache ich falsch?

Jede Hilfe würde sehr geschätzt werden.

+0

Probieren fangen Sie die richtige Fehlermeldung erhalten –

+0

@HiteshThakor Das Bild oben von einem Try-Catch-Ausnahme erzeugt wird. –

Antwort

0

Ok fand die Antwort here

Anscheinend brauchen ? für die Bindung mit OLEDB in ORACLE verwenden 0_o

Folgende Werke ..

... 
var query = "INSERT INTO MY_TABLE VALUES (?, ?, ?, ?, ?)"; 

using (var insertCmd = new OleDbCommand(query, conn)) 
{ 
    insertCmd.CommandType = CommandType.Text; 
    insertCmd.Parameters.AddRange(new OleDbParameter[] 
    { 
     new OleDbParameter("?", FindItemId(filePath)), 
     new OleDbParameter("?", filePath), 
     new OleDbParameter("?", new FileInfo(filePath).Name), 
     new OleDbParameter("?", new FileInfo(filePath).Length), 
     new OleDbParameter("?", GetMd5Hash(filePath)) 
    }); 
    insertCmd.ExecuteNonQuery(); 
} 
... 
1

Was Mick oben gesagt ist richtig.

OleDbCommand und OdbCommand unterstützt keine benannten Parameter und verwendet die? Platzhalter stattdessen, so ist die Reihenfolge der Parameter wichtig. Sie können jedoch Namen zu seinen Parametern geben anstelle der Verwendung, für die Zwecke der Lesbarkeit wie unten:

... 
var query = "INSERT INTO MY_TABLE VALUES (?, ?, ?, ?, ?)"; 

using (var insertCmd = new OleDbCommand(query, conn)) 
{ 
insertCmd.CommandType = CommandType.Text; 
insertCmd.Parameters.AddRange(new OleDbParameter[] 
{ 
    new OleDbParameter("@id", FindItemId(filePath)), 
    new OleDbParameter("@filepath", filePath), 
    new OleDbParameter("@filename", new FileInfo(filePath).Name), 
    new OleDbParameter("@filesize", new FileInfo(filePath).Length), 
    new OleDbParameter("@md5", GetMd5Hash(filePath)) 
}); 
insertCmd.ExecuteNonQuery(); 
} 
...