H2SharpはDbProviderFactoryに対応していない

前回書いたH2Sharpについて、実際に使ってみて残念な点があったので挙げておく。

残念な点「DbProviderFactoryに対応していない」

残念な点。それは「DbProviderFactoryに対応していない」点。

System.Data.Common.DbProviderFactoryクラスを継承したクラスがないことから、明らかに対応していない。

私にとって、これは致命的である。私はDbProviderFactoryを使ったライブラリを使っているので、対応していないとなると、そのライブラリは使えない。H2Sharpに依存したコードを書かなくてはいけない。

H2Factoryクラスくらいなら、すぐ書ける。newしてインスタンスを返すメソッドを書いてやるだけで済む。根本的な問題は他の場所にある。

根本的な問題点

根本的な問題になるのはH2Connectionのコンストラクタである。

H2ConnectionはConnectionStringの他にUserNameやPasswordを必要とする。他にもコネクションプールを使おうとするとH2ConnectionPoolのインスタンスをH2Connectionのコンストラクタに渡さないといけない。

これはADO.NETAPIとはかけ離れている。

ADO.NETのConnectionString

ADO.NETのConnectionStringは、通常*1ユーザ名・パスワード・コネクションプーリングの有効無効・最大接続数などすべての接続情報を含む。ConnectionStringとユーザ名とパスワードとコネクションプーリングの設定とが別々にしかできないのであれば、それはADO.NETのConnectionStringとは違う。

もしも、型安全性に配慮したいなら、ConnectionStringBuilderクラスを使えばいい。しかし、そちらはオプションであり、優先されるのはConnectionStringのみで指定できることだ。

これからの予定

批判ばかりしても仕方がないので、H2Sharpを修正してみる予定。それについては、また後日。

*1:SQL Server, Oracle, ODBC, OLE DBくらいしか確認していないが、十分だろう。