SqlDataReader如何获取当前记录的序号?

How to get serial number of current record in SqlDataReader?

请注意问题涉及调试

我有一个类似于下面的代码

 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()) {
                        while (rd.Read()) {
                            Debug.Print(rd[0].ToString());
                            // other record processing code
 }}}}

当我在 while 循环中间中断代码执行时,我可以获得已处理的记录数吗?我不介意深入挖掘 SqlDataReader 的胆量,因为我正在 调试 。在编写生产代码时,我会添加一些计数器。

想象一下,我刚刚按下了 Break All (Ctrl-Alt-Break) 我现在想去我所在的地方。我知道断点可以计算命中数,但这不是答案。我也知道 RecordsAffected Property 但它 "is not set until all rows are read and you close the SqlDataReader"

问题是 SqlDataReader 里面的某个地方是否计算处理过的记录。

没有。 Inside the SqlDataReader,没有关于已处理行数的状态。它是一个前向流,因此它也不为已处理的行保留缓存。

我建议在您自己的代码中必要时创建一个计数器整数,或者围绕数据编写一个包装器 reader。