为什么在参数化查询中更改参数名会导致抛出SqlException?

The*_*ude 2 c# sql sql-server-2008 sql-parametrized-query

我的原始查询使用@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();
Run Code Online (Sandbox Code Playgroud)

版本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();
Run Code Online (Sandbox Code Playgroud)

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

看看这个StackOverflow主题,你似乎无法通过参数传递列名.我可以在SQL存储过程中将列名作为输入参数传递

nvo*_*igt 7

"SELECT COUNT(*) AS MyCount from members WHERE ID = " + @WF_ID;
Run Code Online (Sandbox Code Playgroud)

这根本不是参数化查询.您只是将值重新连接到SQL字符串.

"SELECT COUNT(*) AS MyCount from members WHERE ID = @WF_ID";
Run Code Online (Sandbox Code Playgroud)

这将使它使用您的参数.