2

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

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

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

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

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

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

我意识到这很疯狂,但我只是好奇。

4

3 回答 3

2

Insight 类似于 Dapper:https ://github.com/jonwagner/Insight.Database

于 2012-09-21T22:15:29.650 回答
0

看看 Dapper:http ://code.google.com/p/dapper-dot-net/

于 2012-09-21T21:54:40.777 回答
0

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

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

现在可以对参数本身进行参数化,为此您可以使用带有 SqlCommand 类的普通旧 ADO.NET,然后添加参数以动态查询。这是您可以参考的资源:http ://www.csharp-station.com/Tutorial/AdoDotNet/lesson06

希望这有帮助..

于 2012-09-21T21:35:13.233 回答