Bueno, no se cual hayan sido tus otras tres preguntas, pero respecto a la de datareader, me parece que no contiene ningun metodo para saber cuantos registros leyo, pues se leen de manera secuencial, y solo regresa una especie de fin de lectura, pero hay otras formas de saber el numero de registros, por ejemplo, se me ocurre usar sentencias SQL compuestas, y leer el resultado en una variable, por ejemplo:
SELECT SUM(clientes_cuenta) FROM (SELECT COUNT(cliente_nombre) AS clientes_cuenta FROM clientes GROUP BY cliente_nombre) AS clientes_temp;
El select mas interno cuenta todos los nombres de una tabla llamada clientes, y guarda el resultado en una columna llamada clientes_cuenta, el select mas externo suma todo el campo clientes_cuenta creado en el select interno. De esa forma obtienes el total de clientes de una tabla. Si colocas condiciones, adicionales, obtendrias el numero de filas que cumplen con la condicion, y por lo tanto, el numero que en realidad leiste.
Espero y eso te sirva.
Saludos