第5章 データアクセス
5.1 NetCOBOL for .NETのデータアクセス
5.2 ADO.NETクラスライブラリでのデータアクセス
5.3 埋込みSQLでのデータアクセス
5.4 READ/WRITEインタフェース
5.5 データアクセスプログラムの作成
5.6 SQL CLRストアドプロシージャの作成
5.1 NetCOBOL for .NETのデータアクセス
5.1 NetCOBOL for .NETのデータアクセス
5.1.1 NetCOBOL for .NETでアクセスできるデータ
N e t C O B O L f o r . N E T に は 、 R E A D / W R I T E イ ン タ フ ェ ー ス と 埋 込 み S Q L と い う デ ー タ ア ク セ ス 方 法 が 用 意 さ れ て い ま す 。 さ ら に 、 . N E T F r a m e w o r k の ク ラ ス ラ イ ブ ラ リ で あ る 、 A D O . N E T を 利 用 す る こ と も 可 能 で す 。 し た が っ て 、 大 き く わ け て 3種類 のデ ータ アクセ ス方 法があ り ま す 。
た だ し 、 Windows版 Net COB O Lな ど でサポ ート されて いる プレコ ン パ イ ラ (Oracle Pro*COBOLな ど )は サ ポート され ていま せん ので、 注意 が 必 要 で す 。 埋め込みSQL(ODBC) ADO.NET READ/WRITEインタフェ−ス Btrieve (Pervasive) Oracle Access SQL Server Symfoware PowerRDBconnector PowerRW+ ファイル XML ADO.NETクラスライブラリ 埋込みSQL 図 5 . 1 . 1 デ ー タ ア ク セ ス の 種 類 デ ー タ ベ ー ス に よ っ て は 、 複 数 の ア ク セ ス 方 法 を 選 択 で き る こ と に な る た め 、 シ ス テ ム を 設 計 す る 時 点 で 、 ア ク セ ス 方 法 ご と の 特 徴 や 機 能 を 把 握 し て お く 必 要 が あ り ま す 。
5.1 NetCOBOL for .NETのデータアクセス
5.1.2 データアクセスの概要
( 1 ) ADO.NETクラスライブラリ
A D O . N E T ク ラ ス ラ イ ブ ラ リ は 、 . N E T F r a m e w o r k で 提 供 さ れ る デ ー タ ア ク セ ス 機 能 を 提 供 し ま す 。 多 く の 種 類 の デ ー タ ベ ー ス や XMLフ ァイ ル に ア ク セ ス で き 、 機 能 も 豊 富 で す 。 NetCO BOL for . NETか ら
A D O . N E T の 各 ク ラ ス を 利 用 し て 、 プ ロ グ ラ ミ ン グ す る こ と が 可 能 で す 。 し か し 、 従 来 の COBOL資 産 との互 換性 はあり ませ ん。
( 2 ) 埋込みSQL
. N E T F r a m e w o r k デ ー タ プ ロ バ イ ダ ( A D O . N E T ) 経 由 、 ま た は Wi n d o w s で 汎 用 的 な デ ー タ ベ ー ス ア ク セ ス ソ フ ト ウ ェ ア で あ る O D B C ド ラ イ バ を 経 由 し た 接 続 方 法 で す 。 Net COB O L for .NET 上 では 、 SQL文 を 利 用 し て 記 述 し ま す 。 ADO. NE Tプ ロ バイダ また は ODBCド ラ イ バが 提 供 さ れ て い る デ ー タ ベ ー ス で あ れ ば 、 原 則 と し て 接 続 す る こ と が で き ま す 。 埋 込 み SQLは 、Windows版 NetC O BOLで も サ ポー トされ てい る 形 式 で あ る た め 、 比 較 的 互 換 性 も あ り ま す 。
( 3 ) READ/WRITEインタフェース
も と も と COBO Lデ ー タ ファ イルに アク セスす るた めの READ/WR ITE イ ン タ フ ェ ー ス (入出力 文 )ですが 、 NetCO BOL for . NETか ら
R E A D / W R I T E イ ン タ フ ェ ー ス を そ の ま ま 利 用 で き る デ ー タ ベ ー ス と し て 、 PowerRW+(富 士 通 )と Btrieveが あ ります 。
ま た 、 PowerRDBconnectorを 利 用 する ことで 、 SQL Serverや Or a cle デ ー タ ベ ー ス に も ア ク セ ス す る こ と が で き ま す 。 従 来 の フ ァ イ ル ア ク セ ス と 同 様 の 記 述 で デ ー タ ベ ー ス ア ク セ ス が 可 能 な た め 、 資 産 の 互 換 性 が 高 い の が 特 徴 で す 。
5.2 ADO.NETクラスライブラリでのデータアクセス
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 で 提 供 さ れ る デ ー タ ア ク セ ス 機 能 を 提 供 し ま す 。 ADO. NE Tは 非 常に多 機能 で、様 々な 種類の デー タにア ク セ ス す る こ と が で き ま す 。 ま た 、 接 続 を 受 け 持 つ 部 分 と デ ー タ の 操 作 を 受 け 持 つ 部 分 が 分 離 さ れ て お り 、 デ ー タ の 種 類 に 依 存 し た プ ロ グ ラ ミ ン グ を 行 う 必 要 が ほ と ん ど あ り ま せ ん 。ま た 、 ADO.NETは 、 Windowsア プ リケー ショ ンやWeb ア プ リケ ーシ ョ ン の コ ン ト ロ ー ル と 簡 単 に 連 携 す る こ と が 可 能 で 、 プ ロ グ ラ ミ ン グ の 量 を 減 ら す こ と が 可 能 で す 。
従 来 の デ ー タ 操 作 は 、 常 に 接 続 (セ ッシ ョン)を ベ ースに 行わ れてき ま し た 。 し か し 、 ク ラ イ ア ン ト と の 接 続 が ペ ー ジ 単 位 で 切 断 さ れ る の が 通 常 の Webシス テム や、Webサ ー ビス (SOAP) と よば れるコ ンポ ーネン ト 間 の 結 合 が 緩 や か な 処 理 方 式 な ど が 広 ま る に つ れ 、 接 続 を 維 持 す る 形 式 の デ ー タ ア ク セ ス 方 式 に 無 理 が 生 じ る よ う に な り ま し た 。 .NET Framework ADO.NET マネージコード .NET Framework データプロバイダ データソース DataAdapter XML文書 DataSet Command DataReader Connection 図 5 . 2 . 1 A D O . N E T の 2 つ の コ ン ポ ー ネ ン ト
5.2 ADO.NETクラスライブラリでのデータアクセス A D O . N E T は 、 . N E T F r a m e w o r k デ ー タ プ ロ バ イ ダ と い う デ ー タ ソ ー ス へ の 処 理 を 受 け 持 つ コ ン ポ ー ネ ン ト と 、 デ ー タ セ ッ ト (Dat aSet ) と い う デ ー タ ソ ー ス と の 接 続 に 依 存 し な い コ ン ポ ー ネ ン ト に 分 離 さ れ て お り 、 We b シ ス テ ム や We b サ ー ビ ス に 最 適 な デ ー タ ア ク セ ス の た め の 方 式 で す 。 .NET Frameworkデータプロバイダ . N E T F r a m e w o r k デ ー タ プ ロ バ イ ダ は 、 デ ー タ ソ ー ス と の 接 続 と 比 較 的 簡 単 な デ ー タ ア ク セ ス 機 能 お よ び DataS et と の橋 渡しの 役割 があり ま す 。 DataSet D a t a S e t は 、 デ ー タ を 格 納 す る い わ ば 箱 と 、 デ ー タ に ア ク セ ス す る た め の 豊 富 な 機 能 が 提 供 さ れ る コ ン ポ ー ネ ン ト で す 。 デ ー タ ベ ー ス と の 接 続 部 分 は 、 .NET Frameworkデ ー タ プロ バイダ の役 割であ り、 Dat aSet は デ ー タ ベ ー ス の 種 類 に 依 存 し ま せ ん 。
な お 、 ADO.NETは 、 デー タベー ス以 外にも 、 XMLフ ァイ ルやテ キス ト フ ァ イ ル な ど 、 さ ま ざ ま な デ ー タ に ア ク セ ス で き る た め 、 ア ク セ ス す る 対 象 の デ ー タ を デ ー タ ソ ー ス と 呼 ん で い ま す 。
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 を 利 用 す る 方 法 と ADO. NE Tク ラ スライ ブラ リを利 用す る方法 があ ります 。 埋 込 み SQLを 利用 する方 法は 、「5.3 埋込 みSQLで の デー タア クセス 」 を 参 照 し て く だ さ い 。 こ こ で は 、 AD O.NET ク ラス ライブ ラリ を利用 す る 方 法 に つ い て 説 明 し ま す 。 A D O . N E T ク ラ ス ラ イ ブ ラ リ を 利 用 す る 場 合 、 手 続 き 型 の C O B O L 文 法 で デ ー タ に ア ク セ ス す る 方 法 と は 異 な る た め 、 従 来 の COBO L資 産 と の デ ー タ ア ク セ ス に 関 す る 互 換 性 が 失 わ れ ま す 。 逆 に 、 Visual Studioの 他の 言語と の互 換性が 高く なりま す。 例えば 、 V B で 利 用 で き な い N e t C O B O L f o r . N E T の デ ー タ を 、 A D O . N E T の デ ー タ (DataS et )と し て作成 しな おし、 VBに 渡す など の処理 が可 能にな りま す 。 ま た 、 READ/WR ITEや 埋 込み SQLに ない 豊富 な ADO. NETの 機 能が 利 用 で き 、 接 続 で き る デ ー タ の 種 類 や 接 続 パ タ ー ン が 増 え る な ど 、 デ ー タ ア ク セ ス の 選 択 肢 が 増 え る の も 大 き な 利 点 で す 。
5.2 ADO.NETクラスライブラリでのデータアクセス
.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 を 使 用 し た デ ー タ 連 携 イ メ ー ジ 例 え ば 、 図 の 連 携 イ メ ー ジ で は 、 Web ア プ リケ ーシ ョンを VBで 作成 し 、 デ ー タ の COBOL フ ァイ ルはク ラス ライブ ラリ 化した NetC OB OL f o r . N E T で ア ク セ ス し て い ま す 。 We b ア プ リ ケ ー シ ョ ン と ク ラ ス ラ イ ブ ラ リ 間 の デ ー タ の 連 携 に DataS et を 使用 します 。 DataS etは Webア プ リケ ー シ ョ ン の コ ン ト ロ ー ル と も 簡 単 に 連 携 で き る た め 、 Webア プ リケー シ ョ ン 側 で 複 雑 な デ ー タ 処 理 を 行 う 必 要 は あ り ま せ ん 。
5.2.3 .NET Frameworkデータプロバイダの種類
. N E T F r a m e w o r k デ ー タ プ ロ バ イ ダ は 、 プ ロ グ ラ ム と デ ー タ ソ ー ス を 結 ぶ 橋 渡 し を 行 い ま す 。 し た が っ て 、 デ ー タ ソ ー ス と の 接 続 方 法 や デ ー タ ソ ー ス の 種 類 ご と に 、 4種類 の .NET Fra mework デ ー タ プロ バイダ が用 意 さ れ て い ま す 。 ま た 、 Oracl e社 な どの データ ベー スベン ダが 、専用 の .NET Frameworkデ ー タプ ロバイ ダを 提供し てい る場合 もあ ります 。
5.2 ADO.NETクラスライブラリでのデータアクセス 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 以 降 に 接 続 す る た め の 、 専 用 の デ ー タ プ ロ バ イ ダ で す 。 .NET Framework Data Providerと SQL Serverの 間 は独 自 の プ ロ ト コ ル で 接 続 さ れ る た め 、 高 速 な 処 理 が 期 待 で き ま す 。 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 を 利 用 す る こ と も 可 能 で す 。 し か し 、 こ れ ら の 接 続 方 法 は 、 OLE DBや OD B C Drive rと い った デ ー タ ア ク セ ス の た め の 層 (ミドル ウェ ア )が 必要 になる ため 、処理 速度 が 落 ち 、 メ モ リ 使 用 量 が 増 加 し ま す 。
( 2 ) .NET Framework Data Provider for OLE DB
C O M ベ ー ス の デ ー タ ベ ー ス ア ク セ ス 技 術 で あ る O L E D B の 機 能 を 利 用 す る た め の .NET Frameworkデ ー タ プロ バイダ です 。 ADO. NET 以 前 に は 、 ADO( Activ eX D ata Obje ct ) が デ ー タ ア ク セ ス 技 術 の 中 心 で し た が 、 A D O に よ る デ ー タ ア ク セ ス 技 術 で 中 核 と な っ て い る の が O L E D B で す 。 O L E D B は 、 O L E D B プ ロ バ イ ダ と よ ば れ る 、 デ ー タ ベ ー ス ご と の ミ ド ル ウ ェ ア を 介 し て デ ー タ ベ ー ス に 接 続 し ま す 。 し た が っ て 、 OLE DBプ ロ バ イ ダ が 提 供 さ れ て い る デ ー タ ソ ー ス で あ れ ば 、 .NET Framewo rk
5.2 ADO.NETクラスライブラリでのデータアクセス
D a t a P r o v i d e r f o r O L E D B を 使 用 す る こ と で 接 続 す る こ と が で き ま す 。 ま た 、 SQL Server 6.5 以 前の 場合、 .NET Framework Data Provider for 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 に お い て 、 最 も 汎 用 的 に 利 用 さ れ て い る デ ー タ ア ク セ ス 技 術 が ODBCで す 。ほ とんど のデ ータベ ース やデー タソ ースで ODBCド ラ イ バ が 提 供 さ れ て い ま す 。 し た が っ て 、 .NET Framework Data Provider f o r O D B C を 利 用 す る こ と で 、 ほ と ん ど の デ ー タ ソ ー ス に 接 続 す る こ と が で き ま す 。 た だ し 、 ODB 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 な ど で 広 く 利 用 さ れ て い る デ ー タ ベ ー ス で あ る Oracl eに 接 続す るため の専 用のデ ータ ソース です 。接続 の た め に は 、 Oracle Client(Oracl e Net)が 必 要 とな ります 。 Oracle Client R 8 . 1 . 7 以 降 が サ ポ ー ト さ れ て い ま す 。 し た が っ て 、 O r a c l e C l i e n t の バ ー ジ ョ ン が 古 い 場 合 は 、 ODBC な ど に よ る 接 続 を 検 討 す る 必 要 が あ り ま す 。
( 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 社 で は 、 ADO. NETで Ora cleに ア ク セス する場 合、 Oracle Data Provider 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 デ ー タ プ ロ バ イ ダ で 実 装 さ れ て お り 、 そ れ ぞ れ 接 頭 辞 が 異 な り ま す 。 し か し 、 ク ラ ス の 体 系 と 機 能 は ほ ぼ 同 じ で す の で 、 接 頭 辞 を 変 更 す る だ け で 互 換 が あ り ま す 。 た だ し 、 .NET Framewo rkデ ータ プロ バ イ ダ の 種 類 に よ り 、 サ ポ ー ト さ れ る メ ソ ッ ド や プ ロ パ テ ィ が 異 な る 場 合 も あ る の で 、 完 全 に は 互 換 し て い ま せ ん (実装 によ り異な りま す )。 . 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 つ の 代 表 的 な ク ラ ス が あ り ま す 。 そ れ ぞ れ の ク ラ ス の 概 要 に つ い て 、 次 に 説 明 し ま す 。5.2 ADO.NETクラスライブラリでのデータアクセス
( 1 ) Connectionクラス
デ ー タ ソ ー ス へ 接 続 す る た め の 機 能 を 提 供 す る ク ラ ス で す 。 デ ー タ ベ ー ス へ の 接 続 は 、 Connectionオ ブ ジェ クトと して 生成さ れま す。 C o n n e c t i o n オ ブ ジ ェ ク ト イ ン ス タ ン ス を 生 成 す る 際 に 、 デ ー タ ソ ー ス へ 接 続 す る た め の 文 字 列 (接 続 文字列 )を 指定し ます 。 Openメ ソ ッド で接 続 を 開 き 、 Closeメ ソ ッド や Disposeメ ソ ッ ドで 接続 を解放 しま す。( 2 ) Commandクラス
デ ー タ ソ ー ス に 対 し て 、 SQLス テー トメ ント(Transact- SQLス テ ート メ ン ト )やス トア ドプロ シー ジャを 呼び 出すた めの クラス です 。行を 返 す SQL(SE LECT)を 発 行 する ExecuteR ead er メ ソッ ド、行 を返 さない 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 ) DataReaderクラス
デ ー タ ソ ー ス か ら 前 方 向 に デ ー タ を 読 み 込 む た め の 機 能 を 提 供 し ま す 。 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 メ ソ ッ ド を 使 用 し ま す 。 レ コ ー ド を 次 の 行 に 位 置 づ け る Readメ ソ ッド 、カ レント 行の 指定し た 列 の デ ー タ を 取 得 す る メ ソ ッ ド は 、 Getの 後 に デー タの型 名が 付いた メ ソ ッ ド が 用 意 さ れ て い ま す (GetString、 GetInt32など )。 また 、実装 ごと に デ ー タ ソ ー ス の デ ー タ 型 に 応 じ た メ ソ ッ ド が 用 意 さ れ て い る ケ ー ス も あ り ま す (GetSQLInt32、 GetOr acl eNu mb e rな ど )。( 4 ) DataAdapterクラス
D a t a S e t へ デ ー タ ソ ー ス の デ ー タ を 格 納 し た り 、 D a t a S e t の デ ー タ を デ ー タ ソ ー ス に 反 映 さ せ た り す る た め の 機 能 を 提 供 す る ク ラ ス で す 。
デ ー タ ソ ー ス の デ ー タ を DataS et に 反映 させる Fillメ ソッ ド、 Dat aSet の デ ー タ を デ ー タ ソ ー ス に 反 映 さ せ る Updateメ ソ ッドな どが 用意さ れて い ま す 。
5.2 ADO.NETクラスライブラリでのデータアクセス
5.2.5 .NET Frameworkデータプロバイダの使用例
次 の サ ン プ ル は 、 .NET Framewo rk Dat a Pr ovider for SQL S erverを 使 用 し 、 SQL Se rver の テー ブル(STOCK) の コピ ーをDat aSetに 作 成し て い ま す 。 他 の 種 類 の .NET Frameworkデ ー タ プロ バイダ を使 用する 場合 も 、 基 本 的 な 手 順 は 同 じ で す 。
.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 オ ブ ジ ェ ク ト を 作 成 し ま す 。 接 続 文 字 列 を 指 定 す る こ と も で き ま す が 、 接 続 は オ ー プ ン さ れ ま せ ん 。 Connectionオ ブジ ェクト 生成 後、 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 メ ソ ッ ド を 使 用 し て 、 接 続 を オ ー プ ン し ま す 。 Open を 省 略 した 場合、 Data Ada pterの Fillメ ソッ ドの使 用 時 に 自 動 的 に 接 続 が オ ー プ ン さ れ ま す 。
5.2 ADO.NETクラスライブラリでのデータアクセス 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 オ ブ ジ ェ ク ト を 生 成 し ま す 。 こ の 時 点 で 、 パ ラ メ ー タ ー と し て SQL 文 や 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 オ ブ ジ ェ ク ト を 生 成 し ま す 。 Dat aSetオ ブ ジェ クトを 生成 しただ けで は、デ ータ は格納 さ れ ま せ ん 。 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 "
5.2 ADO.NETクラスライブラリでのデータアクセス 0 1 t m p R o w s O B J E C T R E F E R E N C E C L A S S - D A T A R O W S . 0 1 t m p R o w O B J E C T R E F E R E N C E C L A S S - D A T A R O W . 0 1 c o n S t r O B J E C T R E F E R E N C E C L A S S - S T R I N G . 0 1 s q l S t r O B J E C T R E F E R E N C E C L A S S - S T R I N G . 0 1 t m p S t r O B J E C T R E F E R E N C E C L A S S - S T R I N G . * メ ソ ッ ド の 手 続 き 部 P R O C E D U R E D I V I S I O N U S I N G B Y V A L U E s e n d e r e . * 接 続 文 字 列 の 編 集 S E T c o n S t r T O " P e r s i s t S e c u r i t y I n f o = F a l s e ; I n t e g r a t e d S e c u r i t y = S S P I ; d a t a b a s e = s q l t m p ; s e r v e r = n e t s v " . * C o n n e c t i o n オ ブ ジ ェ ク ト の 作 成 ( 接 続 文 字 列 を 指 定 ) I N V O K E C L A S S - C O N N E C T I O N " N E W " U S I N G B Y V A L U E c o n S t r R E T U R N I N G C o n . * 接 続 を 開 く I N V O K E C o n " O p e n " . * S Q L の 編 集 S E T s q l S t r T O " S E L E C T * F R O M S T O C K " . * D a t a A d a p t e r オ ブ ジ ェ ク ト の 生 成 ( S Q L 文 と C o n n e c t i o n オ ブ ジ ェ ク ト * を 指 定 ) I N V O K E C L A S S - D B A D A P T E R " N E W " U S I N G B Y V A L U E s q l S t r C o n R E T U R N I N G A d p . * D a t a S e t オ ブ ジ ェ ク ト の 作 成 I N V O K E C L A S S - D A T A S E T " N E W " R E T U R N I N G t m p D S . * F i l l メ ソ ッ ド に よ り デ ー タ ソ ー ス の 内 容 を D a t a S e t に 反 映 I N V O K E A d p " F i l l " U S I N G t m p D S . * デ ー タ ソ ー ス と の 接 続 を 終 了 I N V O K E C o n " C l o s e " . * メ ソ ッ ド の デ ー タ 部 W O R K I N G - S T O R A G E S E C T I O N . 0 1 C o n O B J E C T R E F E R E N C E C L A S S - C O N N E C T I O N . 0 1 A d p O B J E C T R E F E R E N C E C L A S S - D B A D A P T E R . 0 1 t m p D S O B J E C T R E F E R E N C E C L A S S - D A T A S E T . 0 1 t m p T a b l e s O B J E C T R E F E R E N C E C L A S S - D A T A T A B L E S . 0 1 t m p T a b l e O B J E C T R E F E R E N C E C L A S S - D A T A T A B L E .
5.2.6 DataSet
D a t a S e t は 、 A D O . N E T で 非 接 続 型 の デ ー タ ア ク セ ス 機 能 を 提 供 す る 、 い わ ば 、 メ モ リ 上 の ミ ニ チ ュ ア デ ー タ ベ ー ス で す 。 .NET Framewo rkデ ー タ プ ロ バ イ ダ は 、 デ ー タ ソ ー ス の 種 類 に よ り 実 装 が 異 な り ま す が 、 D a t a S e t は デ ー タ ソ ー ス の 種 類 に 依 存 し な い 一 貫 し た プ ロ グ ラ ミ ン グ モ デ ル (プログ ラミ ングイ ンタ フェー ス )を提供 しま す。し たが って、 D a t a S e t に 対 す る 処 理 は 、 ど の よ う な デ ー タ ベ ー ス で も 同 じ 記 述 と な り ま す ( 図 5.2.5) 。5.2 ADO.NETクラスライブラリでのデータアクセス
SQL Server
OLE DB対応
データソース
.NET Framework Data provider for SQL Server
.NET Framework Data provider for OLE DB
.NET Framework Data provider
for ODBC データソースODBC対応
.NET Framework Data provider for Oracle
Oracle Oracle Data Provider for .NET
SqlDataAdapter OleDbDataAdapter OdbcDataAdapter OracleDataAdapter OracleDataAdapter DataSet Ne tC OBO L f o r .N E T アプ リ ケ ー シ ョ ン データソース依存 データソース無依存 図 5 . 2 . 5 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 は 、 階 層 化 さ れ た ク ラ ス か ら 構 成 さ れ て お り 、 デ ー タ ベ ー ス や Microsoft Excelに よ く似 ていま す。 Dat aSetを 利 用 す るプ ログラ ムを 作 成 す る 場 合 、 こ の 階 層 化 さ れ た イ メ ー ジ を 理 解 し て お く 必 要 が あ り ま す ( 図 5.2.6) 。ま た、 オブ ジェク トは 常にコ レク ション で管 理され ます の で 、 コ レ ク シ ョ ン の 概 念 (「3.1.3 ク ラスの 階層 とコレ クシ ョン」 参 照 )を つかん でお くこと が必 要とな りま す。
5.2 ADO.NETクラスライブラリでのデータアクセス DataSet DataTableCollection DataTable DataRow DataColumn DataRow DataRow DataRow
DataColumn DataColumn DataColumn DataColumn
DataColumnCollection D a ta R o wColle ct ion 図 5 . 2 . 6 D a t a S e t の ク ラ ス 構 成 の イ メ ー ジ
5.2.7 DataSetのクラス
( 1 ) DataSetクラス
D a t a S e t の 最 上 位 の ク ラ ス で あ り 、 D a t a S e t そ の も の で す 。( 2 ) DataTableCollectionクラス
D a t a S e t 内 の テ ー ブ ル の コ レ ク シ ョ ン を 表 す ク ラ ス で す 。 つ ま り 、 D a t a Ta b l e C o l l e c t i o n に は 、 D a t a S e t 内 の 全 て の D a t a Ta b l e オ ブ ジ ェ ク ト が 格 納 さ れ て い ま す 。 Dat aSet. Ta blesプ ロ パテ ィで DataTableCollection オ ブ ジ ェ ク ト へ の 参 照 が 返 さ れ ま す 。( 3 ) DataTableクラス
D a t a Ta b l e は 、 メ モ リ 上 の テ ー ブ ル を 表 し ま す 。 D a t a Ta b l e オ ブ ジ ェ ク ト は 、 .NET Framewo rkデ ータ プロ バイ ダのDat aAdapt erク ラ ス を使 用 し て 作 成 す る こ と も で き ま す が 、 独 自 に 作 成 す る こ と も で き ま す 。
D a t a Ta b l e オ ブ ジ ェ ク ト の 中 で 、 D a t a C o l u m n オ ブ ジ ェ ク ト と D a t a R o w オ ブ ジ ェ ク ト が 最 も 重 要 な コ ン ポ ー ネ ン ト で す 。
5.2 ADO.NETクラスライブラリでのデータアクセス
( 4 ) DataColumnCollectionクラス、DataColumnクラス
D a t a C o l u m n は 、 D a t a Ta b l e の 列 を 表 し ま す 。 D a t a Ta b l e に デ ー タ を 格 納 す る た め の 箱 の よ う な も の を ス キ ー マ と よ び ま す が 、 ス キ ー マ を 作 成 す る に は DataColu mn Collect ion に DataColu mnオ ブ ジェ クト を追加 する 必 要 が あ り ま す 。 ま た 、 DataColu mnCollectionオ ブジェ クト の参照 は、 D a t a Ta b l e . C o l u m n s プ ロ パ テ ィ で 返 さ れ ま す 。
( 5 ) DataRowCollectionクラス、DataRowクラス
D a t a R o w は D a t a Ta b l e 内 の 行 を 表 し ま す 。 D a t a Ta b l e の デ ー タ の 操 作 は 、 D a t a R o w オ ブ ジ ェ ク ト を 利 用 し て 行 わ れ ま す 。5.2.8 DataSetの使用例
「 5.2.5 .NET Frameworkデ ータ プロ バイダ の使 用例」 に引 き続く D a t a S e t の 使 用 例 で す 。 DataSet(tmpDS) DataTableCollection(tmpTables) DataTable(tmpTable = tmpTables(0)) DataRow (tmpRow = tmpRows(0)) PNO列 DataRow (tmpRow = tmpRows(1)) DataRow (tmpRow = tmpRows(2)) DataRow (tmpRow = tmpRows(3)) PNAME列 D a ta R o wColle ct ion (t m pRows ) Countプロパティ:DataTableの数 Countプロパティ:DataRowの数 図 5 . 2 . 7 D a t a S e t か ら デ ー タ を ア ク セ ス す る イ メ ー ジ こ の 例 で は 、 作 成 済 み の DataS et か ら、 DataTableCollection、 D a t a Ta b l e 、 D a t a R o w C o l l e c t i o n 、 D a t a R o w の 各 オ ブ ジ ェ ク ト を 使 用 し5.2 ADO.NETクラスライブラリでのデータアクセス サンプルリスト 0 1 t m p T a b l e O B J E C T R E F E R E N C E C L A S S - D A T A T A B L E . 0 1 t m p R o w s O B J E C T R E F E R E N C E C L A S S - D A T A R O W S . 0 1 t m p R o w O B J E C T R E F E R E N C E C L A S S - D A T A R O W . 0 1 t m p S t r O B J E C T R E F E R E N C E C L A S S - S T R I N G . 0 1 t m p O b j O B J E C T R E F E R E N C E C L A S S - O B J E C T . ・ ・ ・ * メ ソ ッ ド の 手 続 き 部 ( 差 分 の み ) * デ ー タ セ ッ ト の T a b l e s プ ロ パ テ ィ か ら * D a t a T a b l e s C o l l e c t i o n オ ブ ジ ェ ク ト を 生 成 S E T t m p T a b l e s T O P R O P - T A B L E S O F t m p D S . * D a t a T a b l e C o l l e c t i o n オ ブ ジ ェ ク ト の C o u n t プ ロ パ テ ィ を 取 得 M O V E P R O P - C O U N T O F t m p T a b l e s T O i t e m C o u n t . * C o u n t プ ロ パ テ ィ が 0 で あ れ ば I F i t e m C o u n t = 0 T H E N S E T t m p S t r T O " デ ー タ が あ り ま せ ん " I N V O K E C L A S S - M E S S A G E B O X " S h o w " U S I N G B Y V A L U E t m p S t r E X I T M E T H O D E N D - I F . * D a t a T a b l e C o l l e c t i o n オ ブ ジ ェ ク ト の 最 初 ( 0 番 目 ) の * D a t a T a b l e オ ブ ジ ェ ク ト を 取 得 S E T t m p T a b l e T O t m p T a b l e s : : " g e t _ I t e m " ( 0 ) * D a t a T a b l e オ ブ ジ ェ ク ト の R o w s プ ロ パ テ ィ か ら * D a t a R o w C o l l e c t i o n オ ブ ジ ェ ク ト を 取 得 S E T t m p R o w s T O P R O P - R O W S O F t m p T a b l e . * D a t a R o w C o l l e c t i o n オ ブ ジ ェ ク ト の C o u n t プ ロ パ テ ィ を 取 得 M O V E P R O P - C O U N T O F t m p R o w s T O i t e m C o u n t . * リ ポ ジ ト リ 段 落 ( 差 分 の み ) R E P O S I T O R Y . ・ ・ ・ ・ C L A S S C L A S S - D A T A R O W A S " S y s t e m . D a t a . D a t a R o w " C L A S S C L A S S - D A T A R O W S A S " S y s t e m . D a t a . D a t a R o w C o l l e c t i o n " 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 " ・ ・ ・ ・ ・ P R O P E R T Y P R O P - C O L U M N S A S " C o l u m n s " P R O P E R T Y P R O P - C O U N T A S " C o u n t " P R O P E R T Y P R O P - R O W S A S " R o w s " P R O P E R T Y P R O P - T A B L E S A S " T a b l e s " * メ ソ ッ ド の デ ー タ 部 ( 差 分 の み ) W O R K I N G - S T O R A G E S E C T I O N . ・ ・ ・ ・ 0 1 t m p T a b l e s O B J E C T R E F E R E N C E C L A S S - D A T A T A B L E S .
5.2 ADO.NETクラスライブラリでのデータアクセス * 行 数 分 ( C o u n t プ ロ パ テ ィ n 値 ) ル ー プ P E R F O R M V A R Y I N G I F R O M 0 B Y 1 U N T I L I > = i t e m C o u n t * I 行 目 の 行 デ ー タ ( D a t a R o w オ ブ ジ ェ ク ト ) を 取 得 S E T t m p R o w T O t m p R o w s : : " g e t _ I t e m " ( I ) * D a t a R o w オ ブ ジ ェ ク ト か ら 列 名 か ら 、 " P N O " の デ ー タ ( オ ブ ジ ェ ク ト ) を 取 得 S E T t m p O b j T O t m p R o w : : " g e t _ I t e m " ( " P N O " ) * D a t a R o w オ ブ ジ ェ ク ト か ら 列 名 か ら 、 " P N A M E " の デ ー タ ( オ ブ ジ ェ ク ト ) を 取 得 S E T t m p O b j T O t m p R o w : : " g e t _ I t e m " ( " P N A M E " ) ・ ・ ・ ・
5.3 埋込みSQLでのデータアクセス
5.3 埋込みSQLでのデータアクセス
5.3.1 埋込みSQLのイメージ
.NET Framework SQL Server COBOLソースプログラム (埋込みSQL) NetCOBOL for .NETでビルド ADO.NET .NET Frameworkデータプロバイダ アプリケーション構成ファイル Oracle OLE DB対応 データソース ODBC対応 データソース
NetCOBOL for .NETプログラム
ODBCドライバ OLEDBプロバイダ ① ② 図 5 . 3 . 1 埋 込 み S Q L の イ メ ー ジ 図 埋 込 み SQLで のデ ータベ ース 接続で は、 .NET Framewo rkデ ータ プロ バ イ ダ を 利 用 し て 接 続 す る 方 法 ( 図 5.3.1 ①) と、 ODBCド ラ イバ を利 用 し て 接 続 す る 方 法 ( 図 5.3.1 ②) があ ります 。 .NET Frameworkで は 、 .NET Frameworkデ ータ プロバ イダ を利用 して 接続す る方 法が一 般 的 で す 。 こ こ で は 、 .NET Frameworkデ ー タ プロ バイダ を利 用して 接続 す る 方 法 に つ い て 説 明 し ま す 。 デ ー タ ベ ー ス に 接 続 す る た め の 定 義 に つ い て は 、 ア プ リ ケ ー シ ョ ン 構 成 フ ァ イ ル に 記 述 し ま す 。 プ ロ グ ラ ム は 、 実 行 時 に ア プ リ ケ ー シ ョ ン 構 成 フ ァ イ ル を 優 先 し ま す 。 し た が っ て 、 デ ー タ ベ ー ス の 接 続 先 に 依 存 し な い COBOLソ ー スプロ グラ ムを作 成す ること が可 能です 。 デ ー タ ベ ー ス の 処 理 手 続 き は 、 COBO Lソ ー ス プロ グラム の中 に SQL 先 頭 子 (EXEC SQL) と SQL終 了子 (END-E XEC)で 囲 ん で記 述しま す。
5.3 埋込みSQLでのデータアクセス
5.3.2 埋込みSQLプログラム作成手順
(2)設定ファイルの作成 (3)プログラムの作成 (4)プログラムのビルド (5)プログラムの実行とデバッグ (1)データベース接続環境の作成 図 5 . 3 . 2 プ ロ グ ラ ム 作 成 手 順( 1 ) データベース接続環境の作成
埋 込 み SQLの プロ グラム は、 実行時 に初 めて.NET Frameworkデ ー タ プ ロ バ イ ダ を 利 用 し て 、 デ ー タ ベ ー ス に 接 続 し ま す 。 し た が っ て 、 デ ー タ ベ ー ス 接 続 環 境 の 作 成 や 設 定 な ど は 、 い つ 行 っ て も か ま い ま せ ん 。 し か し 、 環 境 設 定 で 作 成 し た 接 続 名 を プ ロ グ ラ ム 内 で 使 用 す る ケ ー ス も あ る た め 、 で き れ ば デ ー タ ベ ー ス 接 続 の 環 境 設 定 か ら 順 に 行 っ た ほ う が 確 実 で す 。( 2 ) 設定ファイルの作成
ア プ リ ケ ー シ ョ ン 構 成 フ ァ イ ル に 、 プ ロ グ ラ ム が 利 用 す る デ ー タ ソ ー ス や ユ ー ザ な ど の 情 報 を 登 録 し ま す 。5.3 埋込みSQLでのデータアクセス
( 3 ) プログラムの作成
C O B O L ソ ー ス プ ロ グ ラ ム の S Q L 先 頭 子 と S Q L 終 了 子 の 間 に 、 埋 込 み S Q L に よ る デ ー タ ベ ー ス 処 理 手 続 き を 記 述 し ま す 。 大 き く 分 け て 次 の 処 理 が 可 能 で す 。 コネクションの管理 (接続、変更、切断) コ ネ ク シ ョ ン と は 、 デ ー タ ベ ー ス に ア ク セ ス す る た め に 、 ク ラ イ ア ン ト と サ ー バ の 間 を 結 ん だ 接 続 関 係 の こ と で す 。 こ の 接 続 関 係 を 結 ぶ こ と に よ り 、 ク ラ イ ア ン ト か ら サ ー バ の デ ー タ ベ ー ス を ア ク セ ス す る S Q L 文 を 実 行 す る こ と が で き ま す 。 コ ネ ク シ ョ ン を 接 続 す る に は CONNE CT文 、 コネ クショ ンを 変更す る に は SET CONNECTION文 、 コネ クシ ョンを 切断 するに は D I S C O N N E C T 文 を 使 用 し ま す 。 データ操作(参照、更新、変更、削除など )デ ー タ を 操 作 す る た め に は 、 SELECT文 、 INSERT文 、 UPDATE 文 お よ び DELETE文 な どの SQL文 を利 用し ます。 カー ソルを 定義 し、 F E T C H 文 に よ っ て デ ー タ を 取 り 出 す こ と も で き ま す 。 こ れ ら の SQL文 を 動的 に生 成する こと も可能 です (動的 SQL)。 動 的 S Q L 文 で は 、 N e t C O B O L f o r . N E T に よ る S Q L 文 法 の チ ェ ッ ク は 行 い ま せ ん 。 し た が っ て 、 デ ー タ ベ ー ス に 依 存 す る SQL文 を使 用す ること も 可 能 と な り ま す 。 た だ し 、 使 用 す る SQL文が デー タベー スに 依存す る 場 合 、 NetCOBOL for .NETで は 動作 保証し てい ません ので 、利用 者 側 の 責 任 に お い て 利 用 す る こ と と な り ま す 。 ストアドプロシージャの呼出し ス ト ア ド プ ロ シ ー ジ ャ と は 、 デ ー タ ベ ー ス に 登 録 さ れ た 処 理 手 続 き の こ と で す 。 通 常 ス ト ア ド プ ロ シ ー ジ ャ は 、 デ ー タ ベ ー ス 依 存 の SQL文 で 記 述 し ま す 。 一 般 的 に は 、 ス ト ア ド プ ロ シ ー ジ ャ を 利 用 す る こ と で 、 「 処 理 手 続 き の 実 行 速 度 の 向 上 」 、 「 ク ラ イ ア ン ト − サ ー バ 間 の 通 信 負 荷 の 減 少 」 、 「 開発 /保守 の生 産性 の向上 」、 「セ キュ リティ の向 上 」 な ど の 効 果 が あ り ま す 。 N e t C O B O L f o r . N E T で は 、 C A L L 文 で ス ト ア ド プ ロ シ ー ジ ャ を 呼 び 出 す こ と が で き ま す 。
な お 、 SQL Server 20 05で はスト アド プロシ ージ ャをCOB OLで 記 述す る こ と が で き ま す 。 詳 細 は 、 「 5.6 SQL CLRス ト アドプ ロシ ージャ の 作 成 」 で 説 明 し ま す 。
5.3 埋込みSQLでのデータアクセス トランザクション処理 ト ラ ン ザ ク シ ョ ン は 、 デ ー タ ベ ー ス に 対 す る デ ー タ 操 作 の 一 貫 性 を 保 証 す る 単 位 で す 。 トラ ンザ クショ ンは 、最初 の SQL文を 実行 したと き に 開 始 さ れ 、 COMMIT文 ま たは ROLLBACK文 を 実 行し たとき に終 了 し ま す 。
な お 、 Net COB OL fo r .NETの 埋 込み SQLで は、 SQL情 報の
@ S Q L _ C O M M I T _ M O D E を M A N U A L ( デ フ ォ ル ト ) に 設 定 す る こ と に よ り 、 接 続 と 同 時 に ト ラ ン ザ ク シ ョ ン が 開 始 さ れ ま す 。
( 4 ) プログラムのビルド
ビ ル ド 時 に 、 埋 込 み SQL用 の 特別 な翻 訳オプ ショ ンやリ ンク オプシ ョ ン は 必 要 あ り ま せ ん 。 な お 、 動 的 SQL で な い SQL 文 は 、 ビ ル ド ( 翻 訳 ) 時 に チ ェ ッ ク さ れ ま す 。 し か し 、 動 的 SQLは チェ ック が行わ れま せんの で、 ビルド 時に 文法エ ラ ー を 検 出 す る こ と が で き ま せ ん 。( 5 ) プログラムの実行とデバッグ
埋 込 み SQLを 使用 したプ ログ ラムを 実行 する場 合は 、アプ リケ ーショ ン 構 成 フ ァ イ ル に 記 述 さ れ た 接 続 情 報 に 従 っ て 、 デ ー タ ベ ー ス に 接 続 し ま す 。 そ の た め 、 デ ー タ ベ ー ス が 参 照 で き な い 場 合 、 プ ロ グ ラ ム の ソ ー ス と と も に 、 設 定 フ ァ イ ル の 内 容 を 確 認 す る 必 要 が あ り ま す 。 ま た 、 動 的 SQLは 、 プロ グラ ムが実 行さ れる場 合に 初めて 利用 されま す 。 動 的 SQLは 、 翻訳 され ずその まま データ ベー スに渡 され るため 、動 的 SQLに 誤り があ る場合 、デ ータベ ース のエラ ーか らエラ ーの 原因を 確 認 す る 必 要 が あ り ま す 。5.4 READ/WRITEインタフェース
5.4 READ/WRITEインタフェース
5.4.1 アクセスするデータを切り替える仕組み
R E A D / W R I T E イ ン タ フ ェ ー ス を 利 用 し た プ ロ グ ラ ム で は 、 フ ァ イ ル や デ ー タ ベ ー ス の 種 類 が 異 な っ て も 、 プ ロ グ ラ ム の 手 続 き は ほ ぼ 同 一 で す 。 し た が っ て 、 環 境 (COB OL 初 期 化 フ ァ イ ル な ど ) を 変 更 す る だ け で 、 ア ク セ ス す る フ ァ イ ル や デ ー タ ベ ー ス を 切 り 替 え る こ と が で き ま す 。 ほ と ん ど の 場 合 、 プ ロ グ ラ ム 修 正 は 不 要 で す 。 COBOL初期化ファイルNetCOBOL for .NET
プログラム ファイル識別子=・・・・,BTRV ファイル識別子=・・・・,RDM Btrieve (Pervasive) Oracle SQL Server PowerRW+ COBOLファイルなど ファイル識別子=ファイル名 PowerRW+ インストール環境 PowerRDBconnector SQL Server版 インストール環境 PowerRDBconnector Oracle版 インストール環境 ファイル管理段落 SELECT ∼ ASSIGN ファイル識別子 図 5 . 4 . 1 デ ー タ を 切 り 替 え る 仕 組 み R E A D / W R I T E イ ン タ フ ェ ー ス に よ る C O B O L フ ァ イ ル へ の ア ク セ ス で は 、 フ ァ イ ル 管 理 段 落 (FILE-CONTROL段 落 )の SELECT句 の ASSIGN句 で フ ァ イ ル 識 別 子 を 指 定 し 、 COBOL初 期 化 ファ イルで ファ イル識 別子 と 実 フ ァ イ ル 名 を 対 応 付 け る の が 一 般 的 で す 。
R E A D / W R I T E イ ン タ フ ェ ー ス を 使 用 し た デ ー タ ベ ー ス へ の ア ク セ ス で は 、 フ ァ イ ル 識 別 子 に 指 定 す る フ ァ イ ル 名 の 後 に キ ー ワ ー ド を 指 定 す る こ と で 、 接 続 先 を 切 り 替 え ま す 。
5.4 READ/WRITEインタフェース
5.4.2 データごとのアクセス方法
( 1 ) Btrieveファイルの場合
フ ァ イ ル 名 の 後 に 「 ,BTRV」 を 付 け 加え ると、 Btrieve フ ァイ ルへア ク セ ス し ま す 。 プ ロ グ ラ ム の 記 述 は ほ と ん ど 変 更 す る 必 要 は あ り ま せ ん が 、 SEPARATE指 定 の ない 符号付 き外 部 10進 項目 を88コ ンソー シア ム 形 式 で 扱 う 際 に 、 型 変 換 の 処 理 が 必 要 に な る 場 合 が あ り ま す (データ の 変 換 機 能 が 用 意 さ れ て い ま す )。( 2 ) PowerRW+の場合
P o w e r RW + が イ ン ス ト ー ル さ れ て い る 環 境 で 、 フ ァ イ ル 名 に ア ク セ ス す る RDMフ ァイ ルのフ ァイ ル定義 体を 指定し 、そ の後に 「 ,RDM」 を付 け 加 え る と 、 PowerRW+を 利 用し たデ ータア クセ スを行 いま す。 P o w e r RW + は 、 も と も と C O B O L か ら R E A D / W R I T E イ ン タ フ ェ ー ス に よ る 接 続 を 想 定 し た デ ー タ ベ ー ス で す の で 、 ほ と ん ど の COB OL デ ー タ 型 に 対 応 し て い ま す 。 し た が っ て 、 フ ァ イ ル に ア ク セ ス す る プ ロ グ ラ ム を ほ ぼ 無 修 正 で 利 用 す る こ と が 可 能 で す 。 複 数 の ア プ リ ケ ー シ ョ ン か ら 一 つ の フ ァ イ ル に ア ク セ ス す る ケ ー ス が 想 定 さ れ る た め 、 ト ラ ン ザ ク シ ョ ン 機 能 が 用 意 さ れ て い ま す 。 ト ラ ン ザ ク シ ョ ン 機 能 を 組 み 込 む 場 合 は 、 フ ァ イ ル ア ク セ ス の 前 後 に ト ラ ン ザ ク シ ョ ン サ ブ ル ー チ ン の 呼 び 出 し 処 理 を 追 加 す る 修 正 が 必 要 で す 。 な お 、 PowerRW +は マ ルチ スレッ ドの 動作に 対応 してい ない ため、 A S P. N E T ( We b ア プ リ ケ ー シ ョ ン ) で 利 用 す る こ と は で き ま せ ん 。( 3 ) PowerRDBconnector(SQL Server/Oracle)の場合
P o w e r R D B c o n n e c t o r が イ ン ス ト ー ル さ れ て い る 環 境 で 、 フ ァ イ ル 名 の 後 に 「 ,RDM」 を 付け 加え ると、 SQL Serverか Ora cl eに ア クセス する こ と が で き ま す (PowerRDBconnectorの イ ン スト ールオ プシ ョンで 、 S Q L S e r v e r と O r a c l e の ど ち ら を 使 用 す る か 選 択 し ま す ) 。 接 続 す る デ ー タ ベ ー ス サ ー バ の 情 報 は 、 PowerRDBconnectorの 動 作 環 境 フ ァ イ ル で あ る DBIO_E NV フ ァイ ルに記 述し ます。 デ ー タ ベ ー ス の デ ー タ 型 と COBOLの デ ータ型 は、 一度 P o w e r R D B c o n n e c t o r の デ ー タ に 置 き 換 え ら れ 、 対 応 付 け ら れ ま す 。 し た が っ て 、 ほ と ん ど の 場 合 、 フ ァ イ ル を ア ク セ ス す る プ ロ グ ラ ム を ほ ぼ 無 修 正 で 利 用 す る こ と が 可 能 で す 。5.4 READ/WRITEインタフェース
想 定 さ れ る た め 、 ト ラ ン ザ ク シ ョ ン 機 能 が 用 意 さ れ て い ま す 。 ト ラ ン ザ ク シ ョ ン 機 能 を 組 み 込 む 場 合 は 、 フ ァ イ ル ア ク セ ス の 前 後 に 、 ト ラ ン ザ ク シ ョ ン サ ブ ル ー チ ン の 呼 び 出 し 処 理 を 追 加 す る 修 正 が 必 要 で す 。
5.5 データアクセスプログラムの作成
5.5 データアクセスプログラムの作成
5.5.1 プログラムの概要
( 1 ) プログラムの実行イメージ
デ ー タ ア ク セ ス プ ロ グ ラ ム の 作 成 例 と し て 、 5.5 節 では、 埋込 み SQL を 使 用 し た プ ロ グ ラ ム を 紹 介 し ま す 。 こ の 例 で は 、 デ ー タ ベ ー ス に 格 納 さ れ た 「 商 品 テ ー ブ ル 」 「 在 庫 テ ー ブ ル 」 「 社 員 テ ー ブ ル 」 に ア ク セ ス す る サ ブ プ ロ グ ラ ム を 作 成 し ま す 。 ま た 、 各 ク ラ ス の 動 作 を 確 認 す る た め の コ ン ソ ー ル ア プ リ ケ ー シ ョ ン も 合 わ せ て 作 成 し ま す 。 こ こ で は 、 デ ー タ ベ ー ス と し て SQL Se rver を 利用 してい ます が、 A D O . N E T に 対 応 し て い る デ ー タ ベ ー ス で あ れ ば 、 S Q L S e r v e r 以 外 の デ ー タ ベ ー ス で も 利 用 で き 、 プ ロ グ ラ ム の 修 正 も 必 要 あ り ま せ ん ( ア プ リ ケ ー シ ョ ン 構 成 フ ァ イ ル の 設 定 変 更 の み 必 要 ) 。 た だ し 、 次 節 「 5.6 S Q L C L R ス ト ア ド プ ロ シ ー ジ ャ の 作 成 」 で 説 明 す る ス ト ア ド プ ロ シ ー ジ ャ に 関 し て は 、 SQL Serverで し か利 用でき ませ ん。 Windows .NET Framework NetCOBOL for .NET (運用パッケージ)データベース (SQL Serverなど) コンソール アプリケーション (テスト用) サブプログラム型 クラスライブラリ 商品テーブル用(埋込みSQL) 在庫テーブル用(埋込みSQL) 従業員テーブル用(埋込みSQL) 従業員 テーブル 商品 テーブル 在庫 テーブル
NetCOBOL for .NETで作成 スクリプトを実行して設定
ADO .N E T 図 5 . 5 . 1 ( 1 ) プ ロ グ ラ ム の 運 用 イ メ ー ジ な お 、 こ こ で 作 成 し た ク ラ ス ラ イ ブ ラ リ は 、 7 章 で Webア プリ ケーシ ョ ン を 使 用 す る と き に 再 利 用 し ま す 。
5.5 データアクセスプログラムの作成
( 2 ) プログラムの構成
StockLibrary.cobproj SYAIN.COB SYOHIN.COB ZAIKO.COB IODETAIL.CBL MSGTBL.CBL COBOLソースファイル COBOL登録集ファイル StockLibrary.sln ソリューションファイル COBOLプロジェクトファイル 従業員テーブル用COBOLソースファイル 商品テーブル用COBOLソースファイル 在庫テーブル用COBOLソースファイル 画面出力用レコード用登録集 出力メッセージ用登録集 TestSYAIN.COB SYAIN.COBテスト用ソースファイル TestSYAIN..cobproj TestSYAIN.sln TestSYIHIN..cobproj TestSYOHINN.sln TestZAIKO..cobproj TestZAIKO.sln COBOLソースファイル TestSYOHIN.COB SYAIN.COBテスト用ソースファイル COBOLソースファイル TestSYAIN.exe.config TestSYOHIN.exe.config TestZAIKO.COB SYAIN.COBテスト用ソースファイル COBOLソースファイル TestSZAIKO.exe.config COBOL登録集ファイル IODETAIL.CBL 実行環境設定ファイル 実行環境設定ファイル 実行環境設定ファイル 画面出力用レコード用登録集 図 5 . 5 . 1 ( 2 ) サ ン プ ル プ ロ グ ラ ム の 構 成 フ ァ イ ル デ ー タ ベ ー ス ア ク セ ス を 行 う た め の 、 サ ブ プ ロ グ ラ ム を 集 め た ク ラ ス ラ イ ブ ラ リ は 、 同 じ プ ロ ジ ェ ク ト に 作 成 し ま す 。 ま た 、 プ ロ グ ラ ム の 実 行 に 必 要 な 登 録 集 も プ ロ ジ ェ ク ト に 登 録 し ま す 。 ま た 、 作 成 し た サ ブ プ ロ グ ラ ム を 検 証 す る た め 、 サ ブ プ ロ グ ラ ム ご と に 簡 単 な コ ン ソ ー ル ア プ リ ケ ー シ ョ ン を 作 成 し ま す 。 各 プ ロ グ ラ ム は 、 独 自 の コ ン ソ ー ル ア プ リ ケ ー シ ョ ン と し て 作 成 す る た め 、 ソ ー ス フ ァ イ ル と と も に 、 実 行 時 に 必 要 な 設 定 を 格 納 し た 実 行 環 境 設 定 フ ァ イ ル を 作 成 し ま す 。 実 行 環 境 設 定 フ ァ イ ル に は 、 埋 込 み SQLで 使用 する 接続文 字 列 設 定 な ど の 情 報 を 格 納 し ま す 。( 3 ) サブプログラムの仕様
3 種 類 の サ ブ プ ロ グ ラ ム の 仕 様 に つ い て 説 明 し ま す 。5.5 データアクセスプログラムの作成 SYAIN.COBサブプログラム 社 員 コ ー ド と パ ス ワ ー ド を 受 け 取 り 、 社 員 テ ー ブ ル を 読 み 込 ん で 認 証 処 理 を 行 い ま す 。 認 証 の 結 果 は 、 戻 り 値 で 返 し ま す 。 ま た 、 エ ラ ー 発 生 時 の メ ッ セ ー ジ も パ ラ メ ー タ ー と し て 返 し ま す 。 ( パ ラ メ ー タ ー と 戻 り 値 ) パ ラ メ ー タ ー I N / O U T 型 意 味 P - E m p l o y e e C o d e I N N ( 6 ) 社 員 コ ー ド P - P a s s w o r d I N N ( 6 ) パ ス ワ ー ド P - M s g O U T N ( 2 0 ) 例 外 メ ッ セ ー ジ 戻 り 値 I N / O U T 意 味 R - R e t u r n C o d e O U T B I N A R Y - L O N G 認 証 O K : 0 社 員 コ ー ド 誤 り : 2 パ ス ワ ー ド 誤 り : 3 SYOHIN.COBサブプログラム 商 品 コ ー ド の み 格 納 さ れ た 商 品 レ コ ー ド を 受 け 取 り 、 商 品 テ ー ブ ル を 検 索 し て 、 該 当 す る 商 品 コ ー ド の レ コ ー ド を 読 み 込 み 、 商 品 レ コ ー ド と し て 呼 出 し 元 に 返 し ま す 。 ( パ ラ メ ー タ ー と 戻 り 値 ) パ ラ メ ー タ ー I N / O U T 型 意 味 P - S Y O H I N R E C I N / O U T 集 団 項 目 商 品 レ コ ー ド P - S Y O C D I N / O U T P I C 9 ( 5 ) 商 品 コ ー ド P - S Y O N A O U T P I C N ( 2 0 ) 商 品 名 P - B A I K A O U T P I C 9 ( 8 ) 売 価 P - G E N K A O U T P I C 9 ( 8 ) 原 価 P - M s g O U T N ( 2 0 ) 例 外 メ ッ セ ー ジ 戻 り 値 I N / O U T 型 意 味 R - R e t u r n C o d e O U T B I N A R Y - L O N G 正 常 終 了 : 0 商 品 コ ー ド な し : 5 ZAIKO.COBサブプログラム 指 定 さ れ た 商 品 コ ー ド の 在 庫 状 況 に つ い て 、 在 庫 テ ー ブ ル を 読 み 込 み 、 画 面 出 力 用 の 1 ペー ジ分 (10行 )のレ コー ドを生 成し 、呼出 し元 に返し ま す 。
5.5 データアクセスプログラムの作成 ( パ ラ メ ー タ ー と 戻 り 値 ) パ ラ メ ー タ ー I N / O U T 型 意 味 M - A R E A I N / O U T I O D E T A I L . C B L パ ラ メ ー タ ー 用 レ コ ー ド P - S t a r t I N / O U T B I N A R Y - L O N G 開 始 行 P - C n t O U T P I C 9 ( 3 ) 件 数 P - N e x t O U T P I C 9 ( 1 ) 次 レ コ ー ド 有 無 P - M s g O U T N ( 2 0 ) 例 外 メ ッ セ ー ジ 戻 り 値 I N / O U T 型 意 味 R - R e t u r n C o d e O U T B I N A R Y - L O N G 正 常 終 了 : 0 商 品 コ ー ド な し : 5
5.5.2 プログラム作成手順
( 1 ) データベース環境設定
利 用 す る デ ー タ ベ ー ス を 構 築 し ま す 。 今 回 は 、 デ ー タ ベ ー ス 構 築 の た め の ス ク リ プ ト (cobdb.sql)を 提供 して います 。 Sampl eDataフ ォ ル ダ内 の setupcobdb.batを コマ ンド ライン から 実行す ると 、 SQL Se rver 上 に構 築 さ れ ま す 。 setupcobdb.batで は、 SQL Server 2005/2008 Expressを 想 定 し て い ま す 。( 2 ) プロジェクトの作成とファイルの追加
サ ブ プ ロ グ ラ ム が 格 納 さ れ る ク ラ ス ラ イ ブ ラ リ 用 の プ ロ ジ ェ ク ト を 作 成 し 、 サ ブ プ ロ グ ラ ム 用 の COBOLソ ー スファ イル などを 追加 します 。( 3 ) COBOL手続きの編集
埋 込 み SQLを 使用 して、 デー タベー スに アクセ スす る COBO L手 続 き を 編 集 し ま す 。( 4 ) プログラムの実行とデバッグ
プ ロ グ ラ ミ ン グ が 完 了 し た ら 、 通 常 は 、 ビ ル ド 後 に 実 行 / デ バッ グを 行 い ま す 。 し か し 、 今 回 作 成 す る の は ク ラ ス ラ イ ブ ラ リ の た め 、 そ の ま ま で は 実 行 お よ び デ バ ッ グ が で き ま せ ん 。 し た が っ て 、 ク ラ ス ラ イ ブ ラ リ を 呼 び 出 す た め の 簡 単 な コ ン ソ ー ル ア プ リ ケ ー シ ョ ン を 作 成 し な が ら 、 ク ラ ス ラ イ ブ ラ リ の 動 作 確 認 を 行 い ま す 。5.5 データアクセスプログラムの作成
5.5.3 プロジェクトの作成とファイルの追加
は じ め に 、 デ ー タ ベ ー ス に ア ク セ ス す る サ ブ プ ロ グ ラ ム を 管 理 す る プ ロ ジ ェ ク ト を 作 成 し ま す 。 ¾ 手 順 1 N e t C O B O L f o r . N E T を 起 動 し 、 [ フ ァ イ ル ] メ ニ ュ ー よ り [ 新 規 作 成 ] -[ プ ロ ジ ェ ク ト ] を 選 択 し ま す 。 ¾ 手 順 2 [ 新 し い プ ロ ジ ェ ク ト ] ダ イ ア ロ グ ボ ッ ク ス が 表 示 さ れ ま す 。 [ プ ロ ジ ェ ク ト の 種 類 ]よ り [COBOLプ ロ ジェ クト ]を 選 択し 、 [テ ンプ レート ]よ り [ク ラ スラ イブ ラリ]を 選 択 しま す。 プロジ ェク ト名に 「 StockLibrary 」と入 力し 、 [OK ]ボ タ ン を 押し ます。 作 成 し た プ ロ ジ ェ ク ト の ソ ー ス フ ァ イ ル に は Clas s1.cob が 自動 生成さ れ ま す が 、 今 回 は 使 用 し ま せ ん 。 ソ リ ュ ー シ ョ ン エ ク ス プ ロ ー ラ か ら C l a s s 1 . c o b を 右 ク リ ッ ク し 、 削 除 を 選 ん で 削 除 し て く だ さ い 。 ¾ 手 順 3 作 成 し た [StockLibrar y ]プ ロ ジ ェク トに ソース プロ グラム を追 加しま す 。 [ソ リュ ーシ ョンエ クス プロー ラ ]の [St ockLibrary ]プ ロ ジ ェク ト よ り [ソ ース ファ イル]フ ォ ル ダを 右ク リック しま す。[追 加 ]- [新 し い5.5 データアクセスプログラムの作成 ( S YA I N . C O B 、 S Y O H I N . C O B 、 Z A I K O . C O B ) を 新 規 に 追 加 し て く だ さ い 。 1 2 3 「StockLibrary」プロジェ クト内の[ソースファイル] フォルダを右クリックし[追 加]-[新しい項目の追加] をクリック [テンプレート]より[プログラム] を選択し、ファイル名を入力 「SYAIN.cob」 1、2の処理を繰り返し、「ソー スファイル」フォルダに次のプ ログラムファイルを作成 ・SYAIN.cob ・SYOHIN.cob ・ZAIKO.cob 図 5 . 5 . 3 ソ ー ス プ ロ グ ラ ム 追 加 手 順
5.5.4 COBOL手続きの編集
次 に 、 追 加 し た プ ロ グ ラ ム を コ ー テ ィ ン グ し ま す 。 作 成 す る プ ロ グ ラ ム は 次 の 3本 です 。 9 SYAIN.COB 9 SYOHIN.COB 9 ZAIKO.COB5.5 データアクセスプログラムの作成 SYAIN.COB ( 社 員 テ ー ブ ル に ア ク セ ス し 、 認 証 を 行 う ) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * プ ロ グ ラ ム 名 : S Y A I N * 概 要 : 社 員 テ ー ブ ル に ア ク セ ス し 認 証 を 行 う 。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I D E N T I F I C A T I O N D I V I S I O N . P R O G R A M - I D . S Y A I N . E N V I R O N M E N T D I V I S I O N . C O N F I G U R A T I O N S E C T I O N . S P E C I A L - N A M E S . R E P O S I T O R Y . D A T A D I V I S I O N . F I L E S E C T I O N . W O R K I N G - S T O R A G E S E C T I O N . * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * ホ ス ト 変 数 宣 言 * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = E X E C S Q L B E G I N D E C L A R E S E C T I O N E N D - E X E C . 0 1 S Q L S T A T E P I C X ( 5 ) . 0 1 S Q L M S G P I C X ( 1 2 8 ) . 0 1 S Y A P F - R E C . 0 2 S Y A C D P I C S 9 ( 9 ) C O M P - 5 . 0 2 S Y A N A P I C N ( 2 0 ) . 0 2 P A S S P I C N ( 6 ) . 0 2 B U S Y O P I C S 9 ( 9 ) C O M P - 5 . 0 2 S D A T E P I C S 9 ( 9 ) C O M P - 5 . 0 2 S N A M E P I C N ( 2 0 ) . 0 1 S - S Y A C D P I C S 9 ( 9 ) C O M P - 5 . E X E C S Q L E N D D E C L A R E S E C T I O N E N D - E X E C . C O P Y M S G T B L . L I N K A G E S E C T I O N . 0 1 P - E m p l o y e e C o d e P I C N ( 0 6 ) . 0 1 P - P a s s w o r d P I C N ( 0 6 ) . 0 1 P - M s g P I C N ( 2 0 ) . 0 1 R - R e t u r n C o d e B I N A R Y - L O N G . P R O C E D U R E D I V I S I O N U S I N G P - E m p l o y e e C o d e * > 社 員 コ ー ド P - P a s s w o r d * > パ ス ワ ー ド P - M s g * > メ ッ セ ー ジ R E T U R N I N G R - R e t u r n C o d e . * > 戻 り 値 ( エ ラ ー コ ー ド ) P E R F O R M M A I N - S E C . P E R F O R M E N D - S E C . E X I T P R O G R A M . M A I N - S E C S E C T I O N . * レ コ ー ド が な か っ た 場 合 の 動 作 E X E C S Q L W H E N E V E R N O T F O U N D G O T O : P - N O T F O U N D E N D - E X E C . * D B 接 続 E X E C S Q L C O N N E C T T O D E F A U L T E N D - E X E C .
5.5 データアクセスプログラムの作成 * S Q L 実 行 E X E C S Q L S E L E C T S Y A C D , P A S S I N T O : S Y A C D , : P A S S F R O M S Y A P F W H E R E S Y A C D = : S - S Y A C D E N D - E X E C * パ ス ワ ー ド 比 較 I F S Q L S T A T E = " 0 0 0 0 0 " A N D P A S S = P - P a s s w o r d T H E N M O V E 0 T O R - R e t u r n C o d e E L S E M O V E 3 T O R - R e t u r n C o d e E N D - I F E N D - I F . E N D - S E C S E C T I O N . * D B ク ロ ー ズ E X E C S Q L D I S C O N N E C T D E F A U L T E N D - E X E C . * メ ッ セ ー ジ 設 定 I F R - R e t u r n C o d e > 1 T H E N M O V E M S G - D S P ( R - R e t u r n C o d e ) T O P - M s g E N D - I F . N O T F O U N D - S E C S E C T I O N . P - N O T F O U N D . * 社 員 コ ー ド が 見 つ か ら な か っ た 場 合 の 処 理 M O V E 2 T O R - R e t u r n C o d e . P E R F O R M E N D - S E C . E N D P R O G R A M S Y A I N . * 接 続 確 認 I F S Q L S T A T E = " 0 0 0 0 0 " O R S Q L S T A T E = " 0 1 0 0 0 " T H E N M O V E F U N C T I O N D I S P L A Y - O F ( P - E m p l o y e e C o d e ) T O S - S Y A C D
5.5 データアクセスプログラムの作成 SYOHIN.COB ( 商 品 テ ー ブ ル に ア ク セ ス し 、 商 品 レ コ ー ド の 取 得 を 行 う ) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * プ ロ グ ラ ム 名 : S Y O H I N * 概 要 : 商 品 テ ー ブ ル に ア ク セ ス し 、 * 商 品 レ コ ー ド の 取 得 を 行 う 。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I D E N T I F I C A T I O N D I V I S I O N . P R O G R A M - I D . S Y O H I N . E N V I R O N M E N T D I V I S I O N . C O N F I G U R A T I O N S E C T I O N . S P E C I A L - N A M E S . R E P O S I T O R Y . I N P U T - O U T P U T S E C T I O N . D A T A D I V I S I O N . W O R K I N G - S T O R A G E S E C T I O N . * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * ホ ス ト 変 数 宣 言 * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = E X E C S Q L B E G I N D E C L A R E S E C T I O N E N D - E X E C . 0 1 S Q L S T A T E P I C X ( 5 ) . 0 1 S Q L M S G P I C X ( 1 2 8 ) . 0 1 S Y O P F - R E C . 0 2 S Y O C D P I C S 9 ( 9 ) C O M P - 5 . 0 2 S Y O N A P I C N ( 2 0 ) . 0 2 B A I K A P I C S 9 ( 9 ) C O M P - 5 . 0 2 G E N K A P I C S 9 ( 9 ) C O M P - 5 . 0 1 S - S Y O C D P I C S 9 ( 9 ) C O M P - 5 . E X E C S Q L E N D D E C L A R E S E C T I O N E N D - E X E C . C O P Y M S G T B L . L I N K A G E S E C T I O N . 0 1 P - S Y O H I N R E C . 0 2 P - S Y O C D P I C 9 ( 5 ) . 0 2 P - S Y O N A P I C N ( 2 0 ) . 0 2 P - B A I K A P I C 9 ( 8 ) . 0 2 P - G E N K A P I C 9 ( 8 ) . 0 1 P - M s g P I C N ( 2 0 ) . 0 1 R - R e t u r n C o d e B I N A R Y - L O N G . P R O C E D U R E D I V I S I O N U S I N G P - S Y O H I N R E C * > 商 品 レ コ ー ド P - M s g * > メ ッ セ ー ジ R E T U R N I N G R - R e t u r n C o d e . * > 戻 り 値 ( エ ラ ー コ ー ド ) P E R F O R M M A I N - S E C . P E R F O R M E N D - S E C . E X I T P R O G R A M . M A I N - S E C S E C T I O N . * レ コ ー ド が な か っ た 場 合 の 動 作 E X E C S Q L W H E N E V E R N O T F O U N D G O T O : P - N O T F O U N D E N D - E X E C . * D B 接 続 E X E C S Q L C O N N E C T T O D E F A U L T E N D - E X E C .
5.5 データアクセスプログラムの作成 * 接 続 確 認 I F S Q L S T A T E = " 0 0 0 0 0 " O R S Q L S T A T E = " 0 1 0 0 0 " T H E N M O V E P - S Y O C D O F P - S Y O H I N R E C T O S - S Y O C D * S Q L 実 行 E X E C S Q L S E L E C T S Y O C D , S Y O N A , B A I K A , G E N K A I N T O : S Y O C D , : S Y O N A , : B A I K A , : G E N K A F R O M S Y O P F W H E R E S Y O C D = : S - S Y O C D E N D - E X E C * 取 得 デ ー タ の 転 記 I F S Q L S T A T E = " 0 0 0 0 0 " T H E N M O V E S Y O C D T O P - S Y O C D M O V E S Y O N A T O P - S Y O N A M O V E B A I K A T O P - B A I K A M O V E G E N K A T O P - G E N K A E N D - I F E N D - I F . E N D - S E C S E C T I O N . * D B ク ロ ー ズ E X E C S Q L D I S C O N N E C T D E F A U L T E N D - E X E C . * メ ッ セ ー ジ 設 定 I F R - R e t u r n C o d e > 1 T H E N M O V E M S G - D S P ( R - R e t u r n C o d e ) T O P - M s g E N D - I F . N O T F O U N D - S E C S E C T I O N . P - N O T F O U N D . * 商 品 コ ー ド が 見 つ か ら な か っ た 場 合 の 処 理 M O V E 5 T O R - R e t u r n C o d e . P E R F O R M E N D - S E C . E N D P R O G R A M S Y O H I N . ZAIKO.COB ( 入 出 庫 テ ー ブ ル か ら 入 出 庫 明 細 を 取 得 す る ) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * プ ロ グ ラ ム 名 : Z A I K O * 概 要 : 入 出 庫 テ ー ブ ル か ら 入 出 庫 明 細 を 取 得 す る 。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I D E N T I F I C A T I O N D I V I S I O N . P R O G R A M - I D . Z A I K O . E N V I R O N M E N T D I V I S I O N . C O N F I G U R A T I O N S E C T I O N . S P E C I A L - N A M E S . R E P O S I T O R Y . I N P U T - O U T P U T S E C T I O N . D A T A D I V I S I O N . F I L E S E C T I O N . W O R K I N G - S T O R A G E S E C T I O N .