第5章 データアクセス
5.2 ADO.NETクラスライブラリでの
5.2.1 ADO.NETの概要
A D O . N E Tは 、. N E T F r a m e w o r kで 提 供 さ れ る デ ー タ ア ク セ ス 機 能 を 提 供 し ま す 。A D O . N E Tは 非 常 に 多 機 能 で 、 様 々 な 種 類 の デ ー タ に ア ク セ ス す る こ と が で き ま す 。 ま た 、 接 続 を 受 け 持 つ 部 分 と デ ー タ の 操 作 を 受 け 持 つ 部 分 が 分 離 さ れ て お り 、 デ ー タ の 種 類 に 依 存 し た プ ロ グ ラ ミ ン グ を 行 う 必 要 が ほ と ん ど あ り ま せ ん 。
ま た 、A D O . N E Tは 、Wi n d o w sア プ リ ケ ー シ ョ ン やWe bア プ リ ケ ー シ ョ ン の コ ン ト ロ ー ル と 簡 単 に 連 携 す る こ と が 可 能 で 、 プ ロ グ ラ ミ ン グ の 量 を 減 ら す こ と が 可 能 で す 。
従 来 の デ ー タ 操 作 は 、 常 に 接 続(セ ッ シ ョ ン)を ベ ー ス に 行 わ れ て き ま し た 。 し か し 、 ク ラ イ ア ン ト と の 接 続 が ペ ー ジ 単 位 で 切 断 さ れ る の が 通 常 のWe bシ ス テ ム や 、We bサ ー ビ ス( S O A P )と よ ば れ る コ ン ポ ー ネ ン ト 間 の 結 合 が 緩 や か な 処 理 方 式 な ど が 広 ま る に つ れ 、 接 続 を 維 持 す る 形 式 の デ ー タ ア ク セ ス 方 式 に 無 理 が 生 じ る よ う に な り ま し た 。
.NET Framework
ADO.NET マネージコード
.NET Framework データプロバイダ
データソース
DataAdapter
XML文書 DataSet
Command DataReader
Connection
図 5 . 2 . 1 A D O . N E T の 2 つ の コ ン ポ ー ネ ン ト
A D O . N E Tは 、. N E T F r a m e w o r k デ ー タ プ ロ バ イ ダ と い う デ ー タ ソ ー ス へ の 処 理 を 受 け 持 つ コ ン ポ ー ネ ン ト と 、 デ ー タ セ ッ ト( D a t a S e t )と い う デ ー タ ソ ー ス と の 接 続 に 依 存 し な い コ ン ポ ー ネ ン ト に 分 離 さ れ て お り 、 We bシ ス テ ム やWe bサ ー ビ ス に 最 適 な デ ー タ ア ク セ ス の た め の 方 式 で す 。
. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ
. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ は 、 デ ー タ ソ ー ス と の 接 続 と 比 較 的 簡 単 な デ ー タ ア ク セ ス 機 能 お よ びD a t a S e tと の 橋 渡 し の 役 割 が あ り ま す 。
D a t a S e t
D a t a S e tは 、 デ ー タ を 格 納 す る い わ ば 箱 と 、 デ ー タ に ア ク セ ス す る た
め の 豊 富 な 機 能 が 提 供 さ れ る コ ン ポ ー ネ ン ト で す 。 デ ー タ ベ ー ス と の 接 続 部 分 は 、. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ の 役 割 で あ り 、D a t a S e tは デ ー タ ベ ー ス の 種 類 に 依 存 し ま せ ん 。
な お 、A D O . N E Tは 、 デ ー タ ベ ー ス 以 外 に も 、X M Lフ ァ イ ル や テ キ ス ト フ ァ イ ル な ど 、 さ ま ざ ま な デ ー タ に ア ク セ ス で き る た め 、 ア ク セ ス す る 対 象 の デ ー タ を デ ー タ ソ ー ス と 呼 ん で い ま す 。
5.2.2 NetCOBOL for .NETとADO.NET
N e t C O B O L f o r . N E Tか らA D O . N E Tを 利 用 す る 場 合 、 埋 込 みS Q Lを 利 用 す る 方 法 とA D O . N E Tク ラ ス ラ イ ブ ラ リ を 利 用 す る 方 法 が あ り ま す 。 埋 込 みS Q Lを 利 用 す る 方 法 は 、 「5 . 3 埋 込 みS Q Lで の デ ー タ ア ク セ ス 」 を 参 照 し て く だ さ い 。 こ こ で は 、A D O . N E Tク ラ ス ラ イ ブ ラ リ を 利 用 す る 方 法 に つ い て 説 明 し ま す 。
A D O . N E Tク ラ ス ラ イ ブ ラ リ を 利 用 す る 場 合 、 手 続 き 型 のC O B O L文 法 で デ ー タ に ア ク セ ス す る 方 法 と は 異 な る た め 、 従 来 のC O B O L資 産 と の デ ー タ ア ク セ ス に 関 す る 互 換 性 が 失 わ れ ま す 。
逆 に 、Vi s u a l St u d i oの 他 の 言 語 と の 互 換 性 が 高 く な り ま す 。 例 え ば 、 V Bで 利 用 で き な いN e t C O B O L f o r . N E Tの デ ー タ を 、A D O . N E Tの デ ー タ( D a t a S e t )と し て 作 成 し な お し 、V Bに 渡 す な ど の 処 理 が 可 能 に な り ま す 。 ま た 、R E A D / W R I T Eや 埋 込 みS Q Lに な い 豊 富 なA D O . N E Tの 機 能 が 利 用 で き 、 接 続 で き る デ ー タ の 種 類 や 接 続 パ タ ー ン が 増 え る な ど 、 デ ー タ ア ク セ ス の 選 択 肢 が 増 え る の も 大 き な 利 点 で す 。
.NET Framework
VB.NET Webアプリケーション .NetCOBOL for .NET
クラスライブラリ
ADO.NET
DataSet
COBOLファイル など READ/WRITE
ADO.NET DataSet
クラスのパラメーターとして DataSetを受け渡す
図 5 . 2 . 2 D a t a S e t を 使 用 し た デ ー タ 連 携 イ メ ー ジ
例 え ば 、 図 の 連 携 イ メ ー ジ で は 、We bア プ リ ケ ー シ ョ ン をV Bで 作 成 し 、 デ ー タ のC O B O Lフ ァ イ ル は ク ラ ス ラ イ ブ ラ リ 化 し たN e t C O B O L f o r . N E Tで ア ク セ ス し て い ま す 。We bア プ リ ケ ー シ ョ ン と ク ラ ス ラ イ ブ ラ リ 間 の デ ー タ の 連 携 にD a t a S e tを 使 用 し ま す 。D a t a S e tはWe bア プ リ ケ ー シ ョ ン の コ ン ト ロ ー ル と も 簡 単 に 連 携 で き る た め 、We bア プ リ ケ ー シ ョ ン 側 で 複 雑 な デ ー タ 処 理 を 行 う 必 要 は あ り ま せ ん 。
5.2.3 .NET Frameworkデータプロバイダの種類
. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ は 、 プ ロ グ ラ ム と デ ー タ ソ ー ス を 結 ぶ 橋 渡 し を 行 い ま す 。 し た が っ て 、 デ ー タ ソ ー ス と の 接 続 方 法 や デ ー タ ソ ー ス の 種 類 ご と に 、4種 類 の. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ が 用 意 さ れ て い ま す 。 ま た 、O r a c l e社 な ど の デ ー タ ベ ー ス ベ ン ダ が 、 専 用 の. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ を 提 供 し て い る 場 合 も あ り ま す 。
次 に 、 各 デ ー タ プ ロ バ イ ダ の 特 徴 に つ い て 説 明 し ま す 。
Windows .NET Framework
ADO.NET .NET Framework
Data Provider
SQL Server
OLE DB対応 データソース for SQL Server
for OLE DB
for ODBC ODBC対応
データソース
for Oracle
Oracle
ODBC ドライバ
ネットワーク プログラム
ネットワーク プログラム OLE DB
プロバイダ
ODP.NET
Oracle Client
図 5 . 2 . 3 . N E T F r a m e w o r k デ ー タ プ ロ バ イ ダ と デ ー タ ソ ー ス
( 1 ) .NET Framework Data Provider for SQL Server
M i c r o s o f t S Q L S e r v e r V 7 . 0以 降 に 接 続 す る た め の 、 専 用 の デ ー タ プ ロ バ イ ダ で す 。. N E T F r a m e w o r k D a t a P r o v i d e rとS Q L S e r v e rの 間 は 独 自 の プ ロ ト コ ル で 接 続 さ れ る た め 、 高 速 な 処 理 が 期 待 で き ま す 。
S Q L S e r v e rへ の 接 続 は 、. N E T F r a m e w o r k D a t a P r o v i d e r f o r O L E D Bや. N E T F r a m e w o r k D a t a P r o v i d e r f o r O D B Cを 利 用 す る こ と も 可 能 で す 。 し か し 、 こ れ ら の 接 続 方 法 は 、O L E D BやO D B C D r i v e rと い っ た デ ー タ ア ク セ ス の た め の 層(ミ ド ル ウ ェ ア)が 必 要 に な る た め 、 処 理 速 度 が 落 ち 、 メ モ リ 使 用 量 が 増 加 し ま す 。
( 2 ) .NET Framework Data Provider for OLE DB
C O Mベ ー ス の デ ー タ ベ ー ス ア ク セ ス 技 術 で あ るO L E D Bの 機 能 を 利 用
す る た め の. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ で す 。A D O . N E T以 前 に は 、A D O ( A c t i v e X D a t a O b j e c t )が デ ー タ ア ク セ ス 技 術 の 中 心 で し た が 、
A D Oに よ る デ ー タ ア ク セ ス 技 術 で 中 核 と な っ て い る の がO L E D Bで す 。
O L E D Bは 、O L E D Bプ ロ バ イ ダ と よ ば れ る 、 デ ー タ ベ ー ス ご と の ミ ド ル ウ ェ ア を 介 し て デ ー タ ベ ー ス に 接 続 し ま す 。 し た が っ て 、O L E D Bプ ロ バ イ ダ が 提 供 さ れ て い る デ ー タ ソ ー ス で あ れ ば 、. N E T F r a m e w o r k
D a t a P r o v i d e r f o r O L E D Bを 使 用 す る こ と で 接 続 す る こ と が で き ま す 。 ま た 、S Q L S e r v e r 6 . 5以 前 の 場 合 、. N E T F r a m e w o r k D a t a P r o v i d e r f o r S Q L S e r v e rが 未 サ ポ ー ト の た め 、O L E D Bに よ る 接 続 が 必 要 と な り ま す 。
( 3 ) .NET Framework Data Provider for ODBC
Wi n d o w sに お い て 、 最 も 汎 用 的 に 利 用 さ れ て い る デ ー タ ア ク セ ス 技 術
がO D B Cで す 。 ほ と ん ど の デ ー タ ベ ー ス や デ ー タ ソ ー ス でO D B Cド ラ イ
バ が 提 供 さ れ て い ま す 。 し た が っ て 、. N E T F r a m e w o r k D a t a P r o v i d e r
f o r O D B Cを 利 用 す る こ と で 、 ほ と ん ど の デ ー タ ソ ー ス に 接 続 す る こ と
が で き ま す 。 た だ し 、O D B Cは 古 い 技 術 の た め 、 機 能 や パ フ ォ ー マ ン ス で 期 待 通 り の 成 果 を 得 ら れ な い ケ ー ス も あ る の で 、 注 意 が 必 要 で す 。
( 4 ) .NET Framework Data Provider for Oracle
Wi n d o w sを 問 わ ず 、S o l a r i s、L i n u xな ど で 広 く 利 用 さ れ て い る デ ー タ ベ ー ス で あ るO r a c l eに 接 続 す る た め の 専 用 の デ ー タ ソ ー ス で す 。 接 続 の た め に は 、O r a c l e C l i e n t ( O r a c l e N e t )が 必 要 と な り ま す 。O r a c l e C l i e n t R 8 . 1 . 7以 降 が サ ポ ー ト さ れ て い ま す 。 し た が っ て 、O r a c l e C l i e n tの バ ー ジ ョ ン が 古 い 場 合 は 、O D B Cな ど に よ る 接 続 を 検 討 す る 必 要 が あ り ま す 。
( 5 ) Oracle Data Provider for .NET
O r a c l e社 が 提 供 す る. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ で す 。O r a c l e 社 で は 、A D O . N E TでO r a c l eに ア ク セ ス す る 場 合 、O r a c l e D a t a P r o v i d e r f o r . N E Tで の 接 続 を 推 奨 し て い ま す 。 な お 、 埋 込 みS Q Lを 利 用 す る 場 合 は 、 こ の 接 続 方 法 は 選 択 で き ま せ ん 。
5.2.4 .NET Framework データプロバイダのクラス
. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ の ク ラ ス は 、 使 用 す る. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ で 実 装 さ れ て お り 、 そ れ ぞ れ 接 頭 辞 が 異 な り ま す 。 し か し 、 ク ラ ス の 体 系 と 機 能 は ほ ぼ 同 じ で す の で 、 接 頭 辞 を 変 更 す る だ け で 互 換 が あ り ま す 。 た だ し 、. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ の 種 類 に よ り 、 サ ポ ー ト さ れ る メ ソ ッ ド や プ ロ パ テ ィ が 異 な る 場 合 も あ る の で 、 完 全 に は 互 換 し て い ま せ ん(実 装 に よ り 異 な り ま す)。
. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ に は 、C o n n e c t i o n、C o m m a n d、 D a t a R e a d e r、D a t a A d a p t e rの4つ の 代 表 的 な ク ラ ス が あ り ま す 。 そ れ ぞ れ の ク ラ ス の 概 要 に つ い て 、 次 に 説 明 し ま す 。
( 1 ) C o n n e c t i o n ク ラ ス
デ ー タ ソ ー ス へ 接 続 す る た め の 機 能 を 提 供 す る ク ラ ス で す 。 デ ー タ ベ ー ス へ の 接 続 は 、C o n n e c t i o nオ ブ ジ ェ ク ト と し て 生 成 さ れ ま す 。
C o n n e c t i o nオ ブ ジ ェ ク ト イ ン ス タ ン ス を 生 成 す る 際 に 、 デ ー タ ソ ー ス へ 接 続 す る た め の 文 字 列(接 続 文 字 列)を 指 定 し ま す 。O p e nメ ソ ッ ド で 接 続 を 開 き 、C l o s eメ ソ ッ ド やD i s p o s eメ ソ ッ ド で 接 続 を 解 放 し ま す 。
( 2 ) C o m m a n d ク ラ ス
デ ー タ ソ ー ス に 対 し て 、S Q Lス テ ー ト メ ン ト( Tr a n s a c t - S Q Lス テ ー ト メ ン ト)や ス ト ア ド プ ロ シ ー ジ ャ を 呼 び 出 す た め の ク ラ ス で す 。 行 を 返 すS Q L ( S E L E C T )を 発 行 す るE x e c u t e R e a d e rメ ソ ッ ド 、 行 を 返 さ な い S Q L ( I N S E RT、D E L E T E、U P D AT Eな ど)を 発 行 す るE x e c u t e N o n Q u e r y メ ソ ッ ド な ど が あ り ま す 。
E x e c u t e R e a d e rメ ソ ッ ド は 、 結 果 をD a t a R e a d e rオ ブ ジ ェ ク ト と し て 生 成 し ま す 。
( 3 ) D a t a R e a d e r ク ラ ス
デ ー タ ソ ー ス か ら 前 方 向 に デ ー タ を 読 み 込 む た め の 機 能 を 提 供 し ま す 。 D a t a R e a d e rオ ブ ジ ェ ク ト を 作 成 す る に は 、C o m m a n dク ラ ス の
E x e c u t e R e a d e rメ ソ ッ ド を 使 用 し ま す 。
レ コ ー ド を 次 の 行 に 位 置 づ け るR e a dメ ソ ッ ド 、 カ レ ン ト 行 の 指 定 し た 列 の デ ー タ を 取 得 す る メ ソ ッ ド は 、G e tの 後 に デ ー タ の 型 名 が 付 い た メ ソ ッ ド が 用 意 さ れ て い ま す( G e t St r i n g、G e t I n t 3 2な ど)。 ま た 、 実 装 ご と に デ ー タ ソ ー ス の デ ー タ 型 に 応 じ た メ ソ ッ ド が 用 意 さ れ て い る ケ ー ス も あ り ま す( G e t S Q L I n t 3 2、G e t O r a c l e N u m b e rな ど)。
( 4 ) DataAdapterクラス
D a t a S e tへ デ ー タ ソ ー ス の デ ー タ を 格 納 し た り 、D a t a S e tの デ ー タ を デ ー タ ソ ー ス に 反 映 さ せ た り す る た め の 機 能 を 提 供 す る ク ラ ス で す 。
デ ー タ ソ ー ス の デ ー タ をD a t a S e tに 反 映 さ せ るF i l lメ ソ ッ ド 、D a t a S e t の デ ー タ を デ ー タ ソ ー ス に 反 映 さ せ るU p d a t eメ ソ ッ ド な ど が 用 意 さ れ て い ま す 。
5.2.5 .NET Frameworkデータプロバイダの使用例
次 の サ ン プ ル は 、. N E T F r a m e w o r k D a t a P r o v i d e r f o r S Q L S e r v e rを 使 用 し 、S Q L S e r v e rの テ ー ブ ル( S TO C K )の コ ピ ー をD a t a S e tに 作 成 し て い ま す 。 他 の 種 類 の. N E T F r a m e w o r kデ ー タ プ ロ バ イ ダ を 使 用 す る 場 合 も 、 基 本 的 な 手 順 は 同 じ で す 。
.NET Framework Data provider for SQL Server Connection
SQL Server テーブル
DataSet 1.Connectionオブジェクトの生成
2.接続のオープン
4.DataSetオブジェクトの生成
5.データソースの内容をDataSetに反映
.NET Framework Data provider for SQL Server Connection
SQL Server テーブル
.NET Framework Data provider for SQL Server Connection DataAdapter 3.DataAdapterオブジェクトの生成
SQL Server テーブル
6.接続の終了
.NET Framework Data provider for SQL Server Connection DataAdapter SQL Server
テーブル
.NET Framework Data provider for SQL Server Connection DataAdapter SQL Server
テーブル
DataSet DataTable
.NET Framework Data provider for SQL Server Connection DataAdapter SQL Server
テーブル
DataSet DataTable
図 5 . 2 . 4 サ ン プ ル の 動 作 イ メ ー ジ
1 . C o n n e c t i o nオ ブ ジ ェ ク ト の 生 成
C o n n e c t i o nク ラ ス のN e wメ ソ ッ ド を 使 用 し て 、C o n n e c t i o nオ ブ ジ ェ ク ト を 作 成 し ま す 。 接 続 文 字 列 を 指 定 す る こ と も で き ま す が 、 接 続 は オ ー プ ン さ れ ま せ ん 。C o n n e c t i o nオ ブ ジ ェ ク ト 生 成 後 、
C o n n e c t i o n St r i n gプ ロ パ テ ィ に 接 続 文 字 列 を 設 定 す る こ と も 可 能 で す 。
2 . 接 続 の オ ー プ ン
C o n n e c t i o nオ ブ ジ ェ ク ト のO p e nメ ソ ッ ド を 使 用 し て 、 接 続 を オ ー プ ン し ま す 。O p e nを 省 略 し た 場 合 、D a t a A d a p t e rのF i l lメ ソ ッ ド の 使 用 時 に 自 動 的 に 接 続 が オ ー プ ン さ れ ま す 。
3 . D a t a A d a p t e rオ ブ ジ ェ ク ト の 生 成
D a t a A d a p t e rク ラ ス のN e wメ ソ ッ ド を 使 用 し て 、D a t a A d a p t e rオ ブ ジ ェ ク ト を 生 成 し ま す 。 こ の 時 点 で 、 パ ラ メ ー タ ー と し てS Q L文 や C o n n e c t i o nオ ブ ジ ェ ク ト を 指 定 す る こ と が で き ま す 。 ま た は 、 D a t a A d a p t e rオ ブ ジ ェ ク ト 生 成 後 に 、C o m m a n dク ラ ス を 使 用 し て 、 S e l e c t C o m m a n dプ ロ パ テ ィ な ど で 値 を 設 定 す る こ と も 可 能 で す 。
4 . D a t a S e tオ ブ ジ ェ ク ト の 生 成
D a t a S e tク ラ ス のN e wメ ソ ッ ド を 使 用 し て 、D a t a S e tオ ブ ジ ェ ク ト を 生 成 し ま す 。D a t a S e tオ ブ ジ ェ ク ト を 生 成 し た だ け で は 、 デ ー タ は 格 納 さ れ ま せ ん 。
5 . デ ー タ ソ ー ス の 内 容 を デ ー タ セ ッ ト に 反 映
D a t a A d a p t e rのF i l lメ ソ ッ ド を 使 用 し て 、 デ ー タ ソ ー ス で あ るS Q L S e r v e rの デ ー タ をD a t a S e tに 反 映 し ま す 。 接 続 が 開 か れ て い な い 場 合 は 、 自 動 的 に 接 続 を 開 き 、 処 理 を 行 っ た あ と に 自 動 的 に 接 続 を 終 了 し ま す 。
6 . 接 続 の 終 了
O p e nメ ソ ッ ド で 接 続 を 開 い て い る 場 合 、C o n n e c t i o nオ ブ ジ ェ ク ト の
C l o s eメ ソ ッ ド を 使 用 し て 、 接 続 を 終 了 し ま す 。
サ ン プ ル リ ス ト
* リ ポ ジ ト リ 段 落 R E P O S I T O R Y . ・ ・ ・ ・
C L A S S C L A S S - D A T A S E T A S
" S y s t e m . D a t a . D a t a S e t "
C L A S S C L A S S - D A T A T A B L E A S " S y s t e m . D a t a . D a t a T a b l e "
C L A S S C L A S S - D A T A T A B L E S A S
" S y s t e m . D a t a . D a t a T a b l e C o l l e c t i o n "
・ ・ ・ ・ ・
C L A S S C L A S S - C O N N E C T I O N A S
" S y s t e m . D a t a . S q l C l i e n t . S q l C o n n e c t i o n "
C L A S S C L A S S - D B A D A P T E R A S
" S y s t e m . D a t a . S q l C l i e n t . S q l D a t a A d a p t e r "