チュートリアル : ストアド プロシージャのみを使用する (C#) (LINQ to SQL)
更新 : November 2007
このチュートリアルでは、ストアド プロシージャを実行することでのみデータにアクセスする、基本的な LINQ to SQL シナリオ全体を示します。この方法は、データ ストアへのアクセス方法を制限する目的で、データベース管理者によってよく使用されます。
メモ : |
---|
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 デザイナー)を参照してください。
メモ : |
---|
お使いのマシンで、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 ソリューションを作成するには
Visual Studio で、[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ペインで、[Visual C#] をクリックします。
[テンプレート] ペインの [Windows フォーム アプリケーション] をクリックします。
[名前] ボックスに「SprocOnlyApp」と入力します。
[場所] ボックスで、プロジェクト ファイルを格納する場所を確認します。
[OK] をクリックします。
Windows フォーム デザイナが開きます。
LINQ to SQL アセンブリ参照を追加する
標準の Windows フォーム アプリケーション テンプレートには、LINQ to SQL アセンブリは含まれていません。次の手順に従って、アセンブリを自分で追加する必要があります。
System.Data.Linq.dll を追加するには
ソリューション エクスプローラで、[参照設定] を右クリックし、[参照の追加] をクリックします。
[参照の追加] ダイアログ ボックスで、[.NET] をクリックし、System.Data.Linq アセンブリをクリックして、[OK] をクリックします。
アセンブリがプロジェクトに追加されます。
プロジェクトに Northwind コード ファイルを追加する
この手順では、事前に SqlMetal ツールを使用して、Northwind サンプル データベースからコード ファイルを生成していることが前提となります。詳細については、このチュートリアルの「前提条件」を参照してください。
プロジェクトに Northwind コード ファイルを追加するには
[プロジェクト] メニューの [既存項目の追加] をクリックします。
[既存項目の追加] ダイアログ ボックスで、c:\linqtest7\northwind.cs に移動し、[追加] をクリックします。
northwind.cs ファイルがプロジェクトに追加されます。
データベース接続を作成する
この手順では、Northwind サンプル データベースへの接続を定義します。このチュートリアルでは、パスとして "c:\linqtest7\northwnd.mdf" を使用します。
データベース接続を作成するには
ソリューション エクスプローラで [Form1.cs] を右クリックし、[コードの表示] をクリックします。
Form1 クラスに次のコードを入力します。
Northwnd db = new Northwnd(@"c:\linqtest7\northwnd.mdf");
ユーザー インターフェイスを設定する
この手順では、ユーザーがストアド プロシージャを実行してデータベース内のデータにアクセスできるように、インターフェイスを設定します。このチュートリアルで作成するアプリケーションでは、ユーザーがデータベース内のデータにアクセスできる手段は、アプリケーションに埋め込まれたストアド プロシージャを使用することだけです。
ユーザー インターフェイスを設定するには
Windows フォーム デザイナ ([Form1.cs[デザイン]]) に戻ります。
[表示] メニューの [ツールボックス] をクリックします。
ツールボックスが表示されます。
メモ : このセクションの残りの手順を実行する間、ツールボックスを開いたままにしておくには、[自動的に隠す] プッシュピンをクリックします。
ツールボックスから、2 つのボタン、2 つのテキスト ボックス、および 2 つのラベルを Form1 にドラッグします。
図のようにコントロールを配置します。コントロールを簡単に配置できるように、Form1 のサイズを拡大します。
[label1] を右クリックし、[プロパティ] をクリックします。
Text プロパティを「label1」から「Enter OrderID:」に変更します。
[label2] についても同様に、Text プロパティを「label2」から「Enter CustomerID:」に変更します。
同様に、[button1] の Text プロパティを「Order Details」に変更します。
[button2] の Text プロパティを「Order History」に変更します。
すべてのテキストが表示されるように、ボタン コントロールの幅を広げます。
ボタン クリックを処理するには
Form1 の [Order Details] をダブルクリックして、コード エディタに button1 のイベント ハンドラを表示します。
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 = "";
次に、Form1 の button2 をダブルクリックして、button2 のハンドラを表示します。
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 の注文製品の履歴を返す処理のみを実行できます。
アプリケーションをテストするには
F5 キーを押してデバッグを開始します。
Form1 が表示されます。
[Enter OrderID] ボックスに「10249」と入力し、[Order Details] をクリックします。
注文 10249 に含まれている製品がメッセージ ボックスに表示されます。
[OK] をクリックしてメッセージ ボックスを閉じます。
[Enter CustomerID] ボックスに「ALFKI」と入力し、[Order History] をクリックします。
顧客 ALFKI の注文履歴がメッセージ ボックスに表示されます。
[OK] をクリックしてメッセージ ボックスを閉じます。
[Enter OrderID] ボックスに「123」と入力し、[Order Details] をクリックします。
"No results" というメッセージ ボックスが表示されます。
[OK] をクリックしてメッセージ ボックスを閉じます。
[デバッグ] メニューの [デバッグの停止] をクリックします。
デバッグ セッションが終了します。
操作が終了したら、[ファイル] メニューの [プロジェクトを閉じる] をクリックし、メッセージに従ってプロジェクトを保存します。
次の手順
いくつかの変更を加えることによって、このプロジェクトを強化できます。たとえば、使用できるストアド プロシージャの一覧をリスト ボックスに表示し、実行するプロシージャをユーザーに選択させることができます。レポートの出力をテキスト ファイルに送ることもできます。