如何获取SqlDataReader当前记录序号?调试中断查看已处理记录数
嘿,我来帮你搞定这两个和SqlDataReader相关的技术问题:
问题1:如何获取SqlDataReader中当前记录的序号?
SqlDataReader本身并没有提供直接获取当前记录序号的属性——毕竟它是一个向前只读的数据流,不会主动跟踪记录位置序号。咱得自己手动维护一个计数器来实现这个需求:
- 在
while (rd.Read())循环外面定义一个整数变量,比如int currentRecordIndex = 0;(如果想从1开始计数,就初始化为0,每次读取后自增;如果习惯从0开始,就初始化为0,读取前自增,按需调整即可) - 每次成功读取一条记录后,更新计数器,这个值就是当前记录的序号。
给你修改后的代码示例:
using (SqlConnection cn = new SqlConnection("Connection string")) { cn.Open(); using (SqlCommand cmd = cn.CreateCommand()) { cmd.CommandText = "select aField from ATABLE"; using (SqlDataReader rd = cmd.ExecuteReader()) { int currentRecordIndex = 0; while (rd.Read()) { currentRecordIndex++; Debug.Print($"当前记录序号:{currentRecordIndex},字段值:{rd[0].ToString()}"); // other record processing code } } } }
问题2:调试中断时能否获取已处理的记录数量?
当然可以!但同样的,SqlDataReader不会帮你跟踪已处理的记录数,还是得靠自己维护一个计数器变量。具体做法如下:
- 在循环外部声明一个计数器,比如
int processedRecordCount = 0; - 每进入一次循环(也就是每处理一条记录),就把计数器加1
- 调试中断的时候,你可以直接在调试器里查看这个变量的值——不管是把鼠标悬停在变量上,还是添加到监视窗口,都能立刻看到已经处理了多少条记录。
修改你的代码示例如下:
using (SqlConnection cn = new SqlConnection("Connection string")) { cn.Open(); using (SqlCommand cmd = cn.CreateCommand()) { cmd.CommandText = "select aField from ATABLE"; using (SqlDataReader rd = cmd.ExecuteReader()) { int processedRecordCount = 0; while (rd.Read()) { processedRecordCount++; Debug.Print(rd[0].ToString()); // other record processing code } } } }
当你在循环执行过程中中断代码时,processedRecordCount的值就是已经处理完成的记录数量啦。
内容的提问来源于stack exchange,提问作者IvanH
相关产品推荐
相关产品推荐

