我一直在这工作了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作为值。
我很感激任何帮助或建议。
恐怕不适合我:(给ExecuteReader()函数仍然失败,同样的信息。我可能忘了补充一点,它是一个Microsoft Access数据库 – Pio
@Pio可以说,它是使'pair.Value'为空? –
不,它不是,用调试器检查显示它包含一个字符串befor它失败,并赋值给参数[0] .Value也可以工作... – Pio