你目前正处于脱机状态,正在等待 Internet 重新连接

HOW TO:在 Visual C# .NET 中使用 DataReader 处理多个结果

本文的发布号曾为 CHS311274
有关本文的 Microsoft Visual Basic .NET 版本,请参见 309490

本文引用下面的 Microsoft .NET 框架类库名称空间:
  • System.Data.OleDb
  • System.Data.SqlClient

本任务的内容

概要
本文讲述一个一般的函数,可用它来处理由存储过程或在执行批处理 SQL 语句时返回的多个记录集和其他消息。

返回页首

技术说明

ActiveX 数据对象 (ADO) 可从服务器接收 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 MyProcASSELECT * FROM AuthorsSELECT * 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. 针对 SystemSystem.Data.OleDb System.Data.SqlClient 名称空间使用 Imports 语句,这样以后就不需要在代码中限定这些名称空间中的声明了。将以下代码添加到 Form1 的"General Declarations"部分中:
    using System;using System.Data.OleDb;using System.Data.SqlClient;
  7. 将以下代码添加到 btnTest_Click 事件中:
    String myConnString  = "User ID=sa;password=sa;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 知识库中的文章:
306574 HOW TO:在 ASP.NET 中调用 SQL Server 存储过程
有关错误处理的其他信息,请单击下面的文章编号以查看 Microsoft 知识库中的文章:
308650 HOW TO:在 Visual C# .NET 中使用 ADO.NET 获得基础提供程序错误
有关参数和存储过程的其他信息,请单击下面的文章编号以查看 Microsoft 知识库中的文章:
308621 PRB:在 Visual C# .NET 中运行 ADO.NET 命令时未返回输出参数
有关 ADO.NET 对象和语法的更多信息,请参阅以下 Microsoft .NET 框架软件开发工具包 (SDK) 文档:返回页首
NextResult
属性

文章 ID:311274 - 上次审阅时间:05/13/2007 05:03:00 - 修订版本: 1.1

Microsoft ADO.NET(随 .NET 框架一起提供), Microsoft Visual C# .NET 2002 标准版

  • kbhowto kbhowtomaster kbsqlclient kbsystemdata kbgrpdsvbdb kbgrpdsmdac KB311274
反馈