C# 使用COUNT(*)运行SQL查询,这样我们就知道有多少记录将通过DataReader访问

C# 使用COUNT(*)运行SQL查询,这样我们就知道有多少记录将通过DataReader访问,c#,mysql,sql,ado.net,C#,Mysql,Sql,Ado.net,我使用以下查询从mysql数据库中提取数据 选择ProductCode、ProductName、ProductCategory 从产品 哪里 查询返回的数据被.NET应用程序使用,我通过DataReader一行一行地查看了一百万行 现在我必须显示进度条,告诉用户已经收到了多少百分比的行。这意味着我需要一个总数 一位朋友建议我添加COUNT(*)作为一个额外的列,它将有重复的数字,但我们不必做两次往返,一次获取COUNT,另一次获取行 选择ProductCode、ProductName、Prod

我使用以下查询从mysql数据库中提取数据

选择ProductCode、ProductName、ProductCategory
从产品
哪里
查询返回的数据被.NET应用程序使用,我通过DataReader一行一行地查看了一百万行

现在我必须显示进度条,告诉用户已经收到了多少百分比的行。这意味着我需要一个总数

一位朋友建议我添加COUNT(*)作为一个额外的列,它将有重复的数字,但我们不必做两次往返,一次获取COUNT,另一次获取行

选择ProductCode、ProductName、ProductCategory、COUNT(*)
从产品
哪里
当我添加COUNT(*)时,mysql只返回一条记录。 第二,我不确定这是否是个好主意


请分享您对此的了解,谢谢

在完全创建答案集之前,DBMS可能会开始向客户端返回行,那么获得100%正确值的唯一方法是使用

SELECT COUNT(*) FROM (your query) x;
在运行查询或将count用作窗口函数之前,MySQL不支持此操作:

SELECT ProductCode, ProductName, ProductCategory, COUNT(*) OVER () 
   FROM Product
      WHERE <<Criteria goes here>>
选择ProductCode、ProductName、ProductCategory、COUNT(*)超过()
从产品
哪里

数据库管理系统可能会在完全创建答案集之前开始向客户端返回行,那么获得100%正确值的唯一方法是使用

SELECT COUNT(*) FROM (your query) x;
在运行查询或将count用作窗口函数之前,MySQL不支持此操作:

SELECT ProductCode, ProductName, ProductCategory, COUNT(*) OVER () 
   FROM Product
      WHERE <<Criteria goes here>>
选择ProductCode、ProductName、ProductCategory、COUNT(*)超过()
从产品
哪里

您可以使用SQL\u CALC\u FOUND\u行

e、 g。 选择SQL\u CALC\u FOUND\u行、ProductCode、ProductName、ProductCategory 从产品 在哪里

然后运行此查询以获取行数而不进行筛选
'选择找到的行();'

您可以使用SQL\u CALC\u FOUND\u行

e、 g。 选择SQL\u CALC\u FOUND\u行、ProductCode、ProductName、ProductCategory 从产品 在哪里

然后运行此查询以获取行数而不进行筛选

'选择找到的行();'

假设您在
数据表中加载检索到的记录,只需检查
数据表.Rows.Count()
属性以查看您有多少记录。

假设您在
数据表中加载检索到的记录,只需检查
数据表.Rows.Count()
property查看您有多少。

很有趣。我必须找到一种方法将其安装到MySqlDataReader中。但感谢分享。我试图将其放入输出参数,但参数值返回空值。显然,那个说直到datareader关闭才设置输出参数的人是对的。很有趣。我必须找到一种方法将其安装到MySqlDataReader中。但感谢分享。我试图将其放入输出参数,但参数值返回空值。显然,关于datareader关闭前未设置输出参数的人是对的。SQL Server
output
参数值在
datareader关闭后才可用。(.)存储过程可以返回多个记录集,例如,一个记录集带有计数,另一个记录集带有数据,但这在这里可能没有帮助。当返回的行数较少时,可以将它们缓存在临时表或表变量中,以便首先返回计数。是否可以执行快速
Count()
以提供足够精确的值来显示完成百分比?我使用的是mysql而不是SQL Server SQL Server
输出
参数值在关闭
DataReader
后才可用。(.)存储过程可以返回多个记录集,例如,一个记录集带有计数,另一个记录集带有数据,但这在这里可能没有帮助。当返回的行数较少时,可以将它们缓存在临时表或表变量中,以便首先返回计数。是否可以执行快速的
Count()
,以提供足够精确的值来显示完成百分比?我使用的是mysql而不是SQL Server。我使用的是DataReader。@fahadash:将查询结果放入datatable中,然后处理掉。这不是开销吗?因为为了构建datatable,我必须遍历所有读卡器的记录,如果我要遍历读卡器,我还不如在收到记录时处理这些记录?@fahadash:当
DataReader
允许您遍历记录时,命令对象已经执行,服务器已经返回了结果。没有更多的“开销”需要担心,但问题是,当读者准备好的时候;所有的行都下载到客户机上了吗?我使用的是DataReader。@fahadash:将查询的结果放入datatable中,然后处理掉。这不是开销吗?因为为了构建datatable,我必须遍历所有读卡器的记录,如果我要遍历读卡器,我还不如在收到记录时处理这些记录?@fahadash:当
DataReader
允许您遍历记录时,命令对象已经执行,服务器已经返回了结果。没有更多的“开销”需要担心,但问题是,当读者准备好的时候;是否将所有行下载到客户端计算机?