必须声明表变量"@".

use*_*343 1 c#

我尝试将数据从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);

        .
        .


    }
Run Code Online (Sandbox Code Playgroud)

按钮:

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

        TransferData();

    }
Run Code Online (Sandbox Code Playgroud)

Chr*_*ter 7

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

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

SqlCommand cmd = new SqlCommand(string.Format("SELECT * FROM {0}", listbox1.SelectedItem), source);
Run Code Online (Sandbox Code Playgroud)

强烈建议您分隔表名以防止SQL注入攻击.

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