Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 必须声明表变量"@&引用;。_C# - Fatal编程技术网

C# 必须声明表变量"@&引用;。

C# 必须声明表变量"@&引用;。,c#,C#,我试图将数据从DB1复制到DB2。但我得到了错误:必须声明表变量“@TableName” 这个代码怎么了 功能: public void TransferData() { SqlConnection source = new SqlConnection(strConnectDB1); SqlConnection destination = new SqlConnection(strConnectDB2); source.Open

我试图将数据从DB1复制到DB2。但我得到了错误:必须声明表变量“@TableName”

这个代码怎么了

功能:

  public void TransferData()


    {
        SqlConnection source = new SqlConnection(strConnectDB1);
        SqlConnection destination = new SqlConnection(strConnectDB2);


        source.Open();
        destination.Open();

        SqlCommand cmd= new SqlCommand("SELECT * FROM @TableName", source);

        cmd.Parameters.AddWithValue("@TableName", listbox1.SelectedItem.ToString());
        SqlDataReader reader = cmd.ExecuteReader();


        SqlBulkCopy bulkData = new SqlBulkCopy(destination);

        bulkData.DestinationTableName = listbox1.SelectedItem.ToString();

        bulkData.WriteToServer(reader);

        .
        .


    }
按钮:

    private void button5_Click(object sender, EventArgs e)
    {
        CreateTableName();

        TransferData();

    }

尝试以下方法;将SqlCommand代码替换为此

SqlCommand cmd= new SqlCommand("SELECT * FROM " + listbox1.SelectedItem.ToString(), source); SqlCommand cmd=newsqlcommand(“SELECT*FROM”+listbox1.SelectedItem.ToString(),source);
并删除要添加参数的行。它应该是这样工作的。不能对表使用@Parameter语法。

请尝试以下操作;将SqlCommand代码替换为此

SqlCommand cmd= new SqlCommand("SELECT * FROM " + listbox1.SelectedItem.ToString(), source); SqlCommand cmd=newsqlcommand(“SELECT*FROM”+listbox1.SelectedItem.ToString(),source);
并删除要添加参数的行。它应该是这样工作的。不能对表使用@Parameter语法。

不能对表使用@Parameter语法;最好的方法是将表名关闭到[],并检查表名是否不包含[](sql注入预防措施)


不能对表使用@Parameter语法;最好的方法是将表名关闭到[],并检查表名是否不包含[](sql注入预防措施)


SQL
FROM
子句中的表名不是表达式,因此不能在参数中发送

您需要手动构造SQL字符串,例如

SqlCommand cmd = new SqlCommand(string.Format("SELECT * FROM {0}", listbox1.SelectedItem), source);
我强烈建议您对表名进行分隔,以防止SQL注入攻击

SqlCommand cmd = new SqlCommand(string.Format("SELECT * FROM {0}", "[" + listbox1.SelectedItem.ToString().Replace("]", "]]") + "]"), source);

SQL
FROM
子句中的表名不是表达式,因此不能在参数中发送

您需要手动构造SQL字符串,例如

SqlCommand cmd = new SqlCommand(string.Format("SELECT * FROM {0}", listbox1.SelectedItem), source);
我强烈建议您对表名进行分隔,以防止SQL注入攻击

SqlCommand cmd = new SqlCommand(string.Format("SELECT * FROM {0}", "[" + listbox1.SelectedItem.ToString().Replace("]", "]]") + "]"), source);

也许你可以试试这个:

公共数据()


希望这有帮助。

也许你可以试试这个:

公共数据()


希望这有帮助。

我认为您不能像那样使用参数作为表名。参数是数据值的占位符,而不是对象名。@user..您添加的变量是表变量..这就是为什么会出现错误..可能的重复:@Yaugen这是一个完全不同的问题我不认为您可以使用参数作为这样的表名。参数是数据值的占位符,而不是对象名。@user..您添加的变量是表变量..这就是为什么会出现错误..可能的重复:@Yaugen这是一个完全不同的问题这是一个SQL注入漏洞。至少应包含数据库对象名称(在SQL Server中使用方括号)。这是一个SQL注入漏洞。至少应包含数据库对象名称(在SQL Server中使用方括号)。这是一个SQL注入漏洞。至少应包含数据库对象名称(在SQL Server中使用方括号)。这是一个SQL注入漏洞。至少应将数据库对象名称括起来(在SQL Server中使用方括号)。