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

HOW TO は、ADO を使用して、パラメーター化されたストアド プロシージャを呼び出します。NET と Visual C# で。NET

この記事は、以前は次の ID で公開されていました: JP310070
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:310070
マイクロソフトの Visual Basic では。この資料のバージョン NET を参照してください。 308049.
Microsoft Visual の C++。この資料のバージョン NET を参照してください。 310071.
マイクロソフト ビジュアルの j#。この資料のバージョン NET を参照してください。 320627.

この資料で、次のマイクロソフトを参照します。NET Framework クラス ライブラリの名前空間。
  • System.Data.SqlClient
  • System.Data.OleDb

このタスクで

概要
ADO を使用するのには、いくつかの方法です。NET を使用してストアド プロシージャを呼び出すと、戻り値が返さし、などのパラメーターを取得する:
  • 返される行を収集し、これらの行に加えて戻り値と出力パラメーターを処理するのには、 DataSetオブジェクトを使用します。
  • これらの行をし、戻り値と出力パラメーターに移動して、返される行を収集するためには、 DataReaderオブジェクトを使用します。
  • ExecuteScalarメソッドを使用して、戻り値と出力パラメーターを結果の最初の行の最初の列から値を取得します。これは、集計関数が最も便利です。
  • 戻り値のパラメーターおよび戻り値を返すには、 ExecuteNonQueryメソッドを使用します。返された行は破棄されます。これは、アクション クエリを実行するために便利です。
この資料では、最後の 3 つの方法について説明し、 SqlCommandOleDbCommandオブジェクトの両方を使用します。使用しているマネージド プロバイダーに対応するコードのみをコピーするようにしてください。どのマネージ プロバイダーを使用する必要がありますかわからない場合は、次のマイクロソフト開発者向けネットワークの Web サイトを参照してください。各サンプルでは、この資料では、パラメーターは、 CommandオブジェクトのParametersコレクションに追加されます。SqlCommandオブジェクトを使用するとはないがパラメーターを追加、特定の順序でがパラメーターを適切な名前が必要があります。OleDbCommandオブジェクトを使用するを正しい順序でパラメーターを追加する必要があり、名前でパラメーターを使用することはできません。

back to the top

DataReader を使用して行およびパラメーターを取得するのには

