是否有一种简单的方法可以参数化这些查询,我已经查看了很多不同的网站,但无法找到我想要的内容
if (HttpContext.Current.Request.HttpMethod == "GET" && TableName != null)
{
cmd.CommandText = "SELECT TOP 50 * FROM " + TableName;
if (SearchID != null && Regex.IsMatch(SearchID, @"^\d+$"))
{
cmd.CommandText += " WHERE " + TableName + "ID Like '%" + SearchID + "%'";
}
else if (SearchName != null)
{
cmd.CommandText += " WHERE " + TableName + "Name LIKE '%" + SearchName.Replace("'", "''") + "%'";
}
if (ID != null)
{
cmd.CommandText += " WHERE " + TableName + "ID = " + ID + "";
}
}
答案 0 :(得分:1)
你可以编写任何sql查询编写使用字符串连接作为sql参数化查询,你应该选择最后一个,因为它是最安全的方式(你避免sql注入):
改变这个:
cmd.CommandText = "SELECT TOP 50 * FROM " + TableName;
if (SearchID != null && Regex.IsMatch(SearchID, @"^\d+$"))
{
cmd.CommandText += " WHERE " + TableName + "ID Like '%" + SearchID + "%'";
}
对此:
cmd.CommandText = "SELECT TOP 50 * FROM @TableName";
cmd.Parameters.Add("@TableName", TableName);
if (SearchID != null && Regex.IsMatch(SearchID, @"^\d+$"))
{
cmd.CommandText += " WHERE ID Like %@SearchID%";
cmd.Parameters.Add("@SearchID",SearchID);
}
您必须对其余的if
语句进行相同的操作。
注意但是我必须承认我从未见过传递参数表的名称。