我正在尝试设置表名作为参数传递到命令文本中,但我没能使其起作用。我查看了一些问题,如:使用C#的MySQL参数查询,但我没有成功。
作为一种测试方式,这个方法是可行的(我将xml从数据集写入控制台进行检查)。所以我相当确定问题只是使用参数功能的方式不对。有什么建议吗?
此外,请纠正我如果我错了,但是使用参数功能应该完全防止SQL注入,对吗?
这是相关的代码(connection == 包含连接字符串的MySqlConnection
):
public static DataSet getData(string table)
{
DataSet returnValue = new DataSet();
try
{
MySqlCommand cmd = connection.CreateCommand();
cmd.Parameters.AddWithValue("@param1", table);
cmd.CommandText = "SELECT * FROM @param1";
connection.Open();
MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
adap.Fill(returnValue);
}
catch (Exception)
{
}
finally
{
if (connection.State == ConnectionState.Open)
connection.Close();
}
return returnValue;
}
如果我更改:
cmd.CommandText = "SELECT * FROM @param1";
to:
cmd.CommandText = "SELECT * FROM " + table;
作为一种测试方式,这个方法是可行的(我将xml从数据集写入控制台进行检查)。所以我相当确定问题只是使用参数功能的方式不对。有什么建议吗?
此外,请纠正我如果我错了,但是使用参数功能应该完全防止SQL注入,对吗?