为什么在我需要在此处声明标量变量(在查询中引用参数)的情况下出现异常? [英] Why am I getting an exception telling me that I need to declare a scalar variable here (referencing a parameter in a query)?

查看:68
本文介绍了为什么在我需要在此处声明标量变量(在查询中引用参数)的情况下出现异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个参数化查询,它是根据用户在网页上选择的选择标准建立的.例如,下面是构建的示例查询字符串(completeQuery):

  SELECT M.MovieTitle,M.IMDBRating,M.MPAARating,M.YearReleaed,M.Minutes来自dbo.MOVIES_MAIN M左联接GENRES_MOVIES_M2M G ON M.MovieId = G.MovieId在哪里M.IMDBRating> = @IMDBMinRatingAND M.Year发布于@EarliestYear和@LatestYear之间和G.GENRES IN(传记,纪录片,戏剧,历史,音乐,神秘,西方)和M.MPAARIN IN(PG)M.IMDBRating DESC的订单,M.Year发布的DESC 

然后我尝试将查询结果(包含在"completeQuery"字符串中)分配给GridView,如下所示:

  try{使用(SqlConnection连接=新的SqlConnection(connStr)){使用(SqlCommand cmd =新的SqlCommand(completeQuery,连接)){cmd.Parameters.AddWithValue("@ IMDMinRating",_ imdbThreshold);cmd.Parameters.AddWithValue("@ EarliestYear",_ yearBegin);cmd.Parameters.AddWithValue("@ LatestYear",_yearEnd);SqlDataAdapter dAdapter =新的SqlDataAdapter(cmd);DataSet ds = new DataSet();dAdapter.Fill(ds);GridView1.DataSource = ds.Tables [0];connection.Close();}}}抓住(前例外){字符串s = ex.Message;} 

以下行引发异常:

  GridView1.DataSource = ds.Tables [0]; 

异常消息为必须声明标量变量"@IMDBMinRating".

由于这是添加的第一个参数,因此我认为它还会抱怨其他两个参数.

为什么看不到/接受@IMDMinRating?

解决方案

您的SQL查询显示IMDB,而您的C#参数名称显示IMD

  WHERE M.IMDBRating> = @IMDBMinRating^cmd.Parameters.AddWithValue("@ IMDMinRating",_ imdbThreshold);^ 

我认为它也会抱怨其他两个参数.

其他两个参数没有错字.当然,如果错误是没有为@IMDBMinRating提供值".查询未使用提供的名为"@IMDMinRating"的参数.您可能会立即意识到!

这只是您需要经历的事情之一,下次需要再次检查,当SQLServer说查询中的参数没有值时,通常就是这种情况(容易遗漏).


与您的问题无关,但您应该阅读 解决方案

Your SQL query says IMDB and your C# parameter name says IMD

WHERE M.IMDBRating >= @IMDBMinRating 
                          ^


cmd.Parameters.AddWithValue("@IMDMinRating", _imdbThreshold);
                                 ^

I assume it would also complain about the other two parameters.

The other two parameters don't have typos.. And of course if the error had been "No value supplied for @IMDBMinRating. Query doesn't use supplied parameter named '@IMDMinRating'" you probably would have realized immediately!

It's one of those things you just have to chalk up to experience and double check next time, when SQLServer says a parameter in your query doesn't have a value it's usually the case (and easy to miss)..


Unrelated to your issue, but you should read the advice in Joel's blog about AddWithValue

这篇关于为什么在我需要在此处声明标量变量(在查询中引用参数)的情况下出现异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