データベース系の実装を如何にするかで悩んだ

C#におけるデータベース接続、操作に関わるクラスは、たくさんある。
現在の開発で主に使うのが以下のクラス(なんとかマッピングやEntity-Framework等は使ってない)。

System.Data.SqlClient.SqlConnection
接続文字列、接続状態を保持するクラス。
System.Data.SqlClient.SqlCommand
SQL Server データベースに対して実行する Transact-SQL ステートメントまたはストアド プロシージャを表すクラス
System.Data.SqlClient.SqlDataAdapter
DataSet へのデータの格納および SQL Server データベースの更新に使用される、一連のデータ コマンドおよびデータベース接続を表すクラス。
System.Data.SqlClient.SqlParameter
SqlCommandに対するパラメータを表すクラス。パラメータクエリに使用される。
System.Data.SqlClient.SqlTransaction
SQL Server データベースで作成する Transact-SQL トランザクションを表すクラス。トランザクション制御を行うメソッドを提供する。
System.Data.SqlClient.SqlDataReader
SQL Server データベースから行の前方向ストリームを読み取る方法を提供するクラス。
普通に使うだけでも、これくらいのクラスに関わる事になる。
最初、開発に使った時に思ったのが、多すぎる!だった。
もともとJavaで開発していたので、この具体的すぎるクラスのインスタンス生成とクラスの多さには辟易した。
一番疑問だったのは、接続を表すクラスとトランザクションを表すクラスが別々になっている事かなぁ。
更新、登録処理には必ず必要になるため、この2つのインスタンスを常に二個一で持ち歩く必要がある。
ただの検索には、トランザクションが必要ない(オートコミット状態)なので、余計にめんどくさい。
あと、System.Data.SqlClientって、SQLServer専用のな前空間なんだよなぁ。ODBCとかになると違う名前空間になってしまう。この情報はODBC経由とかあるともう大変だ。
自分はDBMSに特化した物を使うのに抵抗感を感じてしまう性質であるので、この具体的なクラス達ではなく、もっと抽象的なクラスで扱いたいと思ったわけで。
たとえ将来Oracleにつなげる事になろうとも、ちょっとの変更で使えるクラスを作りたいと思ったわけで。
要するに、
SqlConnectionクラス
System.Data.IDbConnection インターフェイス
SqlCommandクラス
System.Data.IDbCommand インターフェース
SqlDataAdapterクラス
System.Data.IDbDataAdapter インターフェース
SqlParameterクラス
System.Data.IIDbDataParameter インターフェイス
SqlTransaction
System.Data.IDbTransaction インターフェイス
SqlDataReaderクラス
System.Data.IDataReader インターフェース
を使うようにしたいわけだ。どんなDBMSに提供されるプロバイダクラスであろうと、かならずこのインターフェースを実装しているはずだし。
続くかも。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m