Skip to content

Tutorial_DPQ_analytical_tool.ja

yusukemaegawa edited this page Sep 15, 2017 · 1 revision

Open 棟梁チュートリアル (動的パラメタライズド・クエリ分析ツール編)

2014年4月5日

はじめに

本ドキュメントの目的

本チュートリアルでの演習に沿って、Open棟梁の「動的パラメタライズド・クエリ 分析ツール」を使用することで、本ツールを使用した、動的パラメタライズド・クエリの作成方法、実行結果の確認方法等を習得することを目的としています。

本ドキュメントの対象

Open 棟梁を用いたアプリケーションにおいて、クエリファイルの作成を担当する SE・開発者

本ドキュメントの概要

本チュートリアルでは、Open 棟梁の「動的パラメタライズド・クエリ 分析ツール」を使用した、動的パラメタライズド・クエリの作成方法、実行結果の確認方法等を、順を追って説明します。

他社所有名称に対する表示

本ドキュメントに記載の会社名・商品名は、各社の商標または登録商標です。

ライセンス

本ドキュメントは、クリエイティブ・コモンズ CC BY 2.1 JP ライセンスの下で利用可能です。

目次

1. Open棟梁の概要

2. 環境設定

3. 演習

1. Open棟梁の概要

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 形式のファイルの生成・構文チェック・実行テストなどを行うための「動的パラメタライズド・クエリ 分析ツール」を提供しています。本チュートリアルでは、この動的パラメタライズド・クエリ 分析ツールの使用方法を手順にそって示します。

なお、本ドキュメントでは、動的パラメタライズド・クエリ 分析ツールを、単に「分析ツール」と略します。

2. 環境設定

本チュートリアルでは、以下の環境を前提としています。

  • 開発環境
    • IDE
      • Visual Studio 2015 (Express Edition も利用できます)
    • アプリケーション フレームワーク
      • Open 棟梁テンプレート・ベース (Visual Studio 2015 用)
  • 実行環境
    • ランタイム
      • .NET Framework 4.6
    • DB
      • SQL Server Express 2008 R2
  • その他
    • OS
      • Windows 7

あらかじめ、マイクロソフトのサイトなどを参考に、Visual Studio をインストールしておいてください。

次に、Open 棟梁テンプレート・ベース、データベースをセットアップします。

  1. GitHub で [Download ZIP] ボタンを押下して OpenTouryoTemplates.zip を入手し、これを解凍して Open 棟梁テンプレート・ベース (Visual Studio 2015 用) を取得します。

  2. root_VS2015 フォルダにある Readme.md の手順に従って、Open 棟梁テンプレート・ベースとサンプルデータベースのセットアップを行います。

3. 演習

Open 棟梁を用いた開発の流れを、順を追って説明します。なお、本ドキュメントでは Open 棟梁の動的パラメタライズド・クエリ機能の詳細は説明しません。動的パラメタライズド・クエリ機能の詳細につきましては、Open 棟梁の利用ガイド (動的パラメタライズド・クエリ編) をご覧ください。

3.1 分析ツールの起動

  1. C:\root\programs\C#\Frameworks\DPQuery_Tool\bin\Debug\DPQuery_Tool.exe を実行します。

  2. 分析ツールが起動することを確認します。

3.2 DBへの接続

  1. 分析ツールの「データプロバイダを選択します」のドロップダウンリストが、「SQL Server - sqlClient」になっていることを確認します。

  2. 「接続文字列を設定します」のテキストボックスに、以下の接続文字列を設定します。

    Data Source=localhost\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;
  3. 「接続」ボタンをクリックして、DB に接続します。

  4. DB 接続に成功し、「接続」ボタンが非活性化されること、「クエリ実行」ボタンが活性化されることを確認します。

3.3 静的 SQL の作成および実行

3.3.1 条件指定なしの静的 SQL の実行

  1. 分析ツール上部のテキストボックスに、以下の SQL 文を入力します。

    SELECT * FROM SHIPPERS
  2. 「クエリ実行」ボタンをクリックします。

  3. 「TextBoxから実行」ダイアログが表示されますので、「OK」ボタンをクリックします。

  4. 結果ダイアログが表示され、Shippers テーブルの全レコードが取得できていることを確認します。

  5. 「閉じる」ボタンをクリックし、ダイアログを閉じます。

3.3.2 条件指定ありの静的 SQL の実行

  1. 検索条件を含めたクエリを実行するために、分析ツール上部のテキストボックスの SQL 文を、以下のように修正します。

    SELECT * FROM SHIPPERS WHERE SHIPPERID = 1
  2. 3.3.1 項と同様に「クエリ実行」ボタンをクリックしてクエリを実行します。今度は Shippers テーブルの中から ShipperId が "1" のレコードのみ取得できることを確認します。

  3. 「閉じる」ボタンをクリックし、ダイアログを閉じます。

