System.Data.SqlClient.SqlException:" ="附近的语法不正确

时间:2017-11-26 06:07:55

标签: sql asp.net sql-server

我尝试构建一个函数,在给定表的名称和命令的参数时填充表。

我想我只是在SQL命令中出现语法错误,但我无法找到它。请帮忙。

public DataTable populateTable(string tableName, string orderByParameter)
{
    DataTable table = new DataTable();
    string connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    string cmdString = "SELECT * FROM (value = @tbl) ORDER BY (parameter = @obp) DESC";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.Connection = conn;
            cmd.CommandText = cmdString;
            cmd.Parameters.AddWithValue("@tbl", tableName);
            cmd.Parameters.AddWithValue("@obp", orderByParameter);
            using (SqlDataAdapter ad = new SqlDataAdapter(cmd))
            {
                ad.Fill(table);
            }
        }
        try

        {
            GridView1.DataSource = table;
            GridView1.DataBind();
            return table;
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            return null;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您不能在表名或“order by”子句中包含变量。

您可以动态构建查询:

string cmdString = "SELECT * FROM [" + tableName + "] ORDER BY " + orderByParameter +" DESC";

使用此功能,您无需在命令中添加参数@tbl@obp

请注意,这会遇到与SQL注入相关的漏洞。所以你不应该这样做,除非你绝对确定具有给定名称的表存在,并且orderByParameter是一个有效的表达式。