在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
有了断点,我可以看到我附加了@ value0的值,2.
尽管如此,我收到以下错误:
No value given for one or more required parameters.
我知道这个错误通常是由于错误的sql语法而产生的.我做了什么有什么不对吗?
编辑:
附件代码:
var madeForCommand = "SELECT ItemName as Name,ItemPicture as [Picture],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); }
我很确定项目[ii] .ID很好,断点显示它等于2并且附件顺利.
编辑2:
我编写了Krish和Hans建议的代码,我得到以下查询,没有任何附件:SELECT ItemName为[Name],ItemPicture为Picture,ItemHeroModif为Assistance,ItemTroopModif为Charisma,HerbCost为Herbs,GemCost为Gems FROM [项目] WHERE((2)中的ItemID);如果它改变了什么,我仍然会得到同样的错误.
编辑3:
在Access中执行查询要求我给参数“ItemPicture”赋值……奇数; ItemPicture是一个专栏,不是吗?
解决方法
Access查询中的名称,项目和图片是
problem words.将它们括在方括号中:
SELECT ItemName as [Name],GemCost as Gems FROM [Item] WHERE ItemID in (2);
由于包围这些名称仍然给您一个缺失的参数投诉,我请求您在Access的查询设计器中测试该查询.在该上下文中,Access提供了一个参数输入框,其中还包括Access将其解释为参数的单词.
您报告Access认为ItemPicture是一个参数.因此,通过在Access Design View中检查该表,您发现实际的字段名称是ItemImageURL.
SELECT ItemName as [Name],ItemImageURL as [Picture],GemCost as Gems FROM [Item] WHERE ItemID in (2);