Visual C# .NET で DataReader を使用して複数の結果を処理する方法

文書翻訳 文書翻訳
文書番号: 311274 - 対象製品
この記事は、以前は次の ID で公開されていました: JP311274
すべて展開する | すべて折りたたむ

目次

概要

この資料では、ストアド プロシージャ、またはバッチ SQL ステートメントの実行から返される複数のレコードセットとその他のメッセージの処理に使用できる汎用関数について説明します。

技法の説明

ADO (ActiveX Data Objects) はサーバーから 5 種類の異なるデータを受け取ることができます。
  • レコードセット
  • アクション クエリ (INSERT、UPDATE、DELETE、SELECT INTO など) によって変更されたレコード数
  • 情報メッセージまたは警告
  • エラー メッセージ
  • ストアド プロシージャの戻り値と出力パラメータ
バッチ SQL ステートメントの結果を読み取るときに、NextResult メソッドを使用して、結果セット内の次の結果に DataReader を位置付けることができます。

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server、Windows NT 4.0 Server のいずれか
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server 7.0 以降
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
  • Visual Studio .NET
  • ADO.NET の基本事項と構文

プロジェクトの作成とコードの追加

このサンプル コードでは、SQL Server Pubs サンプル データベースの Authors テーブルを使用します。
  1. 次のステートメントを SQL クエリ アナライザ ツールまたは ISQL ユーティリティに貼り付けます。
    CREATE PROC MyProc
    AS
        SELECT * FROM Authors
        SELECT * FROM Authors WHERE State = 'CA'
    GO 
    					
  2. Visual Studio .NET を起動します。
  3. Visual C# .NET で新しい Windows アプリケーション プロジェクトを作成します。デフォルトで、プロジェクトに Form1 が追加されます。
  4. プロジェクトに System.Data 名前空間への参照が含まれていることを確認し、含まれていない場合は追加します。
  5. Form1 にコマンド ボタンを配置します。ボタンの Name プロパティを btnTest に、Text プロパティを Test にそれぞれ変更します。
  6. System、System.Data.OleDb および System.Data.SqlClient 名前空間に using ステートメントを使用して、その後コードでこれらの名前空間で宣言を修飾する必要をなくします。Form1 の一般宣言セクションに次のコードを追加します。
    using System;
    using System.Data.OleDb;
    using System.Data.SqlClient;
    					
  7. btnTest_Click イベントに次のコードを追加します。

    : User ID の <user name> のアカウントの値を、データベースに対してこれらの操作を実行できるアクセス許可を持つアカウントに変更する必要があります。
        String myConnString  = "User ID=<username>;password=<strong password>;Initial Catalog=pubs;Data Source=myServer";
        SqlConnection myConnection = new SqlConnection(myConnString);
        SqlCommand myCommand = new SqlCommand();
        SqlDataReader myReader ;
    
        myCommand.CommandType = CommandType.StoredProcedure;
        myCommand.Connection = myConnection;
        myCommand.CommandText = "MyProc";
        int RecordCount=0; 
    
        try
        {
            myConnection.Open();
    	myReader = myCommand.ExecuteReader();
    
    	while (myReader.Read())
    	{
     	    //Write logic to process data for the first result.
    	    RecordCount = RecordCount + 1;
    	}
    	MessageBox.Show("Total number of Authors: " + RecordCount.ToString());
    
    	myReader.NextResult();
    	RecordCount = 0;
    
    	while (myReader.Read())
    	{
    	    //Write logic to process data for the second result.
    	    RecordCount = RecordCount + 1;
    	}
    	MessageBox.Show("Authors from California: " + RecordCount.ToString());
        }
        catch(Exception ex) 
        {
           MessageBox.Show(ex.ToString());
        }
        finally
        {
    	myConnection.Close();
        }
    					
  8. 接続文字列 (myConnString) は、使用環境に応じて変更してください。
  9. プロジェクトを保存します。[デバッグ] メニューの [開始] をクリックし、プロジェクトを実行します。
  10. [テスト] をクリックします。ストアド プロシージャが返したデータがメッセージ ボックスに表示されることが確認できます。

関連情報

ストアド プロシージャの呼び出しの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
306574 [HOW TO] ASP.NET で SQL Server のストアド プロシージャを呼び出す方法
エラー処理の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
308650 [HOW TO] Visual C# .NET の ADO.NET を使ってプロバイダのエラー情報を取得する方法
パラメータとストアド プロシージャの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
308621 [PRB] Visual C# .NET で ADO.NET コマンドを実行すると出力パラメータが返されない
ADO.NET の各オブジェクトおよび構文の詳細については、次の Microsoft .NET Framework SDK (Software Development Kit) のドキュメントを参照してください。
ADO.NET を使用したデータのアクセス
http://msdn.microsoft.com/library/ja/cpguide/html/cpconaccessingdatawithadonet.asp

プロパティ

文書番号: 311274 - 最終更新日: 2006年1月24日 - リビジョン: 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
キーワード:?
kbhowtomaster kbsqlclient kbsystemdata KB311274
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com