作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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()
执行第一个,使用数据读取器执行第二个。
这种方法有两个大问题:
关于c# - 如何从 OdbcDataReader 获取行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27970838/
我是一名优秀的程序员,十分优秀!