Wypełnij tabelę danych z czytnika danych

Robię podstawową rzecz w C # (MS VS2008) i mam więcej pytań na temat właściwego projektu niż konkretnego kodu.

Tworzę datatable, a następnie próbuję załadować datatable z datareader (który jest oparty na SQL procedury przechowywanej). Zastanawiam się, czy najskuteczniejszym sposobem załadowania datatable jest wykonanie instrukcji while lub jeśli jest lepszy sposób.

Dla mnie jedyną wadą jest to, że muszę ręcznie wpisywać pola, które chcę dodać w mojej instrukcji while, ale i tak nie wiem, jak to zautomatyzować, ponieważ nie chcę, aby wszystkie pola z SP wybrały tylko te , ale to nie jest wielka sprawa w moich oczach.

Umieściłem fragmenty kodu poniżej całości tego, co robię, chociaż dla mnie sam kod nie jest niezwykły ani nawet tego, o co pytam. Zastanawiam się nad moją metodologią, a później będę się zastanawiać nad kodem, jeśli moja strategia jest niewłaściwa / nieefektywna.

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