现在的位置: 首页 > 综合 > 正文

308352 PRB:在 Visual C# .NET 中 DataReader 没有 RecordCount 属性 (From MKBA)

2013年11月21日 ⁄ 综合 ⁄ 共 1674字 ⁄ 字号 评论关闭
文章目录
本文的发布号曾为 CHS308352
有关本文的 Microsoft Visual Basic .NET 版本,请参见 308050

本文引用下面的 Microsoft .NET 框架类库名称空间:

  • System.Data
  • System.Data.SqlClient

症状

在使用 OleDbDataReader SqlDataReader 类时,没有任何 RecordCount 属性可指示正被获取的记录的数量。

原因

DataReader 对象或后端数据源通常不知道正获取的记录的数量,直到最后一条记录发送到客户端。

在 ActiveX 数据对象 (ADO) 记录集使用只向前游标检索数据时,它甚至会针对 RecordCount 属性返回 -1。DataReader 表现类似的行为,因为它使用只向前游标检索行和列。

解决方案

若要解决此问题,请使用下列方法之一:

  • 在通过该阅读器时对记录进行计数。
  • 先运行 SELECT COUNT(*) 查询。请注意,此查询到您阅读完数据时可能会过时。

状态

这种现象是设计使然。

更多信息

再现现象的步骤

  1. 启动 Microsoft Visual Studio .NET。
  2. 在 Visual C# .NET 中新建一个 Windows 应用程序。默认情况下将创建 Form1。
  3. 确保您的项目包含一个对 System.Data 名称空间的引用,如果未包含,请添加一个对此名称空间的引用。
  4. 将一个命令按钮放在 Form1 上,将其 Name 属性更改为 btnTest
  5. System System.Data 名称空间使用 Imports 语句,这样,在后面的代码中就不需要在这些名称空间中限定声明了。
    using System;
    using System.Data;
    using System.Data.SqlClient;
  6. 返回到"窗体"视图,然后双击 btnTest 以添加单击事件处理程序。将下面的代码添加到处理程序:
    String myConnString =
    "User ID=sa;password=sa;Initial Catalog=pubs;Data Source=mySQLServer";
    
    String mySelectQuery  = "SELECT * FROM Authors";
    SqlConnection myConnection = new SqlConnection(myConnString);
    SqlCommand myCommand = new SqlCommand(mySelectQuery, myConnection);
    myConnection.Open();
    
    SqlDataReader myReader ;
    myReader = myCommand.ExecuteReader();
    int RecordCount = 0;
    
    try
        {
    	while (myReader.Read())
    	{
    	    RecordCount++;
    	}
    	if (RecordCount == 0)
    MessageBox.Show("No data returned");
    	else
    	    MessageBox.Show("Number of Records returned:" + RecordCount);
        }
    catch (Exception ex)
        {
    	MessageBox.Show(ex.ToString());
        }    
    finally
        {
    	myReader.Close();
    	myConnection.Close();
        }
  7. 根据您的环境相应地修改连接字符串 (myConnString)。
  8. 保存项目。
  9. 调试菜单上,单击启动,运行您的项目。
  10. 单击该按钮。请注意,您可以看到记录的计数。

参考

有关其他信息,请单击下列文章编号,查看相应的 Microsoft 知识库文章:

194973 PRB:ADO:Recordcount May Return -1(PRB:ADO:Recordcount 可能会返回 -1)

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

  • Microsoft ADO.NET(随 .NET 框架一起提供)
  • Microsoft Visual C# .NET (2002)
最近更新: 2002-6-17 (1.0)
关键字 kbDSupport kbGrpDSMDAC kbprb kbSqlClient kbSystemData KB308352

抱歉!评论已关闭.