このチュートリアルでは、ストアド プロシージャのみを実行してデータにアクセスするための基本的なエンド ツー エンドの LINQ to SQL シナリオを提供します。 この方法は、データベース管理者がデータストアへのアクセス方法を制限するためによく使用されます。
注
LINQ to SQL アプリケーションのストアド プロシージャを使用して、既定の動作 (特に Create
、 Update
、および 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 ソリューションを作成するには
Visual Studio の [ ファイル ] メニューの [ 新規作成] をポイントし、[ プロジェクト] をクリックします。
[ プロジェクトの種類 ] ウィンドウの [ 新しいプロジェクト ] ダイアログ ボックスで、[ Visual C#] をクリックします。
[テンプレート] ウィンドウ で 、[ Windows フォーム アプリケーション] をクリックします。
[ 名前 ] ボックスに「 SprocOnlyApp」と入力します。
[ 場所 ] ボックスで、プロジェクト ファイルを格納する場所を確認します。
OK をクリックします。
Windows フォーム デザイナーが開きます。
LINQ to SQL アセンブリ参照を追加する
LINQ to SQL アセンブリは、標準の Windows フォーム アプリケーション テンプレートには含まれていません。 次の手順で説明するように、アセンブリを自分で追加する必要があります。
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 プロパティを注文履歴に変更します。
すべてのテキストが表示されるようにボタン コントロールを拡大します。
ボタン クリックを処理するには
Form1 の [注文の詳細] をダブルクリックして、コード エディターで 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 が表示されます。
[ 注文 ID の入力 ] ボックスに「
10249
」と入力し、[ 注文の詳細] をクリックします。メッセージ ボックスには、注文 10249 に含まれる製品が一覧表示されます。
[ OK] を クリックしてメッセージ ボックスを閉じます。
[ CustomerID の入力 ] ボックスに「
ALFKI
」と入力し、[ 注文履歴] をクリックします。顧客 ALFKI の注文履歴を一覧表示するメッセージ ボックスが表示されます。
[ OK] を クリックしてメッセージ ボックスを閉じます。
[ 注文 ID の入力 ] ボックスに「
123
」と入力し、[ 注文の詳細] をクリックします。"結果なし" と表示されるメッセージ ボックスが表示されます。
[ OK] を クリックしてメッセージ ボックスを閉じます。
[ デバッグ ] メニューの [ デバッグの停止] をクリックします。
デバッグ セッションが閉じます。
実験が完了したら、[ファイル] メニューの [プロジェクトを閉じる] をクリックし、メッセージが表示されたらプロジェクトを保存できます。
次のステップ
いくつかの変更を加えることで、このプロジェクトを強化できます。 たとえば、使用可能なストアド プロシージャをリスト ボックスに一覧表示し、実行するプロシージャをユーザーに選択させます。 レポートの出力をテキスト ファイルにストリーミングすることもできます。