【问题标题】:C# Dynamic Query Without A Database Model没有数据库模型的 C# 动态查询
【发布时间】:2012-09-14 08:05:01
【问题描述】:

我一直在网上搜索动态查询的解决方案。

我找到了许多不同的解决方案(例如 Linq to Sql、Dynamic Linq Expressions、Dynamic Query),但所有这些解决方案都涉及到数据库的某种先前知识(如代码中的模型)。也许我要问的是远离深渊,但是有没有可能在没有模型的情况下动态查询数据库的方法?

例如,一个数据库有一个Customers 表,其中包含以下列:

  • 客户 ID
  • 姓名
  • 最喜欢的颜色

我想创建一个查询为SELECT Name FROM Customers WHERE @0 = @1,其中两个占位符是动态填充的。结果数据与模型类无关,我更喜欢使用某种框架来构建查询,而不是简单的字符串连接。

System.Linq.Dynamic 命名空间非常接近于满足此请求,但它使用数据库模型。

我知道这很疯狂,但我只是好奇。

【问题讨论】:

  • 没那么疯狂。你的数据库是什么风格的?根据需要支持的后端,有多种方法。

标签: c# linq linq-to-sql dynamic


【解决方案1】:

【讨论】:

    【解决方案2】:

    SQL 查询参数只能代替文字值。你 不能为表名、列名、值列表使用参数, 或其他 SQL 语法。这是所有品牌的标准 SQL 行为 数据库。

    据我所知,你不能让你的列名动态化,唯一能让这个查询动态化的方法是使用string.FormatStringBuilder之类的东西,结合一些检查的正则表达式/规则如果 columnName 是来自用户的直接输入,则它是否是有效名称。如果它由您控制,那么它不应该担心,因为您可以放心,不会有 SQL 注入。如果用户负责提供列名,请确保将用户输入映射到代码中的某个列名。

    现在可以对参数本身进行参数化,为此您可以使用带有 SqlCommand 类的普通旧 ADO.NET,然后添加参数以动态查询。以下是您可以参考的资源:@​​987654321@

    希望这有帮助..

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 2013-04-22
        • 1970-01-01
        • 1970-01-01
        • 2019-03-15
        • 2016-02-16
        • 1970-01-01
        相关资源
        最近更新 更多