首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中使用SqlDataReader获取行数

如何在C#中使用SqlDataReader获取行数
EN

Stack Overflow用户
提问于 2009-09-05 13:22:43
回答 5查看 300.8K关注 0票数 104

我的问题是如何在C#中使用SqlDataReader获取查询返回的行数。我已经看到了一些关于这方面的答案,但除了一个用Read()方法执行while循环并递增计数器的答案之外,没有一个是明确定义的。

我的问题是,我试图填充一个多维数组,第一行是列标题名称,之后的每一行都是行数据。

我知道我可以将数据放在列表控件中,不用担心,但为了个人启迪,我也想根据自己的选择将数据拉入和拉出数组,并以不同的格式显示它。

所以我认为我不能先做Read(),然后再递增++,因为这意味着我必须先打开Read(),然后再打开Read(),才能获得行数和列数据。

这只是我所说的一个小例子:

代码语言:javascript
复制
int counter = 0;    

while (sqlRead.Read())
{
    //get rows
    counter++
}

然后使用for循环遍历列并弹出

代码语言:javascript
复制
something.Read();

int dbFields = sqlRead.FieldCount;

for (int i = 0; i < dbFields; i++)
{
   // do stuff to array
}
EN

回答 5

Stack Overflow用户

发布于 2013-09-11 16:15:34

如果您不需要检索所有行,并且希望避免进行双重查询,则可以尝试执行以下操作:

代码语言:javascript
复制
using (var sqlCon = new SqlConnection("Server=127.0.0.1;Database=MyDb;User Id=Me;Password=glop;"))
      {
        sqlCon.Open();

        var com = sqlCon.CreateCommand();
        com.CommandText = "select * from BigTable";
        using (var reader = com.ExecuteReader())
        {
            //here you retrieve what you need
        }

        com.CommandText = "select @@ROWCOUNT";
        var totalRow = com.ExecuteScalar();

        sqlCon.Close();
      }

您可能必须添加一个事务,但不确定重用同一命令是否会自动在其上添加一个事务...

票数 10
EN

Stack Overflow用户

发布于 2009-09-05 13:39:28

根据上面的说明,数据集或类型化数据集可能是一个很好的临时结构,您可以使用它来进行过滤。SqlDataReader意味着可以非常快速地读取数据。当您在while()循环中时,您仍然连接到DB,并且它会等待您执行您正在执行的操作,以便在继续执行之前读取/处理下一个结果。在这种情况下,如果拉入所有数据,关闭与数据库的连接,并“离线”处理结果,可能会获得更好的性能。

人们似乎讨厌数据集,所以上面的事情也可以用强类型对象的集合来完成。

票数 8
EN

Stack Overflow用户

发布于 2009-09-05 13:28:45

您不能直接从数据读取器获取行数,因为这就是所谓的firehose游标-这意味着数据是根据正在执行的读取操作逐行读取的。我建议不要对数据进行两次读取,因为在进行两次读取之间,数据可能会发生变化,因此您会得到不同的结果。

您可以做的是将数据读取到一个临时结构中,并使用它来代替第二次读取。或者,您需要更改检索数据的机制,并使用类似于DataTable的内容。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1383315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档