Rellenar la tabla de datos del lector de datos

Estoy haciendo algo básico en C # (MS VS2008) y tengo una pregunta más sobre el diseño adecuado que el código específico.

Estoy creando una tabla de datos y luego trato de cargarla desde un datareader (que se basa en un procedimiento almacenado de SQL). Lo que me pregunto es si la forma más eficiente de cargar la base de datos es hacer una sentencia while o si hay una forma mejor.

Para mí, el único inconveniente es que tengo que escribir manualmente los campos que quiero agregar en mi declaración while, pero tampoco conozco la forma de automatizar eso, ya que no quiero que todos los campos del SP solo seleccionen unos , pero eso no es un gran problema en mis ojos.

He incluido fragmentos de código debajo de la totalidad de lo que hago, aunque para mí el código en sí no es notable o incluso lo que estoy preguntando. Más aún, preguntándome por mi metodología, buscaré ayuda con el código más adelante si mi estrategia es incorrecta / 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());
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta