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。
请注意问题涉及调试。
我有一个类似于下面的代码
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。