【发布时间】:2011-02-25 15:58:13
【问题描述】:
我正在寻找一种在 C# 中针对不同提供者编写 SQL 语句的方法。区分 SQL 语句的典型示例是 LIMIT in PostgreSQL 与 TOP in MSSQL。
是解决上述两种 SQL 语法的唯一方法,根据用户选择的提供程序或使用 try catch 语句作为流控制来编写 if 语句(LIMIT 不起作用,我会尝试顶部代替)?我见过LINQ Take 方法,但我想知道如果没有 LINQ 是否可以做到这一点?
换句话说,C# 是否有一些我找不到可以使用的通用 SQL Provider 类?
【问题讨论】:
-
为什么不想使用 LINQ?
-
解决这些差异的方法有很多,您确定使用SQL 是解决问题的方法吗,即找到一些系统,让您编写一条SQL 语句可以跨不同的提供程序工作?
-
@Mark Byers:嗯,我发现自己经常以 .NET 2 为目标,据我所知,LINQ 在那里并不能很好地工作。从历史上看,这是因为我希望能够在没有任何模糊的情况下移植到 Mono,然后我就“卡住”了。由于现在 Mono 与 LINQ 配合得很好,我真的无法给出任何其他好的答案,为什么我仍然生活在过去..
-
@Lasse V. Karlsen:我如何不使用使用 SQL 语句从 C# 中的 SQL 数据库中获取数据?你有我可以解决差异的系统示例吗?
-
不,我不是这个意思。您可以建立一个系统,在该系统中,您实际上必须编写两条 SQL 语句,每条语句都针对不同的数据库引擎进行了自己的优化,然后将其分层,这样使用它的代码就不需要知道哪个是目前正在使用。此处可以使用 IoC 容器或类似容器。但是,如果您想/需要采用一个针对不同提供程序的 sql 的方式,那么我已经走这条路,可能会为您提供一些代码。
标签: c# .net sql sqlbuilder