2012-09-21 111 views
1

我一直在网上搜索动态查询的解决方案。我发现了许多不同的解决方案(例如Linq to Sql,动态Linq表达式,动态查询),但所有这些解决方案都涉及某种数据库的先前知识(如代码中的模型)。也许我所要求的是远离深层,但是有没有任何可能的方式来动态查询数据库没有模型?没有数据库模型的C#动态查询

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

  • 客户ID
  • 名称
  • FavoriteColor

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

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

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

+0

这不是疯了。你的数据库有什么特色?根据需要支持的后端,有几种方法。 –

+0

数据库是SQL Server 2008。 – hitopp

回答

0

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

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

现在参数本身可以参数化,并且您可以使用SqlCommand类坚持使用普通的旧ADO.NET,然后添加参数以动态查询。这里是你可以参考一个相同的资源:http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06

希望这有助于..