チュートリアル: ストアド プロシージャのみを使用する (C#)

このチュートリアルでは、ストアド プロシージャのみを実行してデータにアクセスする、基本の LINQ to SQL シナリオ全体を示します。 この方法は、データ ストアへのアクセス方法を制限する目的で、データベース管理者によってよく使用されます。

Note

LINQ to SQL アプリケーションでストアド プロシージャを使用して、既定の動作をオーバーライドすることもできます。これは、CreateUpdateDelete の各プロセスで特に役立ちます。 詳細については、「挿入、更新、および削除の各操作のカスタマイズ」を参照してください。

このチュートリアルでは、Northwind サンプル データベース内のストアド プロシージャにマップされた 2 つのメソッドを使用します: CustOrdersDetail および CustOrderHist。 このマップは、SqlMetal コマンド ライン ツールを実行して C# ファイルを生成したときに作成されます。 詳細については、このチュートリアルの「前提条件」を参照してください。

このチュートリアルでは、オブジェクト リレーショナル デザイナーを利用しません。 Visual Studio を使用している開発者は、O/R デザイナーを使用してストアド プロシージャの機能を実装することもできます。 「Visual Studio の LINQ to SQL ツール」を参照してください。

注意

次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「IDE をカスタマイズする」をご覧ください。

このチュートリアルは、Visual C# 開発設定を使用して記述されています。

必須コンポーネント

このチュートリアルの前提条件は次のとおりです。

  • このチュートリアルでは、専用フォルダー ("c:\linqtest7") を使用してファイルを保持します。 チュートリアルを開始する前に、このフォルダーを作成してください。

  • Northwind サンプル データベース。

    開発用コンピューターにこのデータベースがない場合は、Microsoft ダウンロード サイトからダウンロードします。 手順については、「サンプル データベースのダウンロード」を参照してください。 データベースをダウンロードしたら、northwnd.mdf ファイルを c:\linqtest7 フォルダーにコピーします。

  • Northwind データベースから生成された C# コード ファイル。

    このチュートリアルは、SqlMetal ツールを使用して次のコマンド ラインで作成されています。

    sqlmetal /code:"c:\linqtest7\northwind.cs" /language:csharp "c:\linqtest7\northwnd.mdf" /sprocs /functions /pluralize

    詳しくは、「SqlMetal.exe (コード生成ツール)」をご覧ください。

概要

このチュートリアルは、主に次の 6 つの手順で構成されています。

  • Visual Studio で LINQ to SQL ソリューションを設定します。

  • プロジェクトに System.Data.Linq アセンブリを追加します。

  • プロジェクトにデータベース コード ファイルを追加します。

  • データベースへの接続を作成します。

  • ユーザー インターフェイスを設定します。

  • アプリケーションを実行およびテストします。

LINQ to SQL ソリューションを作成する

最初のタスクでは、LINQ to SQL プロジェクトをビルドおよび実行するために必要な参照が含まれる Visual Studio ソリューションを作成します。

LINQ to SQL ソリューションを作成するには

  1. Visual Studio の [ファイル] メニューの [新規作成] をポイントし、 [プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ペインで、 [Visual C#] をクリックします。

  3. [テンプレート] ペインの [Windows フォーム アプリケーション] をクリックします。

  4. [名前] ボックスに「SprocOnlyApp」と入力します。

  5. [場所] ボックスで、プロジェクト ファイルを格納する場所を確認します。

  6. [OK] をクリックします。

    Windows フォーム デザイナーが開きます。

LINQ to SQL アセンブリ参照を追加する

標準の Windows フォーム アプリケーション テンプレートには、LINQ to SQL アセンブリは含まれていません。 次の手順に従って、アセンブリを自分で追加する必要があります。

System.Data.Linq.dll を追加するには

  1. ソリューション エクスプローラーで、 [参照設定] を右クリックし、 [参照の追加] をクリックします。

  2. [参照の追加] ダイアログ ボックスで、 [.NET] をクリックし、System.Data.Linq アセンブリをクリックします。次に、 [OK] をクリックします。

    アセンブリがプロジェクトに追加されます。

プロジェクトに Northwind コード ファイルを追加する

この手順では、事前に SqlMetal ツールを使用して、Northwind サンプル データベースからコード ファイルを生成していることが前提となります。 詳細については、このチュートリアルの「前提条件」を参照してください。

プロジェクトに Northwind コード ファイルを追加するには

  1. [プロジェクト] メニューの [既存項目の追加] をクリックします。

  2. [既存項目の追加] ダイアログ ボックスで、c:\linqtest7\northwind.cs に移動し、 [追加] をクリックします。

    northwind.cs ファイルがプロジェクトに追加されます。

データベース接続を作成する

この手順では、Northwind サンプル データベースへの接続を定義します。 このチュートリアルでは、パスとして "c:\linqtest7\northwnd.mdf" を使用します。

データベース接続を作成するには

  1. ソリューション エクスプローラーForm1.cs を右クリックし、 [コードの表示] をクリックします。

  2. Form1 クラスに次のコードを入力します。

    Northwnd db = new Northwnd(@"c:\linqtest7\northwnd.mdf");
    

ユーザー インターフェイスを設定する

このタスクでは、ユーザーがストアド プロシージャを実行してデータベース内のデータにアクセスできるように、インターフェイスを設定します。 このチュートリアルで作成するアプリケーションでは、ユーザーがデータベース内のデータにアクセスできる手段は、アプリケーションに埋め込まれたストアド プロシージャを使用することだけです。

ユーザー インターフェイスを設定するには

  1. Windows フォーム デザイナー ( [Form1.cs[デザイン]] ) に戻ります。

  2. [表示] メニューの [ツールボックス] をクリックします。

    ツールボックスが表示されます。

    Note

    このセクションの残りの手順を実行する間、ツールボックスを開いたままにしておくには、 [自動的に隠す] プッシュピンをクリックします。

  3. ツールボックスから、2 つのボタン、2 つのテキスト ボックス、および 2 つのラベルを Form1 にドラッグします。

    図のようにコントロールを配置します。 コントロールを簡単に配置できるように、Form1 のサイズを拡大します。

  4. label1 を右クリックし、 [プロパティ] をクリックします。

  5. Text プロパティを「label1」から「Enter OrderID: 」に変更します。

  6. label2 についても同様に、Text プロパティを「label2」から「Enter CustomerID: 」に変更します。

  7. 同様に、button1Text プロパティを「Order Details」に変更します。

  8. button2Text プロパティを「Order History」に変更します。

    すべてのテキストが表示されるように、ボタン コントロールの幅を広げます。

ボタン クリックを処理するには

  1. Form1Order Details をダブルクリックして、コード エディターで button1 のイベント ハンドラーを開きます。

  2. button1 のハンドラーに次のコードを入力します。

    // Declare a variable to hold the contents of
    // textBox1 as an argument for the stored
    // procedure.
    string param = textBox1.Text;
    
    // Declare a variable to hold the results
    // returned by the stored procedure.
    var custquery = db.CustOrdersDetail(Convert.ToInt32(param));
    
    // Execute the stored procedure and display the results.
    string msg = "";
    foreach (CustOrdersDetailResult custOrdersDetail in custquery)
    {
        msg = msg + custOrdersDetail.ProductName + "\n";
    }
    if (msg == "")
        msg = "No results.";
    MessageBox.Show(msg);
    
    // Clear the variables before continuing.
    param = "";
    textBox1.Text = "";
    
  3. 次に、Form1button2 をダブルクリックして、button2 のハンドラーを開きます

  4. button2 のハンドラーに次のコードを入力します。

    // Comments in the code for button2 are the same
    // as for button1.
    string param = textBox2.Text;
    
    var custquery = db.CustOrderHist(param);
    
    string msg = "";
    foreach (CustOrderHistResult custOrdHist in custquery)
    {
        msg = msg + custOrdHist.ProductName + "\n";
    }
    MessageBox.Show(msg);
    
    param = "";
    textBox2.Text = "";
    

アプリケーションのテスト

次に、アプリケーションをテストします。 データ ストアに対する操作は、2 つのストアド プロシージャで実行できる処理に制限されることに注意してください。 つまり、入力した orderID に含まれている製品を返す処理と、入力した CustomerID の注文製品の履歴を返す処理のみを実行できます。

アプリケーションをテストするには

  1. F5 キーを押してデバッグを開始します。

    Form1 が表示されます。

  2. [Enter OrderID] ボックスに「10249」と入力し、 [Order Details] をクリックします。

    注文 10249 に含まれている製品がメッセージ ボックスに表示されます。

    [OK] をクリックして、メッセージ ボックスを閉じます。

  3. [Enter CustomerID] ボックスに「ALFKI」と入力し、 [Order History] をクリックします。

    顧客 ALFKI の注文履歴がメッセージ ボックスに表示されます。

    [OK] をクリックして、メッセージ ボックスを閉じます。

  4. [Enter OrderID] ボックスに「123」と入力し、 [Order Details] をクリックします。

    "No results" というメッセージ ボックスが表示されます。

    [OK] をクリックして、メッセージ ボックスを閉じます。

  5. [デバッグ] メニューの [デバッグの停止] をクリックします。

    デバッグ セッションが終了します。

  6. 操作が終了したら、 [ファイル] メニューの [プロジェクトを閉じる] をクリックし、メッセージに従ってプロジェクトを保存します。

次の手順

いくつかの変更を加えることによって、このプロジェクトを強化できます。 たとえば、使用できるストアド プロシージャの一覧をリスト ボックスに表示し、実行するプロシージャをユーザーに選択させることができます。 レポートの出力をテキスト ファイルに送ることもできます。

関連項目