使用参数化sql查询时,我只会不断出现语法错误。
public List<string> Cat(string product,string table)
{
List<string> Products = new List<string>();
Global global = new Global();
string sql = "SELECT @prod FROM @tbl";
MySqlConnection connection = new MySqlConnection(global.ConnectionString);
MySqlCommand command = new MySqlCommand(sql, connection);
command.Parameters.AddWithValue("@prod", product);
command.Parameters.AddWithValue("@tbl", table);
connection.Open();
MySqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
Products.Add(reader.GetString("@prod"));
}
connection.Close();
return Products;
}
public List<string> CallProducts(string category)
{
string table;
string product;
List<string> stacks = new List<string>();
if (category == "Accessories")
{
product = "Accessories_Name";
table = "tbl_accessories";
stacks.AddRange(Cat(product, table).ToArray());
}
else if (category == "Batteries")
{
table = "tbl_batteries";
}
else if (category == "Cotton")
{
table = "tbl_cotton";
}
else if (category == "Juices")
{
table = "tbl_juices";
}
else if (category == "Kits")
{
table = "tbl_kits";
}
else if (category == "Mods")
{
table = "tbl_mods";
}
else
{
table = "tbl_vapeset";
}
return stacks;
}
我只是继续获取SQL语法错误。如果手动输入表和名称而不是使用参数,则该方法有效。
希望您能提供帮助。
需要一个项目。
谢谢!
答案 0 :(得分:0)
正确使用将是:
string sql = $"SELECT {product} FROM {table}";
因为表和列不是参数。
此外,我建议使用Command.Parameters.Add(...).Value(...)
,
在Parameters.AddWithValue
之上,因为在第一种方法中,您可以显式决定要传递的数据类型,并防止SQL猜测它。