Preencher tabela de dados do leitor de dados

Eu estou fazendo uma coisa básica em c # (MS VS2008) e tenho uma pergunta mais sobre o design adequado do que o código específico.

Eu estou criando uma tabela de dados e, em seguida, tentando carregar a tabela de dados de um datareader (que é baseado em um procedimento armazenado do SQL). O que estou querendo saber é se a maneira mais eficiente de carregar a tabela de dados é fazer uma instrução while ou se há uma maneira melhor.

Para mim, a única desvantagem é que eu tenho que digitar manualmente os campos que eu quero adicionar na minha instrução while, mas eu também não sei como automatizar isso de qualquer maneira, já que eu não quero todos os campos do SP, basta selecionar os , mas isso não é um grande negócio aos meus olhos.

Eu incluí trechos de código abaixo da totalidade do que eu faço, embora para mim o código em si não é notável ou até mesmo o que eu estou perguntando. Moreso perguntando sobre a minha metodologia, eu vou me importunar por código de ajuda mais tarde se a minha estratégia estiver errada / ineficiente.

var dtWriteoffUpload = new DataTable();
dtWriteoffUpload.Columns.Add("Unit");
dtWriteoffUpload.Columns.Add("Year");
dtWriteoffUpload.Columns.Add("Period");
dtWriteoffUpload.Columns.Add("Acct");
dtWriteoffUpload.Columns.Add("Descr");
dtWriteoffUpload.Columns.Add("DEFERRAL_TYPE");
dtWriteoffUpload.Columns.Add("NDC_Indicator");
dtWriteoffUpload.Columns.Add("Mgmt Cd");
dtWriteoffUpload.Columns.Add("Prod");
dtWriteoffUpload.Columns.Add("Node");
dtWriteoffUpload.Columns.Add("Curve_Family");
dtWriteoffUpload.Columns.Add("Sum Amount");
dtWriteoffUpload.Columns.Add("Base Curr");
dtWriteoffUpload.Columns.Add("Ledger");  

cmd = util.SqlConn.CreateCommand();
cmd.CommandTimeout = 1000;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "proc_writeoff_data_details";
cmd.Parameters.Add("@whoAmI", SqlDbType.VarChar).Value = 

WindowsIdentity.GetCurrent().Name;

cmd.Parameters.Add("@parmEndDateKey", SqlDbType.VarChar).Value = myMostRecentActualDate;
cmd.Parameters.Add("@countrykeys", SqlDbType.VarChar).Value = myCountryKey;
cmd.Parameters.Add("@nodekeys", SqlDbType.VarChar).Value = "1,2";
break;


dr = cmd.ExecuteReader();
while (dr.Read())                    
{
    dtWriteoffUpload.Rows.Add(dr["country name"].ToString(), dr["country key"].ToString());
}

questionAnswers(5)

yourAnswerToTheQuestion