在一个网络项目中,我尝试执行以下查询:
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 语法而产生的。我的做法有什么问题吗?
EDIT:
附件代码:
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 并且附件运行良好。
EDIT 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));
如果它改变了任何东西,我仍然会遇到同样的错误。
EDIT 3:
在 Access 中执行查询要求我为参数“ItemPicture”提供一个值...奇怪; ItemPicture 是一个列,不是吗?