gpt4 book ai didi

c# - 如何从 OdbcDataReader 获取行数?

转载 作者:行者123 更新时间:2023-12-02 02:08:18 24 4
gpt4 key购买 nike

我正在使用 OdbcDataReader 从数据库获取结果,我想知道结果的行数。实现这一目标的最佳方法是什么?

public string[] GetHeaderAndColumnValues(string[] arrAllColumns, string[] arrExtColumns, string sRowDelimiterDisplayText, OdbcDataReader readerOdbc)
{
//Approach-1: Code to get row count but this is expensive approach.
using (DataTable dt = new DataTable())
{
dt.Load(readerOdbc);
int i = dt.Rows.Count;
}
}

注意:我只需要来自 OdbcDataReader 的行计数。

最佳答案

嗯,在您读取全部结果之前,您不会(也无法)知道结果集中有多少行。

虽然OdbcDataReader确实有一个RecordsAffectedProperty:它是

  • 在您阅读完所有行之前有效,并且
  • 仅适用于受插入、删除或更新语句影响的行。

这对于读取来说没有多大用处。所以,你可以

  • 边读边数每一行:

    using ( OdbcConnection connection = new OdbcConnection(connectionString) )
    using ( OdbcCommand command = connection.CreateCommand() )
    {
    connection.Open();
    command.CommandText = "select * from sys.objects";
    using ( OdbcDataReader reader = command.ExecuteReader() )
    {
    int rowcount = 0 ;
    while ( reader.Read() )
    {
    ++rowcount;
    }
    }
    }
  • 或者,如果您需要在对结果执行某些操作之前知道总行数,那么最好的选择是使用 dataAdapter 之类的东西,并集中获取结果集:

    DataTable dt = new DataTable() ;
    int rows ;

    using ( OdbcConnection connection = new OdbcConnection(connectionString) )
    using ( OdbcCommand command = connection.CreateCommand() )
    using ( OdbcDataAdapter adapter = new OdbcDataAdapter(command) )
    {
    connection.Open();
    command.CommandText = "select * from sys.objects";
    rows = adapter.Fill(dt);
    }

    Console.WriteLine( "adapter.Fill() returned {0}",rows);
    Console.WriteLine( "The data table contains {0} rows and {1} columns.",
    dt.Rows.Count ,
    dt.Columns.Count
    );

    就我而言,它会产生

    adapter.Fill() returned 74
    The data table contains 74 rows and 12 columns.

第三个不是很有用的选项是运行两个查询:一个获取行计数:

select count(*)
from foo
where some-conditions

第二个与第一个相同,返回行:

select *
from foo
where some-conditions

使用 ExecuteScalar() 执行第一个,使用数据读取器执行第二个。

这种方法有两个大问题:

  1. 您的工作量是原来的两倍。
  2. 它引入了并发问题:在执行第一个查询和第二个查询之间行数很可能会发生变化。

关于c# - 如何从 OdbcDataReader 获取行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27970838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com