【发布时间】:2015-07-08 06:04:13
【问题描述】:
在一个网络项目中,我正在尝试执行以下查询:
SELECT ItemName as Name,
ItemPicture as Picture,
ItemHeroModif as Assistance,
ItemTroopModif as Charisma,
HerbCost as Herbs,
GemCost as Gems
FROM Item WHERE ItemId = @value0
通过断点,我可以看到我附加到 @value0 的值 2。
尽管如此,我收到以下错误:
没有为一个或多个必需参数指定值。
我了解此错误通常是由于 SQL 语法错误而产生的。我的所作所为有什么问题吗?
编辑:
附件代码:
var madeForCommand = "SELECT ItemName as Name,ItemPicture as [Picture],ItemHeroModif as Assistance,ItemTroopModif as Charisma, HerbCost as Herbs, GemCost as Gems FROM Item WHERE ";
OleDbCommand command = new OleDbCommand();
for (int ii = 0; ii < items.Count; ii++)// items is a list of items with IDs I want to get from the query.
{
madeForCommand += "ItemId =@value"+ii+" OR ";
}
madeForCommand = madeForCommand.Substring(0, madeForCommand.Length - 4); // making sure I trim the final or; In the case I shown, it's just one item, so there are none at all.
后来:
OleDbCommand forOperations = new OleDbCommand(madeForCommand, _dbConnection); //_dbConnection is the connection to the database, it seems to work pretty well.
for (int ii = 0; ii < items.Count; ii++)
{
string attach = "@value" + ii;
command.Parameters.AddWithValue(attach, items[ii].ID);
}
我很确定items[ii].ID 没问题,断点显示它等于 2 并且附件正常。
编辑 2: 我按照 Krish 和 Hans 的建议编辑了代码,我得到以下查询,没有任何附件:
SELECT ItemName as [Name],ItemPicture as Picture,ItemHeroModif as Assistance,ItemTroopModif as Charisma, HerbCost as Herbs, GemCost as Gems FROM [Item] WHERE (ItemID in (2));
如果有任何改变,我仍然会遇到同样的错误。
编辑 3: 在 Access 中执行查询要求我给参数“ItemPicture”一个值... ItemPicture 是一个列,不是吗?
【问题讨论】:
-
发布您设置值的代码。
-
你能把你设置
@value0的代码贴到2吗?这大概就是问题所在。此外,有时您将参数设置为null并得到相同的错误。 -
@Kobi 用代码编辑。
-
您应该尝试直接在 MS Access 中运行查询。例如,如果您拼错列名,Access 会认为它是一个参数。因此,请确保所有列名的拼写正确。
-
您还可以将“items”转换为逗号分隔的字符串并将其传递给 SQL,而不是使用 for 循环。我总是被告知不要使用循环来执行多个单独的查询。为此,请使用类似于 @krish 使用的查询