3.3.3 検索条件をパラメタ化した静的SQLの実行

  1. 次に、分析ツール上部のテキストボックスの SQL 文を、以下のようにパラメタ化します。(このように書くと、実行時に /*PARAM* p1, Int32, 1 *PARAM*/ の部分が解析され、パラメーター p1 に、数値型 (Int32) の値 1 がセットされます)

    SELECT * FROM SHIPPERS WHERE SHIPPERID = @p1
    /*PARAM* p1, Int32, 1 *PARAM*/
  2. 「クエリ実行」ボタンをクリックし、3.3.2 項と同様、Shippers テーブルの中から ShipperId が "1" のレコードのみ取得できることを確認します。

  3. 「閉じる」ボタンをクリックし、ダイアログを閉じます。

3.4 動的 SQL の作成および実行

3.4.1 クエリの動的化

本項では、まず 3.3.3 項で作成した、検索条件をパラメタ化した静的 SQL を、Open 棟梁の動的パラメタライズド クエリの記述に従って動的化します。

  1. 分析ツールの上部のテキストボックスの内容を消去します。

  2. テキストボックスで右クリックし、タグ一覧から「TEMPLATE」を選択します。

  3. テキストボックスに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 棟梁の利用ガイド (動的パラメタライズド・クエリ編) をご覧ください。

  4. 「クエリ実行」ボタンをクリックします。

  5. 「TextBoxから実行」ダイアログが表示されますので、「OK」ボタンをクリックします。

  6. 結果ダイアログが表示され、Shippers テーブルの中から ShipperId が "1" のレコードのみ取得できることを確認します。

  7. 「閉じる」ボタンをクリックし、ダイアログを閉じます。

  8. 「SQL」タブを選択して、実行された SQL 文を確認します。

  9. 「LOG」タブを選択して、SQL 文の実行ログを確認します。

  10. 「閉じる」ボタンをクリックし、ダイアログを閉じます。

3.4.2 Where 句への検索条件の追加

  1. 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>
  2. 「クエリ実行」ボタンをクリックし、Shippers テーブルの中から ShipperId が "1" で、かつ CompanyName が "Speedy Express" のレコードのみ取得できることを確認します。

  3. 「SQL」タブを選択して、実行された SQL 文を確認します。

  4. 「LOG」タブを選択して、SQL 文の実行ログを確認します。

  5. 次に、パラメタを指定しなかった場合の動作を確認するため、パラメタ「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>
  6. 「クエリ実行」ボタンをクリックします。

  7. 「SQL」タブを選択して、検索条件に ShipperId を含まず、CompanyName のみで検索していることを確認します。

  8. 「LOG」タブを選択して、こちらでも検索条件に ShipperId が含まれないことを確認します。

  9. 「閉じる」ボタンをクリックし、ダイアログを閉じます。

  10. 今度は逆に、パラメタ「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>
  11. 「クエリ実行」ボタンをクリックします。

  12. 「SQL」タブを選択して、検索条件に CompanyName を含まず、ShipperId のみで検索していることを確認します。

  13. 「LOG」タブを選択して、こちらでも検索条件に CompanyName が含まれないことを確認します。

  14. 「閉じる」ボタンをクリックし、ダイアログを閉じます。

3.4.3 検索条件のリスト化

本項では、In 句を使用して、リスト化された条件をもとに検索を行う方法を示します。

  1. 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>
  2. 「クエリ実行」ボタンをクリックし、Shippers テーブルの中から ShipperId が "1" または "2" のレコードが取得できることを確認します。

  3. 「SQL」タブを選択して、In 句を使用したクエリが実行されたことを確認します。

  4. 「LOG」タブを選択して、こちらでも検索条件が In 句を使用したクエリが実行されたことを確認します。

3.5 アプリケーションからの動的パラメタライズド・クエリの利用

3.5.1 クエリファイルの保存

  1. 「クエリ ファイル」グループの中の「に保存」ボタンをクリックします。

  2. 名前を付けて保存ダイアログが表示されますので、以下のように設定し、クエリファイルを保存します。

    • パス
      • アプリケーション構成ファイルで、SQL を保存するフォルダへのパスで指定したパス
    • ファイル名
      • GetShippers.xml

    【注意】
    Open 棟梁を使用したアプリケーションの場合、SQL を保存するフォルダへのパスは、Web.config または app.config に設定します。詳細については Open 棟梁の利用ガイド (纏め者編) をご覧ください。

    <?xml version="1.0"?>
    <configration>
        <appSettings>
            <add key="SqlTextFilePath" value="SQL を保存するフォルダへのパス" />
        </appSettings>
    </configuration>

3.5.2 アプリケーションからのクエリファイル呼び出し

  1. Open 棟梁を使用したアプリケーションを作成します。

    【注意】
    本チュートリアルでは、Open 棟梁を使用したアプリケーションの作成方法については解説しません。Open 棟梁のチュートリアル (ASP.NET 編、2 層 C/S 編など) をご覧ください。

  2. 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;
    }
  3. アプリケーションを実行して動作を確認します。