没有数据库模型的C#动态查询

时间:2012-09-21 21:21:02

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

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

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

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

  • 客户id
  • 名称
  • FavoriteColor

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

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

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

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

  

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

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

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

希望这有帮助..

答案 2 :(得分:0)