次の方法で共有


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

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

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

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

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

次の手順では、一部の 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 アセンブリ参照を追加する

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

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. [表示] メニューの [ツールボックス] をクリックします。

    ツールボックスが開きます。

    このセクションの残りの手順を実行しながらツールボックスを開いたままにするには、[ 自動非表示] プッシュピンをクリックします。

  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 プロパティを注文履歴に変更します。

    すべてのテキストが表示されるようにボタン コントロールを拡大します。

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

  1. Form1[注文の詳細] をダブルクリックして、コード エディターで 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. [ 注文 ID の入力 ] ボックスに「 10249」と入力し、[ 注文の詳細] をクリックします。

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

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

  3. [ CustomerID の入力 ] ボックスに「 ALFKI」と入力し、[ 注文履歴] をクリックします。

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

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

  4. [ 注文 ID の入力 ] ボックスに「 123」と入力し、[ 注文の詳細] をクリックします。

    "結果なし" と表示されるメッセージ ボックスが表示されます。

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

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

    デバッグ セッションが閉じます。

  6. 実験が完了したら、[ファイル] メニューの [プロジェクトを閉じる] をクリックし、メッセージが表示されたらプロジェクトを保存できます。

次のステップ

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

こちらも参照ください