次の方法で共有


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

更新 : November 2007

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

Bb399407.alert_note(ja-jp,VS.90).gifメモ :

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

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

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

Bb399407.alert_note(ja-jp,VS.90).gifメモ :

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

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

前提条件

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

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

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

    開発コンピュータにこのデータベースがない場合は、Microsoft のダウンロード サイトからダウンロードできます。手順については、「サンプル データベースのダウンロード (LINQ to SQL)」を参照してください。データベースをダウンロードしたら、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. [表示] メニューの [ツールボックス] をクリックします。

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

    Bb399407.alert_note(ja-jp,VS.90).gifメモ :

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

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

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

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

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

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

  7. 同様に、[button1] の Text プロパティを「Order Details」に変更します。

  8. [button2] の Text プロパティを「Order History」に変更します。

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

ダイアログ ボックス

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

  1. Form1 の [Order 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. 次に、Form1 の button2 をダブルクリックして、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. 操作が終了したら、[ファイル] メニューの [プロジェクトを閉じる] をクリックし、メッセージに従ってプロジェクトを保存します。

次の手順

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

参照

概念

チュートリアルによる学習 (LINQ to SQL)

その他の技術情報

ストアド プロシージャ (LINQ to SQL)