【问题标题】:Why would changing the parameter name in a parameterized query cause an SqlException to be thrown?为什么更改参数化查询中的参数名称会导致抛出 SqlException?
【发布时间】:2014-03-21 20:26:56
【问题描述】:

我的原始查询使用@WF_ID 作为参数名称,并且可以毫无问题地执行。虽然我很懒,而且 WF_ 输入太多,所以我将参数重命名为 @ID,但现在执行时会抛出 SQLException。确切的消息是“无效的列名'_Page'”

这里是查询的两个版本和对应的代码。如您所见,唯一改变的是参数名称。

SQL_Connection.Open();
SQL_Command.Connection = SQL_Connection;
SqlParameter param = new SqlParameter("@WF_ID", SqlDbType.Int);
param.Value = WF_ID;
SQL_Command.Parameters.Add(param);
SQL_Command.CommandText = "SELECT COUNT(*) AS MyCount from members WHERE ID = @WF_ID";
int numRows = Convert.ToInt32(SQL_Command.ExecuteScalar().ToString());
SQL_Command.Parameters.Clear();

2.0版破版

 SQL_Connection.Open();
 SQL_Command.Connection = SQL_Connection;
 SqlParameter param = new SqlParameter("@ID", SqlDbType.Int);
 param.Value = WF_ID;
 SQL_Command.Parameters.Add(param);
 SQL_Command.CommandText = "SELECT COUNT(*) AS MyCount from members WHERE ID = @ID";
 int numRows = Convert.ToInt32(SQL_Command.ExecuteScalar().ToString());
 SQL_Command.Parameters.Clear();

我最初的想法是参数名称不能与列名之一相同...但我找不到任何明确说明的内容。

查看这个 StackOverflow 主题,您似乎无法通过参数传递列名。 Can I pass column name as input parameter in SQL stored Procedure

【问题讨论】:

  • 将您的理论重命名为已使用的两个名称以外的名称,看看它是否有效。

标签: c# sql sql-server-2008 sql-parametrized-query


【解决方案1】:
"SELECT COUNT(*) AS MyCount from members WHERE ID = " + @WF_ID;

这根本不是参数化查询。您刚刚将值连接到您的 SQL 字符串。

"SELECT COUNT(*) AS MyCount from members WHERE ID = @WF_ID";

这将使它使用您的参数。

【讨论】:

  • 我的错。我一直在玩代码尝试不同的事情来解决这个问题,但在发布帖子时忘记将其更改回来。
猜你喜欢
  • 2018-08-19
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2012-04-30
相关资源
最近更新 更多