2011-01-07 260 views
0

我正在研究將需要與運行在不同數據庫平臺上的許多不同應用程序進行通信的應用程序。我將在運行前瞭解表模式,但直到運行時我纔會知道數據庫平臺(MS SQL 200X,Oracle 9i,10g等,MySQL 4.0.1,5.x等,sybase等)。從多個數據庫獲取數據

這是我的理解,每個系統都有一個略有不同的方言。當連接到這些系統時,是否需要使用nhibernate來處理差異,或者我可以使用ADO.NET並傳遞原始SQL字符串(從表中選擇*)?

回答

1

SQL應該爲所有dbs標準化,但它們並不都使用相同的語法,所以它實際上取決於您所調用的SQL。例如,SQL Server使用TOP,而Oracle使用rownum。即使它們都是DDL,DBMS之間的語法差異也可能成爲問題。

如果select * from table是你想要的,那麼應該沒有問題,除了性能命中。

2

如果您只需要使用ANSI SQL語句,而這些語句應該由所有數據庫實現,那麼您就可以使用ADO.NET。

根據我的經驗,數據庫不可知代碼的主要問題是使用代理鍵,如序列或自動編號字段,因爲所有數據庫都以不同的方式實現它們。

如果您確實需要使用跨數據庫不同的功能,那麼我不認爲這是足夠理由去像NHibernate這樣的對象關係映射器 - 只有在您有其他原因時才這樣做。您可以輕鬆地爲不同的數據庫生成不同的SQL,從而實現自己的語法差異處理。