必须声明表变量“”@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();
}

必须声明表变量“”@TableName”;

使用参数无法解析表名。为此,您必须在传递给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被解释为表变量,而不是参数,并且没有定义表变量。

遗憾的是,您需要使用字符串操作显式地放入表。