在Web项目中,我正在尝试执行以下查询:
SELECT ItemName as Name,
ItemPicture as Picture,
ItemHeroModif as Assistance,
ItemTroopModif as Charisma,
HerbCost as Herbs,
GemCost as Gems
FROM Item WHERE ItemId = @value0
Run Code Online (Sandbox Code Playgroud)
有了断点,我可以看到我附加@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.
Run Code Online (Sandbox Code Playgroud)
后来:
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);
}
Run Code Online (Sandbox Code Playgroud)
我很确定没问题items[ii].ID,断点显示它等于2并且附件顺利.
编辑2:我已经将代码编辑为Krish和Hans建议我,并且我得到以下查询而没有任何附件:@value0.如果它改变了什么,我仍然会得到同样的错误.
编辑3:在Access中执行查询要求我给参数"ItemPicture"赋值...奇数; ItemPicture是一个专栏,不是吗?
Name、Item、 和Picture是Access 查询中的问题词。将它们括在方括号中:
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);
Run Code Online (Sandbox Code Playgroud)
由于将这些名称括起来仍然会给您带来缺少参数的投诉,因此我要求您在 Access 的查询设计器中测试该查询。在这种情况下,Access 会显示一个参数输入框,其中还包含 Access 将其解释为参数的单词。
您报告 Access 认为ItemPicture是一个参数。因此,通过在 Access Design View 中检查该表,您发现实际的字段名称是ItemImageURL。
SELECT ItemName as [Name], ItemImageURL as [Picture], ItemHeroModif as Assistance, ItemTroopModif as Charisma, HerbCost as Herbs, GemCost as Gems
FROM [Item] WHERE ItemID in (2);
Run Code Online (Sandbox Code Playgroud)