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

文章翻译 文章翻译
文章编号: 311274 - 查看本文应用于的产品
本文的发布号曾为 CHS311274
展开全部 | 关闭全部

本文内容

概要

本文讲述一个一般的函数,可用它来处理由存储过程或在执行批处理 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://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx

属性

文章编号: 311274 - 最后修改: 2007年5月13日 - 修订: 1.1
这篇文章中的信息适用于:
  • Microsoft ADO.NET(随 .NET 框架一起提供)
  • Microsoft Visual C# .NET 2002 标准版
关键字:?
kbhowto kbhowtomaster kbsqlclient kbsystemdata kbgrpdsvbdb kbgrpdsmdac KB311274
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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