2013-05-10 105 views
1

我想在我的Petapoco ORM项目中支持多个DBMS',例如:Oracle,SQL Server,MySQL等。所以我需要使用支持多个数据库的SQL查询构建器。多个数据库服务器的SQL查询生成器

的查询问题一个基本的例子:

在SQL Server的查询来获取前2条记录是:

SELECT TOP 2 * FROM table_name 

但甲骨文是:

SELECT * FROM table_name WHERE ROWNUM <=2 
+0

这是一个很奇怪的ORM,不生成SQL查询本身。你为什么不使用实体框架? – Dennis 2013-05-10 17:46:40

+0

我更喜欢petapoco,因为实体框架比petapoco和笨重。 – 2013-05-10 17:50:22

+1

PetaPOCO如此快速和轻便的原因是,因为它本身并不会产生大部分查询。你似乎打败了使用它的目的。 – Tory 2013-05-10 19:47:30

回答

0

尝试EasyQuery

这个库有一个查询对象,它用来以某种内部格式存储查询并生成SQL。查询对象具有Formats属性,它允许您调整生成的SQL语句的语法。对于大多数流行的DB(MS SQL Server,Oracle,MySQL等),有几个预定义的值。

1

使用内置的Page方法或SkipTake

它将围绕您的sql包装分页代码。

例如。

db.Fetch<User>(1, 10, "select * from table_name order by id"); 

这将产生类似:

select * from (select *, row_number() over (order by id) from table_name) poco 
where row_num between 0 and 10 

这将为Oracle和SQL Server数据库服务器。 Mysql和Postgres将使用他们自己的变体。例如LIMIT

0

这里是它是如何与DbExtensions做到:

var db = new Database("name=Northwind"); 

var query = db.From("products") 
    .Take(2);