我一直在网上搜索动态查询的解决方案。
我找到了许多不同的解决方案(例如Linq to Sql,Dynamic Linq Expressions,Dynamic Query),但所有这些解决方案都涉及到某种先前的数据库知识(如代码中的模型)。也许我要问的是远离深层,但有没有可能的方法在没有模型的情况下动态查询数据库?
例如,数据库有一个Customers
表,其中包含以下列:
我想创建一个SELECT Name FROM Customers WHERE @0 = @1
的查询,其中两个占位符是动态填充的。结果数据与模型类无关,我更愿意使用某种框架来构建查询,而不是简单的字符串连接。
System.Linq.Dynamic命名空间非常接近完成此请求,但它使用数据库模型。
我意识到这很疯狂,但我只是好奇。
答案 0 :(得分:2)
Insight与Dapper类似:https://github.com/jonwagner/Insight.Database
答案 1 :(得分:0)
SQL查询参数只能取代文字值。您 不能使用参数作为表名,列名,值列表, 或其他SQL语法。这是所有品牌的标准SQL行为 数据库中。
根据我的意识,您无法使列名称动态化,人们可以考虑使此查询动态化的唯一方法是将string.Format
或StringBuilder
与某些正则表达式结合使用/规则检查columnName是否是一个有效的名称,如果它是来自用户的直接输入..如果它由你控制,那么它不应该是担心,因为你可以放心,不会有SQL注入。如果用户负责提供列名,请确保将用户输入映射到代码中的某个列名。
现在参数本身可以进行参数化,为此你可以坚持使用SqlCommand类的普通旧ADO.NET,然后添加参数来动态查询。以下是您可以参考的资源:http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06
希望这有帮助..
答案 2 :(得分:0)