为什么我必须声明变量?

时间:2015-06-26 00:55:52

标签: c# sql

我收到了一个错误:

  

必须声明标量变量' @ 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文件,这是另一组值所需要的,它与错误有某种关系。但是...我的原始问题是,我声明了一个我需要知道的变量吗?我不介意研究它(如果有资源详细说明了它的用途,或者它的使用时间),但我以前从来没有必须处理它...它是什么"重要/有价值"?

1 个答案:

答案 0 :(得分:0)

你应该使用@0 - 这代表第一个参数。

QueryQueryValue都有2个参数 - 一个commandText和一个参数数组。要指定参数在命令文本中的位置,请使用@0@1等。

例如:

var selectQueryString = "SELECT * FROM business_Customer WHERE memberid=@0";
db.Query(selectQueryString, memberid)

因此,当您致电Query时,它会将@0替换为memberid变量的值。