存档

2007年5月 的存档

MySQL和PostgreSQL的DAAB

2007年5月20日 没有评论

最近在研究EntLib2.0的DAAB。DAAB的特性之一是可以使我们在编写代码的时候不必关心数据库到底是什么,也就是DAAB可以当作数据库抽象层。但是你得有你要使用的数据库在这个抽象层之下的驱动。

我们知道现在开源关系数据库主要有两个,一个是MySQL,一个是PostgreSQL。这两个数据库现在都有现成的开源.NET Data Provider。由于微软也提供了EntLib2.0的源代码,这样我们很容易仿照其SQL Server的DAAB Database Provider写出他们在抽象层之下的驱动。我试着写了一下,MySQL的部分实现了,PostgreSQL的完全没有实现。

MySQL的DAAB Database Provider除了XmlReader相关的部分,其他部分都实现了。这是由于MySQL的.net connecter虽然是仿照SQLServer的.NET Database Provider来定义的接口,但是.NET Framework 2.0新增的一些内容还没有实现,MySQL对于XML的支持也不如SQL Server那么完善。

PostgreSQL的DAAB Database Provider完全没有实现。和MySQL的.NET Database Provider类似,PostgreSQL的Npgsql也没实现XmlRaeder的功能,除此以外,Npgsql的NpgsqlCommand对象竟然没有继承DbCommand, ICloneable,导致在一些NpgsqlCommand强制转换的情景下会失败。这个情况导致了PostgreSQL的DAAB Database Provider没办法实现。

比较MySQL和PostgreSQL对.NET的支持,看来是MySQL更胜一筹。

为了解决使用Entlib的DAAB来访问PostgreSQL的问题,估计可能得写一个ODBC的DAAB Database Provider了。研究了一下ODBC的.NET Database Provider的情况,似乎ODBC和MySQL的情况类似,在.NET Framework2.0的类库里面并没有对XmlReader支持,估计仍然不能实现ODBC的DAAB Database Provider的XmlReader部分。