.NET Framework 4.5 におけるデータ アクセスの概要 その 2 ~ ADO.NET ~

概要編

  • 全体像
  • ADO.NET
  • ADO.NET Entity Framework
  • LINQ

応用編

  • ADO.NET Entity Framework
    • 全体像
    • DBファースト、モデルファースト

 

概要編:ADO.NET

ADO.NETでサポートされるデータアクセス手法は2種類(接続型非接続型)あります。これらは同じADO.NETのライブラリで実装されていますが、それぞれがまったく異なる方法でデータストアに対してアクセスします。

接続型の特徴はデータベースとの接続を(Connectionオブジェクトを用いて)確立し、(Commandオブジェクトを用いて)データベースへコマンドを実行し、データに関する処理を行う時間も含めてデータアクセスが終わるまでの間データベースとの接続を維持し続けることにあります。こうした手法は、従来のADOなどでも採用されており、データベースとの通信頻度が少ない場合は向いています。しかし、マルチユーザー環境において複数のユーザーから大量のデータ処理(抽出、更新)が行われる場合や、あるいは検索処理のため長時間にわたりサーバー上のデータを保持する場合(結果、サーバーとの接続時間が長くなります)などには、パフォーマンス、サーバーリソース(ネットワークやロック)の消費や、拡張性といった問題が発生する場合が多いと言えます。また、ビジネスロジックが複雑になるにつれて、設計や保守を行うことが難しくなる傾向にあり、場合によってはプレゼンテーション層、データ層との分離も困難になる可能性があります。

接続型は、パフォーマンスが要求される定型的なバッチ処理や、更新が頻繁に行われるトランザクション処理に対して利用することが適切だと言えます。

 

非接続型の特徴は、データベースアクセスに対してSQLを使用するという面は同じですが、接続型のように直接データベースへの接続を開かず、(DataAdapterオブジェクトを用いて)DataSetと呼ばれるクライアントに存在するインメモリオブジェクト内にデータをバッファリングする時のみ接続を開き、データの充填が終わると接続を閉じます。

クライアントやビジネスロジックの中で行われるデータへの操作は、データベースへの接続を閉じた状態で行うため、サーバーリソースの効率的な運用が可能になります。また、クライアントで実際に使用するデータはDataSet内のオブジェクトであることから、データソースの多様化に対応できることも大きなメリットです。特にプレゼンテーション、ビジネスロジック層など、多階層のアプリケーションを設計する場合、このDataSetをオブジェクトとして渡すことが可能でありDTO(Data Transfer Object)として利用することができます。

逆に「非接続型」での更新処理は少々面倒です。これはDataSet内に充填されたデータを更新する場合、更新されたデータをすべてデータベース側に反映する必要があるためです。(全てのデータをデータベースへ書き戻すのではなく、変更があったデータのみを効率的にデータベースへ書き戻すための変更管理の仕組みが搭載されています)この際、接続が維持されていないために排他ロックも保持できないということから、当該データの値が、別のユーザーによって既に更新されているという状況が想定されます。そのために、いわゆる楽観的同時実行制御という仕組みを考慮しなければなりません。したがって頻繁に更新が行われ、それを直ちにデータベースに書き戻すことが要求される処理にはあまり適しません。また非常に大量のデータを扱う場合には、クライアント側でそれを一時的に保持するためのリソースが必要です。

非接続型は、複数ユーザーの利用が想定される、Webアプリケーションなどで利用することが適切だと言えます。

2

                           図1 ADO.NET の全体像

 

.NET Framework 4.5 では ADO.NET に非同期プログラミングなどの新しい機能が追加されています。

MSDN: ADO.NET の新機能

https://msdn.microsoft.com/ja-jp/library/ex6y04yf(v=vs.110).aspx

 

Note : ADO.NETの詳細についてはMSDNライブラリを参照してください。

MSDN : ADO.NET

https://msdn.microsoft.com/ja-jp/library/e80y5yhx.aspx