チュートリアル : ストアド プロシージャのみの使用 (Visual Basic) (LINQ to SQL)
このチュートリアルでは、ストアド プロシージャのみを使用してデータにアクセスする、基本の LINQ to SQL シナリオ全体を示します。 この方法は、データベース管理者がデータストアのアクセス方法を制限する目的でよく使用されます。
![]() |
---|
LINQ to SQL アプリケーションでストアド プロシージャを使用することにより、特に Create、Update、および Delete プロセスの既定の動作をオーバーライドすることもできます。詳細については、「挿入、更新、および削除の各操作のカスタマイズ (LINQ to SQL)」を参照してください。 |
このチュートリアルでは、Northwind サンプル データベース内のストアド プロシージャにマップされた 2 つのメソッド (CustOrdersDetail および CustOrderHist) を使用します。 SqlMetal コマンド ライン ツールを実行して Visual Basic ファイルを生成すると、対応付けが発生します。 詳細については、このチュートリアルの「前提条件」を参照してください。
このチュートリアルは、オブジェクト リレーショナル デザイナーには依存しません。 Visual Studio を使用している開発者は、O/R デザイナーを使用して、ストアド プロシージャの機能を実装することもできます。 詳細については オブジェクト リレーショナル デザイナ (O/R デザイナ) および オブジェクト リレーショナル デザイナー (O/R デザイナー) および オブジェクト リレーショナル デザイナー (O/R デザイナー).
![]() |
---|
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
このチュートリアルは、Visual Basic 開発設定を使用して記述されています。
必須コンポーネント
このチュートリアルの前提条件は次のとおりです。
このチュートリアルでは、専用フォルダー ("c:\linqtest3") を使用してファイルを保持します。 チュートリアルを開始する前にこのフォルダーを作成してください。
Northwind サンプル データベース。
開発コンピューターにこのデータベースがない場合は、Microsoft のダウンロード サイトからダウンロードできます。 手順については、「サンプル データベースのダウンロード (LINQ to SQL)」を参照してください。 データベースをダウンロードしたら、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 [デザイン]])。
[表示] メニューの [ツールボックス] をクリックします。
ツールボックスが表示されます。
メモ
このセクションの残りの手順を実行する間、ツールボックスを開いたままにしておくには、[自動的に隠す] プッシュピンをクリックします。
ツールボックスから、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] をクリックしてメッセージ ボックスを閉じます。
[デバッグ] メニューの [デバッグの停止] をクリックします。
デバッグ セッションが終了します。
操作が終了したら、[ファイル] メニューの [プロジェクトを閉じる] をクリックし、メッセージに従ってプロジェクトを保存します。
次の手順
いくつかの変更を加えることによって、このプロジェクトを強化できます。 たとえば、使用できるストアド プロシージャの一覧をリスト ボックスに表示し、実行するプロシージャをユーザーに選択させることができます。 レポートの出力をテキスト ファイルに送ることもできます。