如何从OdbcDataReader获取行数?

夏普

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. 它引入了一个并发问题:在执行第一个查询和第二个查询之间,行数可能会发生变化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取点击的行数?

来自分类Dev

如何获取每天的平均行数?

来自分类Dev

如何获取SQL中的行数

来自分类Dev

Spark:如何获取写入的行数?

来自分类Dev

如何使用 Bookshelf 获取行数?

来自分类Dev

如何获取从循环中获取的总行数?

来自分类Dev

如何从JdbcTemplate获取受影响的行数?

来自分类Dev

如何在Groovy SQL中获取行数

来自分类Dev

如何获取行数作为JQuery变量

来自分类Dev

如何获取Cassandra表中的行数

来自分类Dev

如何在EXCEL VBA中获取行数

来自分类Dev

如何获取表上的总行数?

来自分类Dev

如何通过ADBC本机SQL获取行数?

来自分类Dev

JavaFX-8-如何获取TableView的行数?

来自分类Dev

Python:如何获取用MySQLdb删除的行数

来自分类Dev

雄辩的laravel:如何从-> get()获取行数

来自分类Dev

BigQuery更新如何获取更新的行数

来自分类Dev

如何从QTableWidget列获取行数据?

来自分类Dev

如何在EXCEL VBA中获取行数

来自分类Dev

如何使用php获取mysql db的行数

来自分类Dev

如何获取行数(记录ID所在的位置)

来自分类Dev

如何获取特定列中使用的行数

来自分类Dev

如何获取.net中查询更新的行数

来自分类Dev

Rails 如何快速从 CSV 获取行数

来自分类Dev

如何获取表格视觉中的行数

来自分类Dev

如何在 CsvHelper 中获取 csv 行数

来自分类Dev

如何从传递的表中获取行数?

来自分类Dev

获取行数

来自分类Dev

如何使用angularjs从表中获取行数据