【发布时间】:2012-10-30 12:57:00
【问题描述】:
使用 MS Visual Studio 2012 Express,使用 C#.NET 4.0。
大家好,我相信这很简单。
应老板的要求,我一直在赶一个程序,但现在事实证明我有更多的空闲时间。
所以我正在检查代码,试图使其更紧凑、更简洁等。
我有这个功能.....
public void RunMonth()
{
//** top 10 listings*********************//
SetTxtBox1(DateTime.Now.ToString() + " ==== END OF MONTH REPORTS starting.........\r\n");
SetTxtBox1(" **************************************************************************************\r\n");
try
{
VRMtableDESC = querys.TopVRM("DESC");
SetTxtBox1(DateTime.Now.ToString() + " ==== VRM Top has been loaded\r\n");
}
catch
{
SetTxtBox1(DateTime.Now.ToString() + " ==== VRM Top has FAILED\r\n");
}
}
“VRMtableDESC”是一个数据表,是大约 18 个数据表之一。对于每个数据表,都会运行此 try 语句。
现在您可以知道,当前每张桌子都会重复 18 次。 相反,我想循环进入表格并用那里的数据填充它们。
有没有办法做到这一点?据我所知,我也需要一些数据表和 query.function 调用的集合。
到目前为止,我一直处于空白状态,所以我希望我缺少一些东西。
提前致谢
::::更新:::: 好的,到目前为止我已经设置好了......
foreach (DataTable tbl in MyDataSet.Tables)
{
tbl.TableName.Equals(querys.TopVRM(""));
}
equals 方法的方法选择也需要是动态的......有什么想法吗?
::更新(31/10/12)::
您好,我遇到了一个错误,常见错误“对象未发送到对象实例”
它出现在 foreach 循环的合并中。
我已经调试了我的查询调用,看起来不错。
var tables = new SortedDictionary<string, Func<DataTable>>()
{
{"VRMtableDESC", () => querys.TopVRM("DESC")},
{"VRMtableASC", () => querys.BotVRM("ASC")},
{"SpectableDESC", () => querys.TopSpec("DESC")},
{"SpectableASC", () => querys.botSpec("ASC")},
{"ParttableDESC", () => querys.TopPart("DESC")},
{"ParttableASC", () => querys.BotPart("ASC")},
{"MantableDESC", () => querys.TopManual("DESC")},
{"MantableASC", () => querys.BotMan("ASC")}, //why is this first to run?????
{"UsersLockedTbl",() => querys.UserLocked()},
{"NewUsersTbl", () => querys.NewUsers()},
{"VRMtotaltblTOP", () => querys.VRMtotalTOP("")},
{"PARTtotaltblTOP", () => querys.PARTtotalTOP("")},
{"SPECtotaltblTOP", () => querys.SPECtotalTOP("")},
{"MANtotaltblTOP", () => querys.MANtotalTOP("")},
{"VRMtotaltblBOT", () => querys.VRMtotalBOT("")},
{"PARTtotaltblBOT", () => querys.PARTtotalBOT("")},
{"SPECtotaltblBOT", () => querys.SPECtotalBOT("")},
{"MANtotaltblBOT", () => querys.MANtotalBOT("")},
};
foreach(var kvp in tables)
{
try
{
MyDataSet.Tables[kvp.Key].Merge(kvp.Value());//error occurs here
SetTxtBox1(String.Format("{0} ==== {1} has been Loaded\r\n", DateTime.Now.ToString(), kvp.Key));
}catch(Exception e)
{
SetTxtBox1(String.Format("{0} ==== {1} has FAILED\r\n", DateTime.Now.ToString(), kvp.Key));
MessageBox.Show("error:::" + e);
}
}
AutoRunApp();
任何帮助都会很棒。
更新::
这是我从“bunchofquerys”类中调用的查询
public DataTable BotMan(string order)
{
SqlConnection conn = new SqlConnection(myConnString32);
SqlCommand vrm = new SqlCommand();
//BindingSource bindme = new BindingSource();
SqlDataAdapter adapt1 = new SqlDataAdapter(vrm);
// DataSet dataSet1 = new DataSet();
DataTable table1 = new DataTable();
try
{
vrm.Connection = conn;
vrm.CommandType = CommandType.StoredProcedure;
if (order.Equals("DESC"))
{
vrm.CommandText = "dbo.TopManual";
}
vrm.CommandText = "dbo.BotManual";
vrm.CommandTimeout = 360;
vrm.Parameters.AddWithValue("@OrderBy", order);
adapt1.Fill(table1);
return table1;
}
catch (Exception e)
{
MessageBox.Show("eeror::zomg::: " + e);
}
return table1;
}
【问题讨论】:
-
DataTable 的自然集合是DataSet。 msdn.microsoft.com/en-us/library/aeskbwf7.aspx
-
确实我有一个数据集,我已经向其中添加了空白表。但不确定如何将查询添加到数据集中的每个表中。
-
目前我有一个 foreach(myDataSet.tables 中的数据表 tbl),但它是我需要遍历的代码上下文,我不确定,语法等