C#SQL参数化的SQL查询

时间:2018-09-30 08:15:18

标签: c# mysql

使用参数化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语法错误。如果手动输入表和名称而不是使用参数,则该方法有效。

希望您能提供帮助。

需要一个项目。

谢谢!

1 个答案:

答案 0 :(得分:0)

正确使用将是:

string sql = $"SELECT {product} FROM {table}";

因为表和列不是参数。

此外,我建议使用Command.Parameters.Add(...).Value(...), 在Parameters.AddWithValue之上,因为在第一种方法中,您可以显式决定要传递的数据类型,并防止SQL猜测它。