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