我现在已经连续工作了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作为值。
我很感谢任何帮助或建议。
答案 0 :(得分:5)
这对我有用:
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;
答案 1 :(得分: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 ID=@id";
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);
}
}