我尝试构建一个函数,在给定表的名称和命令的参数时填充表。
我想我只是在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;
}
}
}
答案 0 :(得分:2)
您不能在表名或“order by”子句中包含变量。
您可以动态构建查询:
string cmdString = "SELECT * FROM [" + tableName + "] ORDER BY " + orderByParameter +" DESC";
使用此功能,您无需在命令中添加参数@tbl
和@obp
。
请注意,这会遇到与SQL注入相关的漏洞。所以你不应该这样做,除非你绝对确定具有给定名称的表存在,并且orderByParameter
是一个有效的表达式。