从多个数据库中获取数据

时间:2011-01-07 23:23:27

标签: sql mysql database oracle nhibernate

我正在开发一个需要与在不同数据库平台上运行的许多不同应用程序通信的应用程序。我会在运行时之前知道表模式,但在运行时之前我不会知道数据库平台(MS SQL 200X,Oracle 9i,10g等,MySQL 4.0.1,5.x等,sybase等)。

据我所知,这些系统中的每一个都有一个略有不同的方言。连接到这些系统时是否需要使用nhibernate来处理差异,还是可以使用ADO.NET并传递原始SQL字符串(select * from table)?

2 个答案:

答案 0 :(得分:2)

如果您只需要使用ANSI SQL语句,那么应该由所有数据库实现,那么您可以使用ADO.NET。

根据我的经验,与数据库无关的代码的主要问题是使用代理键,如序列或自动编号字段,因为所有数据库都以不同的方式实现这些代码。

如果你确实需要使用不同数据库的功能,那么我认为没有理由去像NHibernate这样的对象关系映射器 - 只有在你有其他理由这样做时才这样做。您可以通过为不同的数据库轻松生成不同的SQL来实现自己对语法差异的处理。

答案 1 :(得分:1)

SQL应该针对所有dbs进行标准化,但它们并不都使用相同的语法,因此它实际上取决于您调用的SQL。例如,SQL Server使用TOP而Oracle使用rownum。即使它们都是DDL,DBMS之间的一些语法差异也是一个问题。

如果你想要的是select * from table,那么除了性能命中之外,应该没有问题。