読み取り専用、順方向専用のデータ ストリームを取得するのにには、 DataReaderオブジェクトを使用できます。DataReaderに含まれる情報は、ストアド プロシージャから取得できます。この例では、 DataReaderオブジェクトを使用して、入力と出力パラメーターと戻りパラメーターを表示するには、返された各レコードを移動するストアド プロシージャを実行します。
  1. Microsoft SQL Server を実行しているサーバー上で次のストアド プロシージャを作成します。
    Create Procedure TestProcedure(  @au_idIN varchar (11),  @numTitlesOUT Integer OUTPUT)AS select A.au_fname, A.au_lname, T.title from authors as A join titleauthor as TA onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINset @numTitlesOUT = @@Rowcountreturn (5) 					
  2. 新しい Visual C# で作成します。NET の Windows アプリケーション プロジェクトです。
  3. コードの後半でこれらの名前空間の宣言を修飾する必要がないようにシステムSystem.Data名前空間にusingステートメントを使用します。このコードをフォームのコード モジュールの先頭に追加します。選択したプロバイダーのコードのみをコピーすることを確認してください。SQL クライアント
    using System.Data.SqlClient;					
    OLE DB データ プロバイダー
    using System.Data.OleDb;					
  4. 秘密のForm_Loadイベント内のコードを次のコードに置き換えます:SQL クライアント
    SqlConnection PubsConn = new SqlConnection ("Data Source=server;integrated " + "Security=sspi;initial catalog=pubs;");SqlCommand testCMD = new SqlCommand ("TestProcedure", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;SqlParameter RetVal = testCMD.Parameters.Add    ("RetVal", SqlDbType.Int);RetVal.Direction = ParameterDirection.ReturnValue;SqlParameter IdIn = testCMD.Parameters.Add   ("@au_idIN", SqlDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;SqlParameter NumTitles = testCMD.Parameters.Add    ("@numtitlesout", SqlDbType.VarChar, 11);NumTitles.Direction = ParameterDirection.Output ;        IdIn.Value = "213-46-8915";PubsConn.Open();SqlDataReader myReader = testCMD.ExecuteReader();Console.WriteLine ("Book Titles for this Author:");while (myReader.Read())    {     Console.WriteLine ("{0}", myReader.GetString (2));   };myReader.Close() ;Console.WriteLine("Number of Rows: " + NumTitles.Value );Console.WriteLine("Return Value: " + RetVal.Value);					
    OLE DB データ プロバイダー
    OleDbConnection PubsConn = new OleDbConnection    ("Provider=SQLOLEDB;Data Source=server;" +    "integrated Security=sspi;initial catalog=pubs;");OleDbCommand testCMD = new OleDbCommand    ("TestProcedure", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add    ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;OleDbParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", OleDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;OleDbParameter NumTitles = testCMD.Parameters.Add    ("@numtitlesout", OleDbType.VarChar, 11);NumTitles.Direction = ParameterDirection.Output;        IdIn.Value = "213-46-8915";PubsConn.Open();OleDbDataReader myReader = testCMD.ExecuteReader();Console.WriteLine ("Book Titles for this Author:");while (myReader.Read())    {     Console.WriteLine ("{0}", myReader.GetString (2));   };myReader.Close() ;Console.WriteLine("Number of Rows: " + NumTitles.Value );Console.WriteLine("Return Value: " + RetVal.Value);					
  5. SQL Server を実行しているコンピューターに接続するには、 Connectionオブジェクトの接続文字列を変更します。
  6. コードを実行します。DataReaderは、レコードを取得し、パラメーターの値を返しますに注意してください。返された各レコードを移動するには、 DataReaderオブジェクトのReadメソッドを使用できます。

    「出力」ウィンドウには、2 つ書籍のタイトル、戻り値の 5、および数の記録 (2) が入った出力パラメーターが表示されます。パラメーターの値を表示するのには、 DataReaderのコードを閉じる必要があることを確認します。さらに、 DataReaderが閉じられている場合、戻り値パラメーターを参照してください。 すべてのレコードを移動する必要はないに注意してください。
back to the top

Command オブジェクトの ExecuteScalar メソッドを使用します。

パラメーターの値を取得するのにには、 CommandオブジェクトのExecuteScalarメソッドを使用できます。また、 ExecuteScalarはストアド プロシージャの 1 行目の最初の列を返します。これは、集計関数を次の例のようにするときに便利です。
  1. SQL Server を実行しているサーバー上で次のストアド プロシージャを作成します。
    Create Procedure TestProcedure2(  @au_idIN varchar (11))As/* set nocount on */ select count (T.title) from authors as A join titleauthor as TA onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINReturn(5)					
  2. 新しい Visual C# で作成します。NET の Windows アプリケーション プロジェクトです。
  3. コードの後半でこれらの名前空間の宣言を修飾する必要がないようにシステムSystem.Data名前空間にusingステートメントを使用します。このコードをフォームのコード モジュールの先頭に追加します。選択したプロバイダーのコードのみをコピーすることを確認してください。SQL クライアント
    using System.Data.SqlClient;					
    OLE DB データ プロバイダー
    using System.Data.OleDb;					
  4. Form_Loadイベントに次のコードを追加:SQL クライアント
    string strCount;SqlConnection PubsConn = new SqlConnection    ("Data Source=server;integrated " +    "Security=sspi;initial catalog=pubs;");SqlCommand testCMD = new SqlCommand    ("TestProcedure2", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;SqlParameter RetVal = testCMD.Parameters.Add    ("RetVal", SqlDbType.Int);RetVal.Direction = ParameterDirection.ReturnValue;SqlParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", SqlDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;        IdIn.Value = "213-46-8915";PubsConn.Open();strCount =testCMD.ExecuteScalar ().ToString() ;Console.WriteLine("Number of Rows: " + strCount );Console.WriteLine("Return Value: " + RetVal.Value);					
    OLE DB データ プロバイダー
    string strCount;OleDbConnection PubsConn = new OleDbConnection    ("Provider=SQLOLEDB;Data Source=server;" +    "integrated Security=sspi;initial catalog=pubs;");OleDbCommand testCMD = new OleDbCommand    ("TestProcedure2", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add    ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;OleDbParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", OleDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915";PubsConn.Open();strCount = testCMD.ExecuteScalar().ToString() ;Console.WriteLine("Number of Rows: " + strCount);Console.WriteLine("Return Value: " + RetVal.Value);					
  5. SQL Server を実行しているコンピューターに接続するには、 Connectionオブジェクトの接続文字列を変更します。
  6. コードを実行します。CommandオブジェクトのExecuteScalarメソッドがパラメーターを返すことに注意してください。ExecuteScalarも 1,、返された行セットの行 1 の列の値を返します。そのため、 intCountの値はストアド プロシージャからのカウント関数の結果です。
back to the top

Command オブジェクトの ExecuteNonQuery メソッドを使用します。

このサンプルは、クエリを実行して、パラメーターの値を返す、 ExecuteNonQueryメソッドを使用します。ExecuteNonQueryはクエリを実行すると、影響を受けるレコードの数を返します。ただし、 ExecuteNonQueryは行または列、ストアド プロシージャから返されません。

ExecuteNonQueryメソッドは行の数を変更しなければならない場合、INSERT、UPDATE、または DELETE ステートメントを使用する場合に便利です。SELECT ステートメントのみを使用しているストアド プロシージャでは、クエリが影響する行はないため-1 となります。
  1. SQL Server を実行しているコンピューターで次のストアド プロシージャを作成します。
    Create Procedure TestProcedure3(  @au_idIN varchar (11),  @au_fnam varchar (30))As/* set nocount on */ Update authors set au_fname = @au_fnamwhere au_id = @au_idin	return (5)					
  2. 新しい Visual C# で作成します。NET の Windows アプリケーション プロジェクトです。
  3. コードの後半でこれらの名前空間の宣言を修飾する必要がないようにシステムSystem.Data名前空間にusingステートメントを使用します。このコードをフォームのコード モジュールの先頭に追加します。選択したプロバイダーのコードのみをコピーすることを確認してください。SQL クライアント
    using System.Data.SqlClient;					
    OLE DB データ プロバイダー
    using System.Data.OleDb;					
  4. 秘密のForm1_Loadイベント、Form1 のコード モジュールに以下のコードを次のコードに置き換えます:SQL クライアント
    string strRowAffect;SqlConnection PubsConn = new SqlConnection    ("Data Source=server;integrated Security=sspi;" +    "initial catalog=pubs;");SqlCommand testCMD = new SqlCommand    ("TestProcedure3", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;SqlParameter RetVal = testCMD.Parameters.Add    ("RetVal", SqlDbType.Int);RetVal.Direction = ParameterDirection.ReturnValue;SqlParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", SqlDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;SqlParameter FnameIn = testCMD.Parameters.Add    ("@au_fnam", SqlDbType.VarChar, 30);FnameIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915";FnameIn.Value = "Marjorie";PubsConn.Open();strRowAffect =testCMD.ExecuteNonQuery ().ToString() ;Console.WriteLine("Number of Rows: " + strRowAffect );Console.WriteLine("Return Value: " + RetVal.Value);					
    OLE DB データ プロバイダー
    int intRowAffected;OleDbConnection PubsConn = new OleDbConnection    ("Provider=SQLOLEDB;Data Source=server;" +    "integrated Security=sspi;initial catalog=pubs;");OleDbCommand testCMD = new OleDbCommand    ("TestProcedure3", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add    ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;OleDbParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", OleDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;OleDbParameter FnameIn = testCMD.Parameters.Add   ("@au_fname", OleDbType.VarChar, 30);FnameIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915";FnameIn.Value = "Marjorie";PubsConn.Open();intRowAffected = testCMD.ExecuteNonQuery();Console.WriteLine("Number of Rows affected: " + intRowAffected);Console.WriteLine(RetVal.Value);					
  5. SQL Server を実行しているコンピューターに接続するには、 Connectionオブジェクトの接続文字列を変更します。
  6. コードを実行します。[出力] ウィンドウには、(intRowAffect) の影響を受ける行の数、および戻りパラメーターの値が表示されます。
back to the top
関連情報
詳細については、次の MSDN Web サイトを参照してください。back to the top

警告: この記事は自動翻訳されています

プロパティ

文書番号:310070 - 最終更新日: 06/12/2012 03:55:00 - リビジョン: 1.0

  • kbhowtomaster kbstoredproc kbsqlclient kbsystemdata kbmt KB310070 KbMtja
フィードバック
r="var 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?">