我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;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我只想要行计数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;
}
}
}
Run Code Online (Sandbox Code Playgroud)或者,如果你需要知道总的行数做一些事情的结果之前,你最好的选择是使用像一个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
);
Run Code Online (Sandbox Code Playgroud)
在我的情况下,产生,
adapter.Fill() returned 74
The data table contains 74 rows and 12 columns.
Run Code Online (Sandbox Code Playgroud)第三个不是非常有用的选项是运行两个查询:一个获取rowcount:
select count(*)
from foo
where some-conditions
Run Code Online (Sandbox Code Playgroud)
第二个,与第一个相同,返回行:
select *
from foo
where some-conditions
Run Code Online (Sandbox Code Playgroud)
ExecuteScalar()使用数据读取器执行第一次使用和第二次使用.
这种方法有两个大问题:
| 归档时间: |
|
| 查看次数: |
6537 次 |
| 最近记录: |