チュートリアル : ストアド プロシージャのみを使用する (Visual Basic) (LINQ to SQL)
更新 : November 2007
このチュートリアルでは、ストアド プロシージャのみを使用してデータにアクセスする、基本の 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] をクリックしてメッセージ ボックスを閉じます。
[デバッグ] メニューの [デバッグの停止] をクリックします。
デバッグ セッションが終了します。
操作が終了したら、[ファイル] メニューの [プロジェクトを閉じる] をクリックし、メッセージに従ってプロジェクトを保存します。
次の手順
いくつかの変更を加えることによって、このプロジェクトを強化できます。たとえば、使用できるストアド プロシージャをリスト ボックスに一覧表示し、実行するプロシージャをユーザーに選択させることができます。レポートの出力をテキスト ファイルに送ることもできます。