-
Notifications
You must be signed in to change notification settings - Fork 55
Tutorial_DPQ_analytical_tool.ja
2014年4月5日
本チュートリアルでの演習に沿って、Open棟梁の「動的パラメタライズド・クエリ 分析ツール」を使用することで、本ツールを使用した、動的パラメタライズド・クエリの作成方法、実行結果の確認方法等を習得することを目的としています。
Open 棟梁を用いたアプリケーションにおいて、クエリファイルの作成を担当する SE・開発者
本チュートリアルでは、Open 棟梁の「動的パラメタライズド・クエリ 分析ツール」を使用した、動的パラメタライズド・クエリの作成方法、実行結果の確認方法等を、順を追って説明します。
本ドキュメントに記載の会社名・商品名は、各社の商標または登録商標です。
本ドキュメントは、クリエイティブ・コモンズ CC BY 2.1 JP ライセンスの下で利用可能です。
Open 棟梁は、.NET 用のアプリケーションフレームワークです。Open 棟梁は、.NET Framework 4.6 以上を対象に、C/S(Windows Forms, WPF)、Web(ASP.NET)、RIA(Silverlight) など、さまざまなアプリケーションで利用できます。
Open 棟梁のクラス構成図を図 1-1 に示します。
図 1-1 Open 棟梁のクラス構成図
Open 棟梁の動的パラメタライズド・クエリ機能は、動的 SQL を XML 形式のファイルで定義可能にしたものです。また、Open 棟梁ではその XML 形式のファイルの生成・構文チェック・実行テストなどを行うための「動的パラメタライズド・クエリ 分析ツール」を提供しています。本チュートリアルでは、この動的パラメタライズド・クエリ 分析ツールの使用方法を手順にそって示します。
なお、本ドキュメントでは、動的パラメタライズド・クエリ 分析ツールを、単に「分析ツール」と略します。
本チュートリアルでは、以下の環境を前提としています。
- 開発環境
- IDE
- Visual Studio 2015 (Express Edition も利用できます)
- アプリケーション フレームワーク
- Open 棟梁テンプレート・ベース (Visual Studio 2015 用)
- IDE
- 実行環境
- ランタイム
- .NET Framework 4.6
- DB
- SQL Server Express 2008 R2
- ランタイム
- その他
- OS
- Windows 7
- OS
あらかじめ、マイクロソフトのサイトなどを参考に、Visual Studio をインストールしておいてください。
次に、Open 棟梁テンプレート・ベース、データベースをセットアップします。
-
GitHub で [Download ZIP] ボタンを押下して OpenTouryoTemplates.zip を入手し、これを解凍して Open 棟梁テンプレート・ベース (Visual Studio 2015 用) を取得します。
-
root_VS2015 フォルダにある Readme.md の手順に従って、Open 棟梁テンプレート・ベースとサンプルデータベースのセットアップを行います。
Open 棟梁を用いた開発の流れを、順を追って説明します。なお、本ドキュメントでは Open 棟梁の動的パラメタライズド・クエリ機能の詳細は説明しません。動的パラメタライズド・クエリ機能の詳細につきましては、Open 棟梁の利用ガイド (動的パラメタライズド・クエリ編) をご覧ください。
-
C:\root\programs\C#\Frameworks\DPQuery_Tool\bin\Debug\DPQuery_Tool.exe
を実行します。 -
分析ツールが起動することを確認します。
-
分析ツールの「データプロバイダを選択します」のドロップダウンリストが、「SQL Server - sqlClient」になっていることを確認します。
-
「接続文字列を設定します」のテキストボックスに、以下の接続文字列を設定します。
Data Source=localhost\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;
-
「接続」ボタンをクリックして、DB に接続します。
-
DB 接続に成功し、「接続」ボタンが非活性化されること、「クエリ実行」ボタンが活性化されることを確認します。
-
分析ツール上部のテキストボックスに、以下の SQL 文を入力します。
SELECT * FROM SHIPPERS
-
「クエリ実行」ボタンをクリックします。
-
「TextBoxから実行」ダイアログが表示されますので、「OK」ボタンをクリックします。
-
結果ダイアログが表示され、Shippers テーブルの全レコードが取得できていることを確認します。
-
「閉じる」ボタンをクリックし、ダイアログを閉じます。
-
検索条件を含めたクエリを実行するために、分析ツール上部のテキストボックスの SQL 文を、以下のように修正します。
SELECT * FROM SHIPPERS WHERE SHIPPERID = 1
-
3.3.1 項と同様に「クエリ実行」ボタンをクリックしてクエリを実行します。今度は Shippers テーブルの中から ShipperId が "1" のレコードのみ取得できることを確認します。
-
「閉じる」ボタンをクリックし、ダイアログを閉じます。
-
次に、分析ツール上部のテキストボックスの SQL 文を、以下のようにパラメタ化します。(このように書くと、実行時に
/*PARAM* p1, Int32, 1 *PARAM*/
の部分が解析され、パラメーター p1 に、数値型 (Int32) の値 1 がセットされます)SELECT * FROM SHIPPERS WHERE SHIPPERID = @p1 /*PARAM* p1, Int32, 1 *PARAM*/
-
「クエリ実行」ボタンをクリックし、3.3.2 項と同様、Shippers テーブルの中から ShipperId が "1" のレコードのみ取得できることを確認します。
-
「閉じる」ボタンをクリックし、ダイアログを閉じます。
本項では、まず 3.3.3 項で作成した、検索条件をパラメタ化した静的 SQL を、Open 棟梁の動的パラメタライズド クエリの記述に従って動的化します。
-
分析ツールの上部のテキストボックスの内容を消去します。
-
テキストボックスで右クリックし、タグ一覧から「TEMPLATE」を選択します。
-
テキストボックスにXMLテンプレートが表示されますので、以下のようにクエリ文を記述します。
<?xml version="1.0"?> <ROOT> SELECT * FROM SHIPPERS <WHERE> WHERE <IF>SHIPPERID = @p1</IF> </WHERE> <PARAM> p1, Int32, 1 </PARAM> </ROOT>
【注意】Open 棟梁の動的パラメタライズド クエリは上記のように XML 形式の記述となっており、XML のタグ内にクエリ文を記述します。例えば、
- WHEREタグ … 検索条件 (Where 句) を記述します
- IF/ELSE タグ … 場合によって検索条件の指定方法を変えたい場合に使用します
- PARAM タグ … パラメタに指定する値を記述します
これらのタグの使用方法、記述方法の詳細については、Open 棟梁の利用ガイド (動的パラメタライズド・クエリ編) をご覧ください。
-
「クエリ実行」ボタンをクリックします。
-
「TextBoxから実行」ダイアログが表示されますので、「OK」ボタンをクリックします。
-
結果ダイアログが表示され、Shippers テーブルの中から ShipperId が "1" のレコードのみ取得できることを確認します。
-
「閉じる」ボタンをクリックし、ダイアログを閉じます。
-
「SQL」タブを選択して、実行された SQL 文を確認します。
-
「LOG」タブを選択して、SQL 文の実行ログを確認します。
-
「閉じる」ボタンをクリックし、ダイアログを閉じます。
-
ShipperId と CompanyName をもとに Shippers テーブルを検索するようにするため、分析ツール上部のテキストボックスの SQL 文を、以下のように修正します。(以下のように、パラメーターの区切りには
<DIV/>
を使います)<?xml version="1.0"?> <ROOT> SELECT * FROM SHIPPERS <WHERE> WHERE <IF>SHIPPERID = @p1</IF> <IF>AND COMPANYNAME = @p2</IF> </WHERE> <PARAM> p1, Int32, 1<DIV/> p2, String, Speedy Express </PARAM> </ROOT>
-
「クエリ実行」ボタンをクリックし、Shippers テーブルの中から ShipperId が "1" で、かつ CompanyName が "Speedy Express" のレコードのみ取得できることを確認します。
-
「SQL」タブを選択して、実行された SQL 文を確認します。
-
「LOG」タブを選択して、SQL 文の実行ログを確認します。
-
次に、パラメタを指定しなかった場合の動作を確認するため、パラメタ「p1」に対する条件指定部分をコメントアウトします。
<?xml version="1.0"?> <ROOT> SELECT * FROM SHIPPERS <WHERE> WHERE <IF>SHIPPERID = @p1</IF> <IF>AND COMPANYNAME = @p2</IF> </WHERE> <PARAM> <!--p1, Int32, 1<DIV/>--> p2, String, Speedy Express </PARAM> </ROOT>
-
「クエリ実行」ボタンをクリックします。
-
「SQL」タブを選択して、検索条件に ShipperId を含まず、CompanyName のみで検索していることを確認します。
-
「LOG」タブを選択して、こちらでも検索条件に ShipperId が含まれないことを確認します。
-
「閉じる」ボタンをクリックし、ダイアログを閉じます。
-
今度は逆に、パラメタ「p2」に対する条件指定部分をコメントアウトします。
<?xml version="1.0"?> <ROOT> SELECT * FROM SHIPPERS <WHERE> WHERE <IF>SHIPPERID = @p1</IF> <IF>AND COMPANYNAME = @p2</IF> </WHERE> <PARAM> p1, Int32, 1<!--<DIV/> p2, String, Speedy Express--> </PARAM> </ROOT>
-
「クエリ実行」ボタンをクリックします。
-
「SQL」タブを選択して、検索条件に CompanyName を含まず、ShipperId のみで検索していることを確認します。
-
「LOG」タブを選択して、こちらでも検索条件に CompanyName が含まれないことを確認します。
-
「閉じる」ボタンをクリックし、ダイアログを閉じます。
本項では、In 句を使用して、リスト化された条件をもとに検索を行う方法を示します。
-
In 句を使用してリスト化された条件から ShipperId を検索できるよう、以下のように SQL 文を修正します。(このように書くと、実行時に
p1, Int32, 1, 2
の部分が解析され、パラメーター p1 に、数値型 (Int32) の値 1 と 2 がセットされます)<?xml version="1.0"?> <ROOT> SELECT * FROM SHIPPERS <WHERE> WHERE <LIST>SHIPPERID IN (@p1)</LIST> </WHERE> <PARAM> p1, Int32, 1, 2 </PARAM> </ROOT>
-
「クエリ実行」ボタンをクリックし、Shippers テーブルの中から ShipperId が "1" または "2" のレコードが取得できることを確認します。
-
「SQL」タブを選択して、In 句を使用したクエリが実行されたことを確認します。
-
「LOG」タブを選択して、こちらでも検索条件が In 句を使用したクエリが実行されたことを確認します。
-
「クエリ ファイル」グループの中の「に保存」ボタンをクリックします。
-
名前を付けて保存ダイアログが表示されますので、以下のように設定し、クエリファイルを保存します。
- パス
- アプリケーション構成ファイルで、SQL を保存するフォルダへのパスで指定したパス
- ファイル名
- GetShippers.xml
【注意】
Open 棟梁を使用したアプリケーションの場合、SQL を保存するフォルダへのパスは、Web.config または app.config に設定します。詳細については Open 棟梁の利用ガイド (纏め者編) をご覧ください。<?xml version="1.0"?> <configration> <appSettings> <add key="SqlTextFilePath" value="SQL を保存するフォルダへのパス" /> </appSettings> </configuration>
- パス
-
Open 棟梁を使用したアプリケーションを作成します。
【注意】
本チュートリアルでは、Open 棟梁を使用したアプリケーションの作成方法については解説しません。Open 棟梁のチュートリアル (ASP.NET 編、2 層 C/S 編など) をご覧ください。 -
D 層クラスで、保存したクエリファイルを使用するため、以下のように実装する。
public DataTable GetShippers() { // クエリファイルを指定する this.SetSqlByFile2("GetShippers.xml"); // パラメタを指定する (リスト化されたパラメタのため、ArrayListで指定する) this.SetParameter("p1", new ArrayList(new int[] { 1, 2 })); // クエリを実行する DataTable dt = new DataTable(); this.ExecSelectFill_DT(dt); // クエリの実行結果を返す return dt; }
-
アプリケーションを実行して動作を確認します。