c# 1个或多个必需参数没有给出值,但我不知道为什么
本文关键字:为什么 我不知道 1个 参数 | 更新日期: 2023-09-27 18:18:01
我已经张贴了我下面的代码我正试图从Access 2002-2003数据库获得数据
如果我取出WHERE子句之后的所有内容,并使用"SELECT * FROM [{0}],那么它将从表中获取所有数据,没有问题。我仔细检查了字段名,它们绝对是正确的。我有多个具有相同字段名的表,所以我想也许我需要在字段名之前包括表名,但是有或没有表,我仍然得到相同的异常。我已经尝试移动方括号的位置,再次没有成功…
即使我只包含了一个WHERE子句,代码也不能再工作了,我也不知道为什么…我花了几个小时在这里和其他网站上看了很多关于这个错误的帖子,但是没有一个建议对我有帮助。
Destination字段是Access中的"memo"字段。Next Collection字段是日期字段,gvar。在代码中较早的地方将currentDate设置为今天的日期(时间部分设置为00:00:00)。GVars。在此之前,thisFY也被编程设置为字符串。
如有任何提示,我将不胜感激。
string sql;
OleDbDataAdapter adapter;
sql = string.Format(
"SELECT * FROM [{0}] WHERE {0}.[Destination] = @Destination AND {0}.[Next Collection] BETWEEN @NextCollectionA AND @NextCollectionB"
, GVars.thisFY);
// Create the command object
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
// Add values to the fields
cmd.Parameters.AddWithValue("@Destination", "Henwood");
cmd.Parameters.AddWithValue("@NextCollectionA", GVars.currentDate);
cmd.Parameters.AddWithValue("@NextCollectionB", GVars.currentDate.AddDays(1));
adapter = new OleDbDataAdapter(cmd.CommandText, conn);
System.Diagnostics.Debug.Print(cmd.CommandText);
try
{
adapter.Fill(ds);
GVars.bLblLastUpdate = DateTime.Now.ToString("HH:mm:ss");
}
catch (Exception ex)
{
}
编辑:感谢Vladislav的回答,更正代码张贴如下:
string sql;
OleDbDataAdapter adapter;
sql = string.Format(
"SELECT * FROM [{0}] WHERE [{0}].[Destination] = @Destination AND [{0}].[Next Collection] BETWEEN @NextCollectionA AND @NextCollectionB"
, GVars.thisFY);
// Create the command object
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = conn;
// Add values to the fields
cmd.Parameters.Add("@Destination", OleDbType.Char).Value = "Henwood";
cmd.Parameters.Add("@NextCollectionA", OleDbType.DBDate).Value = GVars.currentDate;
cmd.Parameters.Add("@NextCollectionB", OleDbType.DBDate).Value = GVars.currentDate.AddDays(1);
adapter = new OleDbDataAdapter(cmd);
try
{
adapter.Fill(ds);
GVars.bLblLastUpdate = DateTime.Now.ToString("HH:mm:ss");
}
尝试为您添加的参数指定类型。
我注意到的另一件事是,您只向适配器传递CommandText。您应该传递整个命令对象