将查询中的动态表名和列名作为ado.net中的sql参数传递

问题描述 投票:0回答:1

目标:防止SQL注入。

我想从选择查询中动态传递列名和表名。

请考虑以下方法:

public bool PassColumnTableDynamic(string columnName, string tableName)
{
    string commandText = string.Format(select {0} from {1}, columnName, tableName);

    try
    {
            using (var command = new SqlCommand(commandText, _connection))
            {
               command.ExecuteScalar();
            }
    }
    catch (Exception ex)
    {
        throw new Exception("error",ex);
    }

    return true;
}

commandText容易受到SQL注入的攻击。我该如何预防?

我有创建存储过程并将其作为此方法中的参数传递的解决方案。但是我不想创建一个存储过程。

C#代码中有可用的解决方案吗?

c# ado.net dynamic-sql
1个回答
0
投票

如果用户无法直接输入这些名称,请像您一样注入它们...

否则,没有直接的方法,请考虑像"^[a-zA-Z]*$"这样使用正则表达式,以便用户只能插入文本

© www.soinside.com 2019 - 2024. All rights reserved.