現在オフラインです。再接続するためにインターネットの接続を待っています

SQL のパラメータ化されたストアド プロシージャを ODBC .NET プロバイダと Visual C# .NET を使用して実行する方法

この記事は、以前は次の ID で公開されていました: JP310130
Microsoft Visual Basic .NET については、次の資料を参照してください。309486
Microsoft Visual C++ .NET については、次の資料を参照してください。310142

この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています。
  • Microsoft.Data.Odbc

この資料の内容

概要
この資料では、ODBC .NET のマネージド プロバイダおよび Visual C# .NET を使用して、パラメータ化された SQL Server ストアド プロシージャを呼び出す方法について、手順を追って説明します。

パラメータ化されたストアド プロシージャを ODBC .NET プロバイダを使用して実行する方法と、SQL や OLE DB プロバイダを使用して同じプロシージャを呼び出す方法との違いはわずかですが、1 つ重要な違いがあります。つまり、ストアド プロシージャは、名前ではなく ODBC CALL 構文を使用して呼び出す必要があります。この CALL 構文の詳細については、MSDN ライブラリの ODBC Programmer's Reference で「Procedure Calls」を参照してください。

先頭に戻る

呼び出し構文の例

  1. Northwind サンプル データベースに実際に存在する、パラメータを 1 つ取るストアド プロシージャの呼び出し構文の例を示します。
    {CALL CustOrderHist (?)}
  2. 入力パラメータを 1 つ取り、1 つの出力パラメータと戻り値を返すストアド プロシージャの呼び出し構文の例を示します。最初のプレースホルダは戻り値を表します。
    {? = CALL Procedure1 (?, ?)
  3. ODBC .NET マネージド プロバイダは、OLE DB プロバイダと同様に、(0 から始まる) 序数と名前でパラメータを処理します。
先頭に戻る

テスト プロジェクト (単一の入力パラメータ)

  1. 次のマイクロソフト Web サイトから ODBC.NET マネージド プロバイダをダウンロードし、インストールします。
  2. Visual Studio .NET を起動し、任意のプロジェクト名を指定して Visual C# .NET の Windows アプリケーション プロジェクトを新規作成します。
  3. [プロジェクト] メニューの [参照の追加] をクリックし、[Microsoft.Data.ODBC.dll] をダブルクリックして、選択項目の一覧に追加します。[参照の追加] ダイアログ ボックスを閉じます。
  4. コード ウィンドウの最上部に次のステートメントを追加します。
    using System.Data;using Microsoft.Data.Odbc;					
  5. Button コントロールをツールボックスからデフォルトのフォームにドラッグします。
  6. コマンド ボタンをダブルクリックして、ボタンの Click イベントに対するコード ウィンドウに切り替えます。次のコードを Click イベント プロシージャに入力するか貼り付けます。SQL Server の接続文字列は必要に応じて編集してください。
    OdbcConnection cn;OdbcCommand cmd;OdbcParameter prm;OdbcDataReader dr;try {    //Change the connection string to use your SQL Server.    cn = new OdbcConnection("Driver={SQL Server};Server=servername;Database=Northwind;Trusted_Connection=Yes");    //Use ODBC call syntax.    cmd = new OdbcCommand("{call CustOrderHist (?)}", cn);    prm = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5);    prm.Value = "ALFKI";    cn.Open();    dr = cmd.ExecuteReader();    //List each product.    while (dr.Read()) 	Console.WriteLine(dr.GetString(0));    //Clean up.    dr.Close();    cn.Close();}catch (OdbcException o) {    MessageBox.Show(o.Message.ToString());}					
  7. プロジェクトを実行します。このコードによって CustOrderHist ストアド プロシージャが呼び出され、単一の入力パラメータとして CustomerID が渡され、結果セットが返されます。出力ウィンドウに、Northwind の得意先 ALFKI によって注文された製品の一覧が表示されます。

    : 出力ウィンドウを表示するには、Ctrl + Alt + O キーを押します。
先頭に戻る

テスト プロジェクト (複数のパラメータ型)

  1. クエリ アナライザを使用して、Northwind サンプル データベースに次のストアド プロシージャを作成します。このストアド プロシージャは、入力パラメータとして CustomerID を取り、その得意先による注文の一覧を返し、得意先によって支払われた注文あたりの平均運送料を出力パラメータとして返し、得意先による注文の数を戻り値として返します。
    CREATE PROCEDURE usp_TestParameters@CustID CHAR(5),@AvgFreight MONEY OUTPUTASSELECT @AvgFreight = AVG(Freight) FROM Orders WHERE CustomerID = @CustIDSELECT * FROM Orders WHERE CustomerID = @CustIDRETURN @@ROWCOUNT					
  2. コマンド ボタンの Click イベント プロシージャで次のコードを置き換えて、手順 1. ~ 6. を繰り返します。
    OdbcConnection cn;try {    cn = new OdbcConnection("Driver={SQL Server};Server=servername;Database=Northwind;Trusted_Connection=Yes");    OdbcCommand cmd = new OdbcCommand("{? = call usp_TestParameters (?, ?)}", cn);    OdbcParameter prm = cmd.Parameters.Add("@RETURN_VALUE", OdbcType.Int);    prm.Direction = ParameterDirection.ReturnValue;    prm = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5);    prm.Value = "ALFKI";    prm = cmd.Parameters.Add("@AvgFreight", OdbcType.Double);    prm.Direction = ParameterDirection.Output;    cn.Open();    OdbcDataReader dr = cmd.ExecuteReader();    while (dr.Read())         Console.WriteLine(dr.GetString(0));    dr.Close();    cn.Close();    Console.WriteLine("Average Freight (output param): {0}", cmd.Parameters[2].Value);    Console.WriteLine("Order Count (return value): {0}", cmd.Parameters[0].Value);}catch (OdbcException o) {    MessageBox.Show(o.Message.ToString());}					
  3. プロジェクトを実行します。このコードによって、上記の手順 1. で作成した usp_TestParameters ストアド プロシージャが呼び出され、単一の入力パラメータとして CustomerID が渡され、結果セット、出力パラメータおよび戻り値が返されます。出力ウィンドウに、Northwind の得意先 ALFKI による注文の一覧、得意先が支払った注文あたりの平均運送料、および注文の数が表示されます。

    : 出力ウィンドウを表示するには、Ctrl + Alt + O キーを押します。
先頭に戻る

トラブルシューティング

  • ストアド プロシージャの呼び出しに通常使用される ADO の構文 (プロシージャの名前を単独で CommandText として指定します) は、ODBC.NET マネージド プロバイダでは使用できません。
  • ストアド プロシージャが結果セットを返す場合、結果セットにアクセスして閉じるまで、出力パラメータと戻り値は利用できません。たとえば、上記のサンプル コード内で "dr.Close()" の行を省略した場合、出力パラメータの値を取り出して値を返すことはできません。
  • ODBC .NET マネージド プロバイダは、OLE DB プロバイダと同様に、(0 から始まる) 序数と名前でパラメータを処理します。
  • ODBC .NET マネージド プロバイダは Visual Studio .NET に含まれていないため、個別にダウンロードする必要があります。
先頭に戻る
関連情報
ODBC CALL 構文の詳細については、MSDN ライブラリの ODBC Programmer's Reference で「Procedure Calls」を参照してください。

先頭に戻る
プロパティ

文書番号:310130 - 最終更新日: 10/25/2005 07:31:03 - リビジョン: 3.2

Microsoft ADO.NET (included with the .NET Framework), Microsoft ADO.NET 1.1, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition

  • kbdatabase kbhowtomaster kbsystemdata KB310130
フィードバック
m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> >