チュートリアル: ストアド プロシージャのみの使用 (Visual Basic)
このチュートリアルでは、ストアド プロシージャのみを使用してデータにアクセスする、基本の LINQ to SQL シナリオ全体を示します。 この方法は、データ ストアへのアクセス方法を制限する目的で、データベース管理者によってよく使用されます。
Note
LINQ to SQL アプリケーションでストアド プロシージャを使用して、既定の動作をオーバーライドすることもできます。これは、Create
、Update
、Delete
の各プロセスで特に役立ちます。 詳細については、「挿入、更新、および削除の各操作のカスタマイズ」を参照してください。
このチュートリアルでは、Northwind サンプル データベース内のストアド プロシージャにマップされた 2 つのメソッドを使用します:CustOrdersDetail および CustOrderHist。 このマップは、SqlMetal コマンドライン ツールを実行して Visual Basic ファイルを生成したときに作成されます。 詳細については、このチュートリアルの「前提条件」を参照してください。
このチュートリアルでは、オブジェクト リレーショナル デザイナーを利用しません。 Visual Studio を使用している開発者は、O/R デザイナーを使用してストアド プロシージャの機能を実装することもできます。 「Visual Studio の LINQ to SQL ツール」を参照してください。
注意
次の手順で参照している 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 アセンブリ参照を追加する
標準の Windows フォーム アプリケーション テンプレートには、LINQ to SQL アセンブリは含まれていません。 次の手順に従って、アセンブリを自分で追加する必要があります。
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 [デザイン]] )。
[表示] メニューの [ツールボックス] をクリックします。
ツールボックスが表示されます。
Note
このセクションの残りの手順を実行する間、ツールボックスを開いたままにしておくには、 [自動的に隠す] プッシュピンをクリックします。
ツールボックスから、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. 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 が表示されます。
[Enter OrderID] ボックスに「10249」と入力し、 [Order Details] をクリックします。
注文 10249 に含まれている製品がメッセージ ボックスに表示されます。
[OK] をクリックして、メッセージ ボックスを閉じます。
[Enter CustomerID] ボックスに「
ALFKI
」と入力し、 [Order History] をクリックします。メッセージ ボックスに、顧客 ALFKI の注文履歴が表示されます。
[OK] をクリックして、メッセージ ボックスを閉じます。
[Enter OrderID] ボックスに「
123
」と入力し、 [Order Details] をクリックします。メッセージ ボックスに "No results" が表示されます。
[OK] をクリックして、メッセージ ボックスを閉じます。
[デバッグ] メニューの [デバッグの停止] をクリックします。
デバッグ セッションが終了します。
操作が終了したら、 [ファイル] メニューの [プロジェクトを閉じる] をクリックし、メッセージに従ってプロジェクトを保存します。
次の手順
いくつかの変更を加えることによって、このプロジェクトを強化できます。 たとえば、使用できるストアド プロシージャの一覧をリスト ボックスに表示し、実行するプロシージャをユーザーに選択させることができます。 レポートの出力をテキスト ファイルに送ることもできます。