我在C#(MS VS2008)中做了一个基本的事情,并且对特定代码的设计提出了更多问题.
我正在创建一个数据表,然后尝试从datareader(基于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());
}
Run Code Online (Sandbox Code Playgroud) 我似乎无法想出一种方法来纠正标题中提到的错误,并且正在寻找关于应该做什么的一些想法.
我试图将excel电子表格的行读入对象.
它第一次循环我没有问题,因为第1行,第1列和第1行第2列都有数据.
但当它到达第2行,第1列和第2行第2列时,它会因上述错误而失败,因为电子表格中的那些单元格是"空的"
我无法解决我可以在哪里进行"if null"检查.
谁能建议怎么做呢?
这是我的代码......
private static void IterateRows(Excel.Worksheet worksheet)
{
//Get the used Range
Excel.Range usedRange = worksheet.UsedRange;
// create an object to store the spreadsheet data
List<SPREADSHEETModel.spreadsheetRow> spreadsheetrows = new List<SPREADSHEETModel.spreadsheetRow>();
//Iterate the rows in the used range
foreach (Excel.Range row in usedRange.Rows)
{
for (int i = 0; i < row.Columns.Count; i++)
{
spreadsheetrows.Add(new SPREADSHEETModel.spreadsheetRow()
{
col1 = row.Cells[i + 1, 1].Value2.ToString(),
col2 = row.Cells[i + 1, 2].Value2.ToString()
});
}
}
}
Run Code Online (Sandbox Code Playgroud) 想象一下一个名为
ViewBag.Modes
Run Code Online (Sandbox Code Playgroud)
其中包含以下内容:
Simple
Advanced
Manual
Complete
Run Code Online (Sandbox Code Playgroud)
我如何像在数组中那样按索引访问viewbag?
例如:Simple的索引为0,则它看起来像这样
ViewBag.Modes[0]
Run Code Online (Sandbox Code Playgroud)
我尝试了上面的方法,但无法正常工作...如何使用Viewbag复制此方法,或者可以使用替代方法?