如何正确使用参数化查询?

皮奥

我现在已经连续工作了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);
  }
}

但这给了我“没有为一个或多个必需参数给出值”错误。如果我尝试现在评论的行

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

并发表评论,结果是完全一样的。
但是,如果我同时使用这两行,则阅读器会读取数据,但会给我表列中的每个条目,而不仅仅是与pair.Value匹配的内容。

KeyValuePair只是一个来自我程序的字符串ID作为键的元组,而它在数据库中的对应ID作为值的元组。

感谢您的帮助或建议。

萨姆维尔·彼得罗索夫(Samvel Petrosov)

这为我工作:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章