Я делаю основную вещь в С# (MS VS2008) и задаю вопрос о правильном дизайне, чем конкретный код.
Я создаю datatable, а затем пытаюсь загрузить datatable из datareader (который основан на хранимой процедуре SQL). Меня интересует, является ли самый эффективный способ загрузки данных - делать инструкции while или, если есть лучший способ.
Для меня единственный недостаток - мне нужно вручную вводить поля, которые я хочу добавить в мой оператор while, но я также не знаю, как это автоматизировать, так как я не хочу, чтобы все поля из SP просто выберите их, но это не огромная сделка в моих глазах.
Я включил фрагменты кода ниже всего, что я делаю, хотя для меня сам код не примечателен или даже о том, о чем я прошу. Moreso интересуется моей методологией, я буду приставать к кодовой помощи позже, если моя стратегия неверна/неэффективна.
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());
}