2017-07-14 68 views
2

我一直在這工作了2小時,並通讀了很多這樣的問題,但我不能看到我的OleDbCommand在哪裏或爲什麼不按照它應該的方式工作。
我寫了這個代碼,所有的問題和答案的合併我已經看到:如何正確使用參數化查詢?

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); 
    } 
} 

然而,這給我的錯誤「爲一個或多個需要Parameteres給沒有價值」。如果我嘗試現在評論線

command.Parameters.Add(new OleDbParameter("@ID", pair.Value)); 

並評論其他,結果是完全相同的。
但是,如果我使用這兩行讀者讀取,但給我我的表列中的每個條目,而不僅僅是與pair.Value所需的匹配。

KeyValuePair只不過是我的程序中字符串id的一個元組,作爲一個鍵以及它在數據庫中的相應ID作爲值。

我很感激任何幫助或建議。

回答

5

這是爲我工作:

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

恐怕不適合我:(給ExecuteReader()函數仍然失敗,同樣的信息。我可能忘了補充一點,它是一個Microsoft Access數據庫 – Pio

+0

@Pio可以說,它是使'pair.Value'爲空? –

+0

不,它不是,用調試器檢查顯示它包含一個字符串befor它失敗,並賦值給參數[0] .Value也可以工作... – Pio

2

僅供參考,您的代碼是正確的,只是需要在命令行參數的變化,並能成功執行。

 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); 
      } 
     }