【问题标题】:Browse dictionaries with params in C #在 C# 中使用参数浏览字典
【发布时间】:2013-08-19 10:43:01
【问题描述】:

我创建了一个方法,它接收未指定数量的字典参数并扫描所有参数的内容,但未涵盖相同的内容,它在第一次或第二次 foreach 中给出错误,具体取决于我修复的内容。 Consegundo'm 没有解决这个问题。我怎样才能使这项工作变得异常。

我得到了 params 字典,我想浏览每个字典的内容。

我遵循的代码如下:

public String getQuerySelectInner(String TABELA, params Dictionary<String, String> dictionaries)
{
    String sql = "SELECT ";

    foreach (Object dictionary in dictionaries)
    {
        foreach (var word in dictionary)
        {
            sql += word.Key + ",";
        }
    }

    sql = sql.Remove(sql.Length - 1);

    sql += " from " + TABELA + "  WHERE situacao = 'ATIVO' ";

    return sql;
}

【问题讨论】:

  • 永远不要使用字符串创建 SQL。这有很大的 SQL 注入概率。
  • foreach 对象字典中的单词? object 不继承自IEnumerable,那你怎么能foreach 呢?
  • 这段代码产生的错误是什么??
  • @It'sNotALie。如果不连接最终用户文本,SqlInjection 怎么可能?

标签: c# dictionary params params-keyword


【解决方案1】:

您的代码甚至无法编译。您是使用记事本还是实际的 IDE 进行编码?

无论如何,如果您为参数添加括号并将外部 foreach 更改为 var 而不是转换为它编译的 Object。这是否有助于满足您的需求?

    public String getQuerySelectInner(String TABELA, params Dictionary<String, String>[] dictionaries)
    {
        String sql = "SELECT ";

        foreach (var dictionary in dictionaries)
        {
            foreach (var word in dictionary)
            {
                sql += word.Key + ",";
            }
        }

        sql = sql.Remove(sql.Length - 1);

        sql += " from " + TABELA + "  WHERE situacao = 'ATIVO' ";

        return sql;
    }

为了进一步改进,你可以使用 string.join 代替你的内部循环:sql += string.Join(",", dictionary.Keys); 这意味着你不需要删除额外的逗号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-20
    • 2021-08-19
    • 2014-08-15
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 2012-07-11
    相关资源
    最近更新 更多