2013-05-10 107 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);