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

本文的发布号曾为 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 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. 针对 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) 文档:

使用 ADO.NET 访问数据
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaccessingdatawithadonet.asp

返回页首

这篇文章中的信息适用于:

  • Microsoft ADO.NET(随 .NET 框架一起提供)
  • Microsoft Visual C# .NET (2002)
最近更新:2002-6-18 (1.0)
关键字kbDSupport kbGrpDSMDAC kbGrpDSVBDB kbhowto kbHOWTOmaster kbSqlClient kbSystemData KB311274
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值