我收到了一个错误:
必须声明标量变量' @ 20'
...加载网页以获取查询数据时。
我已经完成了一些网络查询,但我不明白为什么变量需要宣布。
这开始了,当我写出代码并加载页面时,它工作正常。对页面的不相关部分进行了一些修改,再次刷新并开始出错。我以前从未处理过声明。
var db = Database.Open("StarterSite");
var selectQueryString = "SELECT * FROM business_Customer WHERE memberid=@20";
var memberid = Database.Open("StarterSite").QueryValue("SELECT memberid FROM business_Customer WHERE email=@0",WebSecurity.CurrentUserName);
这是我的页面顶部的脚本,就在html加载之前。
foreach (var row in db.Query(selectQueryString, memberid)) {...}
...是给我错误的脚本。
但在修改和添加到页面之前,memberid
变量工作正常。该值是一个整数,我单独使用它,以确认它是否有效。我尝试将代码段更改为foreach (var row in db.Query(selectQueryString, (int) memberid)) {...}
并且它给了我一个错误,上面写着:
无法将null转换为' int'因为它是一个不可为空的值类型
我非常困惑......声明与从SQL数据库调用值有什么关系?我的问题有一个简单的解决方案吗?我阅读了与此相关的其他stackoverflow帖子,但解决方案是用SQL语法编写的,并且使用了#34;声明",我没有足够的资源来理解如何将他们的解决方案应用到我的问题中。
我发现我的脚本出了什么问题。它缺少一个外部javascript文件,这是另一组值所需要的,它与错误有某种关系。但是...我的原始问题是,我声明了一个我需要知道的变量吗?我不介意研究它(如果有资源详细说明了它的用途,或者它的使用时间),但我以前从来没有必须处理它...它是什么"重要/有价值"?
答案 0 :(得分:0)
你应该使用@0
- 这代表第一个参数。
Query
和QueryValue
都有2个参数 - 一个commandText和一个参数数组。要指定参数在命令文本中的位置,请使用@0
,@1
等。
例如:
var selectQueryString = "SELECT * FROM business_Customer WHERE memberid=@0";
db.Query(selectQueryString, memberid)
因此,当您致电Query
时,它会将@0
替换为memberid
变量的值。