【问题标题】:MS-Access, OleDbCommand, Getting a "No value given for one or more required parameters"MS-Access,OleDbCommand,获取“没有为一个或多个必需参数提供值”
【发布时间】:2011-04-18 18:46:47
【问题描述】:

我遇到了麻烦,因为我对使用具有 Microsoft 访问权限的 OleDb 非常生疏。我在命令中添加参数,然后执行查询,我得到“没有为一个或多个必需参数提供值。”

void LoadPositions(string accountKey, IEnumerable<Positions> positions)
{
    OleDbCommand cmd1 = new OleDbCommand("delete from AccountPositions where BrokerAccountKey=?", conn, tran);
    cmd1.Parameters.Add("?", OleDbType.VarChar).Value = brokerAccountKey;
    cmd1.ExecuteNonQuery();
}

我束手无策...帮助别人!提前致谢。

【问题讨论】:

  • 我似乎记得 MS Access 需要“DELETE * FROM ...”语法。 * 不是标准 SQL,但我认为 Access 需要它。另外,我对cmd1.Parameters.Add( new OleDbParameter(... 语法的运气更好。应该是一样的,但至少可以尝试不同的东西。
  • @Charlie Kilian Nope,从 ID=1 的表中删除工作正常。我认为这可能也是他的问题,所以不用担心:P
  • 我看到您的参数名为accountKey,但您使用的是brokerAccountKey。这可能只是因为您为 SO 示例减少了示例代码,但也可能是因为您在其他地方声明了 brokerAccountKey。可能是这个问题吗?更新:克里斯·巴克勒(Chris Buckler)的评论看起来很有希望。
  • 值得注意的是,@Charlie,它们在功能上是等效的,我也尝试过你的方法。所有文档都表示简单的“?”查询中的问号,以及用于设置值的简单参数排序。它似乎不起作用!还有其他建议吗?
  • 这就是问题所在,我实际上已经削减了代码,并且进一步修改了命令文本,使其具有一个带破折号的字段,但没有包含在 [] 符号中。通过错误消息很难辨别,但是根据您的一些建议,我偶然发现了解决方案。

标签: c# ms-access oledb oledbcommand


【解决方案1】:
"delete * from AccountPositions where BrokerAccountKey=@variableName"

如果我没记错的话,我想你需要为你的参数添加@。

您不喜欢使用 ?为变量名。我刚刚试了一下,效果很好。

编辑*

尝试定义你的参数有点不同。

cmd1.Parameters.AddWithValue("@variableName", txtSomeValue.text);

只需确保 txtSomeValue.text 与您在访问数据库中定义的值相同即可。

如果这些都不起作用,那么当访问尝试提交查询时,很可能“brokerAccountKey”实际上是未定义的。

【讨论】:

  • 对不起@chris,但这会产生语法错误:“查询表达式中的语法错误(缺少运算符)”
  • @enorl76 我相信这是因为您使用了问号。再试一次,因为我测试过它并且它正在工作。祝朋友好运!
  • @chris,你知道这是 MS-Access 吗?这确实适用于 SQL Server。我刚试过,没有工作:(
  • 我刚刚打开 MS 访问,将上面的 SQL 复制并粘贴到 ms 访问中,它工作得很好。这告诉我们,它不是你的问题的选择,哈哈。我将这段代码复制并粘贴到 c# 前端,它仍然可以正常工作。我将编辑我的答案,看看我们是否可以为您缩小问题范围...
  • 我相信你的回答,正如我在上面提到的那样,存在剪切粘贴问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多