このチュートリアルでは、ストアド プロシージャのみを使用してデータにアクセスするための基本的なエンド ツー エンドの LINQ to SQL シナリオを提供します。 この方法は、データベース管理者がデータストアへのアクセス方法を制限するためによく使用されます。
注
LINQ to SQL アプリケーションのストアド プロシージャを使用して、既定の動作 (特に Create
、 Update
、および Delete
プロセス) をオーバーライドすることもできます。 詳細については、 挿入、更新、および削除操作のカスタマイズを参照してください。
このチュートリアルでは、Northwind サンプル データベースのストアド プロシージャにマップされている 2 つのメソッドである CustOrdersDetail と CustOrderHist を使用します。 マッピングは、SqlMetal コマンド ライン ツールを実行して Visual Basic ファイルを生成するときに発生します。 詳細については、このチュートリアルで後述する「前提条件」セクションを参照してください。
このチュートリアルは、オブジェクト リレーショナル デザイナーには依存しません。 Visual Studio を使用する開発者は、O/R デザイナーを使用してストアド プロシージャ機能を実装することもできます。 Visual Studio の LINQ to SQL Tools を参照してください。
注
次の手順では、一部の Visual Studio ユーザー インターフェイス要素の名前や場所がコンピューターに異なる場合があります。 これらの要素は、使用している Visual Studio エディションと使用する設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。
このチュートリアルは、Visual Basic 開発設定を使用して作成されました。
[前提条件]
このチュートリアルでは、次のものが必要です。
このチュートリアルでは、専用フォルダー ("c:\linqtest3") を使用してファイルを保持します。 チュートリアルを開始する前に、このフォルダーを作成します。
Northwind サンプル データベース。
開発用コンピューターにこのデータベースがない場合は、Microsoft ダウンロード サイトからダウンロードできます。 手順については、「 サンプル データベースのダウンロード」を参照してください。 データベースをダウンロードしたら、northwnd.mdf ファイルを c:\linqtest3 フォルダーにコピーします。
Northwind データベースから生成された Visual Basic コード ファイル。
このチュートリアルは、次のコマンド ラインで SqlMetal ツールを使用して作成されました。
sqlmetal /code:"c:\linqtest3\northwind.vb" /language:vb "c:\linqtest3\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 Basic] を展開し、[ Windows] をクリックします。
[テンプレート] ウィンドウ で 、[ 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:\linqtest3\northwind.vb に移動し、[ 追加] をクリックします。
northwind.vb ファイルがプロジェクトに追加されます。
データベース接続の作成
この手順では、Northwind サンプル データベースへの接続を定義します。 このチュートリアルでは、パスとして "c:\linqtest3\northwnd.mdf" を使用します。
データベース接続を作成するには
ソリューション エクスプローラーで、Form1.vbを右クリックし、[コードの表示] をクリックします。
Class Form1
がコード エディターに表示されます。Form1
コード ブロックに次のコードを入力します。Dim db As New Northwnd("c:\linqtest3\northwnd.mdf")
ユーザー インターフェイスの設定
このタスクでは、ユーザーがストアド プロシージャを実行してデータベース内のデータにアクセスできるようにインターフェイスを作成します。 このチュートリアルで開発しているアプリケーションでは、ユーザーはアプリケーションに埋め込まれたストアド プロシージャを使用してのみ、データベース内のデータにアクセスできます。
ユーザー インターフェイスを設定するには
Windows フォーム デザイナー (Form1.vb[デザイン]) に戻ります。
[表示] メニューの [ツールボックス] をクリックします。
ツールボックスが開きます。
注
このセクションの残りの手順を実行しながらツールボックスを開いたままにするには、[ 自動非表示] プッシュピンをクリックします。
2 つのボタン、2 つのテキスト ボックス、および 2 つのラベルをツールボックスから Form1 にドラッグします。
付属の図のようにコントロールを配置します。 コントロールが簡単に収まるように Form1 を展開します。
Label1 を右クリックし、[プロパティ] をクリックします。
Text プロパティを Label1 から 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. Dim parm As String = TextBox1.Text ' Declare a variable to hold the results returned ' by the stored procedure. Dim custQuery = db.CustOrdersDetail(parm) ' Clear the message box of previous results. Dim msg As String = "" Dim response As MsgBoxResult ' Execute the stored procedure and store the results. For Each custOrdersDetail As CustOrdersDetailResult In custQuery msg &= custOrdersDetail.ProductName & vbCrLf Next ' Display the results. If msg = "" Then msg = "No results." End If response = MsgBox(msg) ' Clear the variables before continuing. parm = "" TextBox1.Text = ""
次に、Form1 の Button2 をダブルクリックして、
Button2
イベント ハンドラーを作成し、コード エディターを開きます。Button2
ハンドラーに次のコードを入力します。' Comments in the code for Button2 are the same ' as for Button1. Dim parm As String = TextBox2.Text Dim custQuery2 = db.CustOrderHist(parm) Dim msg As String = "" Dim response As MsgBoxResult For Each custOrdHist As CustOrderHistResult In custQuery2 msg &= custOrdHist.ProductName & vbCrLf Next If msg = "" Then msg = "No results." End If response = MsgBox(msg) parm = "" TextBox2.Text = ""
アプリケーションのテスト
次に、アプリケーションをテストします。 データストアとの連絡先は、2 つのストアド プロシージャが実行できる操作に制限されることに注意してください。 これらのアクションは、入力した orderID に含まれる製品を返すか、入力した CustomerID に対して注文された製品の履歴を返します。
アプリケーションをテストするには
F5 キーを押してデバッグを開始します。
Form1 が表示されます。
[ 受注コードの入力 ] ボックスに「 10249 」と入力し、[ 注文の詳細] をクリックします。
メッセージ ボックスには、注文 10249 に含まれる製品が一覧表示されます。
[ OK] を クリックしてメッセージ ボックスを閉じます。
[ CustomerID の入力 ] ボックスに「
ALFKI
」と入力し、[ 注文履歴] をクリックします。メッセージ ボックスには、顧客 ALFKI の注文履歴が一覧表示されます。
[ OK] を クリックしてメッセージ ボックスを閉じます。
[ 注文 ID の入力 ] ボックスに「
123
」と入力し、[ 注文の詳細] をクリックします。メッセージ ボックスに "結果なし" と表示されます。
[ OK] を クリックしてメッセージ ボックスを閉じます。
[ デバッグ ] メニューの [ デバッグの停止] をクリックします。
デバッグ セッションが閉じます。
実験が完了したら、[ファイル] メニューの [プロジェクトを閉じる] をクリックし、メッセージが表示されたらプロジェクトを保存できます。
次のステップ
いくつかの変更を加えることで、このプロジェクトを強化できます。 たとえば、使用可能なストアド プロシージャをリスト ボックスに一覧表示し、実行するプロシージャをユーザーに選択させます。 レポートの出力をテキスト ファイルにストリーミングすることもできます。