是否可以参数化这些SQL查询C#

时间:2015-01-09 09:43:41

标签: c# sql

是否有一种简单的方法可以参数化这些查询,我已经查看了很多不同的网站,但无法找到我想要的内容

        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 + "";
            }
        }

1 个答案:

答案 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语句进行相同的操作。

注意但是我必须承认我从未见过传递参数表的名称。