データアクセス(ADO.NET)

当方では従来データベース応用システムはAccessを使っていましたが、今年からVisual Basic 2005(以後VB2005と記述)に置き換えています。置き換えには当初の想定よりも手間取りました。言語の違いは本格的なオブジェクト指向の機能を備えたVB2005になれるのにそれほど時間は掛かりませんでしたが、ライブラリの違いにはなかなかなれることができませんでした。

Accessでは、フォームにRecordsetの機能が最初から備わっているなど、思い切った割り切りによってデータベース処理に特化しているのですが、VB2005というかNET
Framework 2.0ではデータアクセスのパーツが細かく分かれていてこれらパーツの関連を把握するのに時間が掛かりました。

右の図は私が把握しているデータベースアクセスクラスの関連を表しています。XXDataTableとXXTableAdapterはIDEが生成するクラスです。

AccessやCOMベースのADOとの最も大きな違いはデータベースエンジンとの接続のあり方でしょう。従来はアプリケーションの実行開始から終了まで接続状態でデータアクセスするスタイルでしたが、ADO.NETではDataTableに一気に読み込んでから、処理を行い、結果を戻すスタイルが標準的な動作になります。接続は読み込みと結果を戻すときだけ行います。

Web開発ではこのような接続方法が求められるのですが、これをクライアント/サーバに応用した場合には次の得失がありそうです。

Accessではユーザインタフェース上でデータを変更したら即座にデータベースも変更されます。そのため「保存」「取消」ボタンを作ろうとすれば一旦ワークテーブルにデータを読み込んでワークテーブルに対して編集を行うようにするなどの一工夫が必要になります。それに対してADO.NETではユーザインタフェース上での変更はオンメモリのDataTableが変更されるだけで、データベースへの変更はXXTableAdapterのUpdateメソッドで一気に行われるため、「保存」「取消」ボタンを簡単に実装できます。

それに対してスクロールしながら一覧表示するような画面ではメモリ上に一気に読み込むことからデータ量が多い場合のメモリ使用量・パフォーマンスに別の配慮が必要になります。