我正在用 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());
}
最佳答案
您可以使用接受IDataReader
的Load()
方法直接从数据读取器加载DataTable
。
var dataReader = cmd.ExecuteReader();
var dataTable = new DataTable();
dataTable.Load(dataReader);
关于c# - 从数据读取器填充数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18961938/