【发布时间】:2015-06-26 14:17:49
【问题描述】:
我遇到了一个错误:
必须声明标量变量'@20'
...加载网页以获取查询数据时。
我进行了一些网络查询,但我不明白为什么需要声明变量。
这开始了,当我写出代码并加载页面时,它运行良好。对页面的不相关部分进行了一些修改,再次刷新并开始出现错误。我以前从来没有处理过declare。
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 变量工作得很好。该值是一个整数,我单独使用它来确认它是否有效。我尝试将 sn-p 更改为 foreach (var row in db.Query(selectQueryString, (int) memberid)) {...},它给了我一个错误,上面写着:
无法将 null 转换为 'int',因为它是不可为空的值类型
我非常困惑...声明与从 sql 数据库调用值有什么关系?我的问题有简单的解决方案吗?我阅读了与此相关的其他 stackoverflow 帖子,但解决方案是用 SQL 语法编写的,并且使用了“Declare”,没有足够的资源让我了解如何将他们的解决方案应用于我的问题。
我发现我的脚本出了什么问题。它缺少一个外部 javascript 文件,需要另一组值,这在某种程度上与错误有关。但是......我原来的问题是声明一个我需要知道的变量吗?我不介意研究它(如果有资源详细说明它的用途或使用时间),但我以前从未处理过它……它是“重要/有价值”的东西吗?
【问题讨论】:
-
因为如果在查询中使用 SQL 变量 必须有一个值。在这种情况下,这是因为名为
@20的参数未绑定。也许它应该是memberid=@0(意思是第一个参数,来自 C# 'memberid' 变量,绑定)? (请注意其他查询如何使用@0而不是@20:模式很重要。) -
本来我把它设置为0,但是错误出现了'@0',在网上搜索之后,我意识到这个变量可以是任何东西。所以我给了它一个随机数,看看它是否能指出错误的来源。我唯一了解的是
selectQueryString是我的错误的原因。