Essa resposta pode chegar um pouco tarde, mas talvez ajude outras pessoas.
Em muitos casos é suficiente mostrar o número de registros lidos até o momento. Isso pode ser feito manipulando o evento DataTable.RowChanged. A partir de uma implementação de teste pude verificar que o evento é acionado para cada linha adicionada pelo DataAdapter.Fill-Method. Ao manipular o evento, você pode obter os registros de número lidos observando o DataTable.Rows.Count-Property
O que costumo fazer é ler os dados em um thread em segundo plano, que atualiza uma entrada de rótulo ou caixa de listagem. O método que realmente atualiza o gui armazena as atualizações no rótulo para que as alterações do gui ocorram apenas uma vez por segundo para evitar oscilações.
Espero que isto ajude.
Sascha