Robię podstawową rzecz w języku C# (MS VS2008) i mam pytanie bardziej na temat właściwego projektu niż określony kod.Wypełnij tabelę danych z czytnika danych
Tworzę datatable, a następnie próbuję załadować datatable z datareadera (który jest oparty na procedurze przechowywanej SQL). Zastanawiam się, czy najbardziej efektywnym sposobem załadowania datatable jest napisanie krótkiego zdania, czy jest lepszy sposób.
Dla mnie jedyną wadą jest to, że muszę ręcznie wpisać pola, które chcę dodać w moim oświadczeniu while, ale nie wiem też, jak to zautomatyzować, ponieważ nie chcę, aby wszystkie pola z SP wybiera tylko te, ale to nie jest wielka sprawa w moich oczach.
Dołączyłem fragmenty kodu poniżej całości tego, co robię, chociaż dla mnie sam kod nie jest niezwykły lub nawet o to pytam. Moreso zastanawia się nad moją metodologią, będę się nad tym zastanawiać, jeśli moja strategia będzie zła/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());
}
Duplikat pytania: http://stackoverflow.com/questions/4089471/how-do-i-film-a-datatable-using-datareader – vapcguy