小编典典

从数据读取器填充数据表

c#

我在C#(MS VS2008)中做一个基本的事情,除了适当的代码之外,还有更多关于适当设计的问题。

我正在创建一个数据表,然后尝试从一个数据读取器(基于SQL存储过程)加载该数据表。我想知道的是,加载数据表的最有效方法是执行while语句,还是有更好的方法。

对我来说,唯一的缺点是我必须手动输入要在while语句中添加的字段,但是我也不知道如何自动执行此操作,因为我不想从SP中选择所有字段,但是在我看来这并不是什么大问题。

尽管我对代码本身并不满意,甚至对我所问的内容并不满意,但我还是将代码片段包括在我所做的全部工作之下。此外,我想知道自己的方法是什么,如果我的策略错误/效率低下,我将在稍后寻求代码帮助。

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());
}

阅读 278

收藏
2020-05-19

共1个答案

小编典典

您可以DataTable使用Load()接受的方法直接从数据读取器加载IDataReader

var dataReader = cmd.ExecuteReader();
var dataTable = new DataTable();
dataTable.Load(dataReader);
2020-05-19