2017-07-14 6 views
2

Ich habe an diesem jetzt für 2 Stunden gerade gearbeitet und viele Fragen gelesen, aber ich kann nicht sehen, wo oder warum mein OleDbCommand nicht so funktioniert, wie es sollte.
Ich schrieb diesen Code als eine Zusammenführung aller Fragen und Antworten die ich gesehen habe:Wie werden parametrisierte Abfragen korrekt verwendet?

using (var connection = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + @"data source= *path to mdp*")) 
{ 
    try 
    { 
    connection.Open(); 
    foreach (KeyValuePair<string, string> pair in dictionary) 
    { 
     string query = "SELECT * FROM mytable WHERE db_id=?"; 
     var command = new OleDbCommand(query, connection); 
     //command.Parameters.Add(new OleDbParameter("@ID", pair.Value)); 
     command.Parameters.Add("?", OleDbType.BSTR).Value = pair.Value; 
     var reader = command.ExecuteReader(); 
     while (reader.Read()) 
     { 
      Console.WriteLine(reader[0].ToString()); 
     } 
     reader.Close(); 
    } 
    connection.Close(); 
    } 
    catch (Exception ex) 
    { 
    MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

Doch diese mir den „kein Wert für einen oder mehr geforderten parameteres gegeben“ Fehler gibt. Wenn ich versuche, die jetzt kommentierte Zeile

und kommentieren Sie die andere, das Ergebnis ist genau das gleiche.
Aber wenn ich beide Zeilen benutze liest der Leser aber gibt mir jeden Eintrag in meiner Tabellenspalte und nicht nur die gewünschte Übereinstimmung mit pair.Value.

Die KeyValuePair ist nichts anderes als ein Tupel einer String-ID aus meinem Programm als Schlüssel und die entsprechende ID in der Datenbank als Wert.

Ich bin dankbar für jede Hilfe oder Anregung.

Antwort

5

Dies ist für mich arbeiten:

string query = "SELECT * FROM mytable WHERE [email protected]"; 
var command = new OleDbCommand(query, connection); 
command.Parameters.Add("@ID", OleDbType.BSTR); 
command.Parameters[0].Value = pair.Value; 
+0

Ich fürchte, es nicht für mich :(die ExecuteReader() Funktion noch mit der gleichen Nachricht nicht. Ich habe vergessen, kann hinzufügen, dass es sich um eine Microsoft Access-Datenbank – Pio

+0

@Pio es so sein kann, dass 'pair.Value' ist null? –

+0

nein es ist nicht, die Prüfung mit dem Debugger zeigt, dass es eine Zeichenfolge enthält, bevor es fehlschlägt und die Zuweisung zu Parametern [0] .Wert funktioniert auch ... – Pio

2

FYI, Ihr Code richtig ist, erforderlich ist, um nur in Befehlszeilenparameter zu ändern und es erfolgreich ausgeführt.

 string result = string.Empty; 
     using (var connection = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + @"data source = employee.mdb")) 
     { 
      try 
      { 
       connection.Open(); 
       foreach (KeyValuePair<string, string> pair in dictionary) 
       { 
        string query = "SELECT * FROM employeeTable WHERE [email protected]"; 
        var command = new OleDbCommand(query, connection); 
        //command.Parameters.Add(new OleDbParameter("@ID", pair.Value)); 
        command.Parameters.Add("@id", OleDbType.BSTR).Value = pair.Value; 
        var reader = command.ExecuteReader(); 
        //result = reader.ToString(); 
        while (reader.Read()) 
        { 
         result += reader[1].ToString() + "\r\n"; 
        } 
        reader.Close(); 
       } 
       connection.Close(); 
      } 
      catch (Exception ex) 
      { 
       Response.Write("Exception: " + ex.Message); 
      } 
     } 
Verwandte Themen