2017-07-14 66 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); 
      } 
     }