2011-01-07 216 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,从而实现自己的语法差异处理。