我想在我的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
我想在我的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
我喜歡它,但它不能完全解決我的問題。 – 2013-05-12 13:41:26
嘗試EasyQuery。
這個庫有一個查詢對象,它用來以某種內部格式存儲查詢並生成SQL。查詢對象具有Formats屬性,它允許您調整生成的SQL語句的語法。對於大多數流行的DB(MS SQL Server,Oracle,MySQL等),有幾個預定義的值。
使用內置的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
這裏是它是如何與DbExtensions做到:
var db = new Database("name=Northwind");
var query = db.From("products")
.Take(2);
這是一個很奇怪的ORM,不生成SQL查詢本身。你爲什麼不使用實體框架? – Dennis 2013-05-10 17:46:40
我更喜歡petapoco,因爲實體框架比petapoco和笨重。 – 2013-05-10 17:50:22
PetaPOCO如此快速和輕便的原因是,因爲它本身並不會產生大部分查詢。你似乎打敗了使用它的目的。 – Tory 2013-05-10 19:47:30