必须声明表变量“”@TableName”;
本文关键字:@TableName 变量 声明 | 更新日期: 2023-09-27 18:22:04
我在Visual Studio中收到了这部分代码的错误。为什么?我在下面声明@TableName
为FormField。
必须声明表变量"@TableName"。
代码:
using (SqlCommand sqlCmd2 = new SqlCommand())
{
sqlCmd2.Connection = sqlConn2;
sqlCmd2.CommandType = System.Data.CommandType.Text;
sqlCmd2.CommandText = string.Format("SELECT DisplayName AS MyColumn FROM @TableName WHERE EventId = 1 AND Visible = 1");
sqlCmd2.Parameters.Add("@TableName", SqlDbType.NVarChar).Value = "FormField";
sqlCmd2.ExecuteNonQuery();
}
使用参数无法解析表名。为此,您必须在传递给SqlCommand
:时准备您的声明
string tableName = "FormField";
using (SqlCommand sqlCmd2 = new SqlCommand())
{
sqlCmd2.Connection = sqlConn2;
sqlCmd2.CommandType = System.Data.CommandType.Text;
sqlCmd2.CommandText = string.Format("SELECT DisplayName AS MyColumn FROM {0} WHERE EventId = 1 AND Visible = 1", tableName );
sqlCmd2.ExecuteNonQuery();
}
SqlParameter
只能用于传递参数。例如,在插入或更新语句中。但如果您想这样做,请确保tableName
不能从源代码外部更改,以防止在任何情况下进行sql注入。在执行任何查询之前,您可能能够过滤可接受的值。
不能将表名(或列名、函数或运算符)指定为参数。
因此,在查询中,@TableName
被解释为表变量,而不是参数,并且没有定义表变量。
遗憾的是,您需要使用字符串操作显式地放入表。