我已经发布了以下代码 我试图从Access 2002-2003数据库中获取数据
如果我取出WHERE子句之后的所有内容并只使用“SELECT * FROM [{0}] ,那么它将从表中获取所有数据没有问题。我已经仔细检查了该字段名字,它们肯定是正确的。我有超过1个具有相同字段名称的表,所以我想也许我需要在字段名称之前包含表名,但无论有没有表我仍然得到相同的例外。我尝试移动方括号的位置,再次没有成功...
即使我只包含一个WHERE子句,代码也不再有效,我不能为我的生活找出原因..我花了好几个小时在这里和其他相关的网站上查看了很多帖子这个错误,但没有一个建议对我有帮助..
目标字段是Access中的“备忘录”字段。 Next Collection字段是日期字段,GVars.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");
}
答案 0 :(得分:1)
尝试为您添加的参数指定类型。
我注意到的另一件事是你的适配器只传递了CommandText。 你应该传递整个命令对象。