C#缩短数据表函数
使用MS Visual Studio 2012 Express,使用C#.NET 4.0 嗨,伙计们,我相信这是一个简单的问题 我一直在应老板的要求赶着做一个项目,但现在我有了更多的空闲时间 因此,我正在浏览代码,试图使其更紧凑、更干净等 我有一个功能C#缩短数据表函数,c#,winforms,datatable,C#,Winforms,Datatable,使用MS Visual Studio 2012 Express,使用C#.NET 4.0 嗨,伙计们,我相信这是一个简单的问题 我一直在应老板的要求赶着做一个项目,但现在我有了更多的空闲时间 因此,我正在浏览代码,试图使其更紧凑、更干净等 我有一个功能 public void RunMonth() { //** top 10 listings*********************// SetTxtBox1(DateTime.Now.ToString()
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个数据表之一。对于每个datatable,都会运行该try语句
现在可以看出,每个表当前重复18次。
相反,我想循环到表中,并用这些数据填充它们
有办法做到这一点吗?据我所知,我还需要一些数据表和query.function调用的集合
到目前为止,我还是一片空白,所以我希望我错过了一些东西
提前谢谢
::更新:::
好的,到目前为止我已经准备好了
foreach (DataTable tbl in MyDataSet.Tables)
{
tbl.TableName.Equals(querys.TopVRM(""));
}
equals方法的方法选择也需要动态。。。。有什么想法吗
::更新(2012年10月31日)::
您好,我收到一个错误,常见错误“对象未发送到对象的实例”
它在foreach循环中的merge上出现
我已经调试了我的查询调用,看起来很好
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();
你说你已经有了一个
数据集
。填写所有表格的一个简单方法是使用
在本例中,我创建了表名(数据集
中的表名)和相应的查询函数(假设它们返回具有类似模式的数据表
,并且您的数据集
名为ds
)之间的映射
使用键
从数据集
查询适当的数据表
,然后使用合并
方法“填充”数据表
var tables = new SortedDictionary<string, Func<DataTable>>() //or use List of Tuples...
{
{"VRM_TOP", () => querys.TopVRM("DESC")},
{"FooBar_TOP", () => querys.FooBar("DESC")},
{"Something", () => querys.Something("ASC")},
};
foreach(var kvp in tables)
ds.Tables[kvp.Key].Merge(kvp.Value());
DataTable的自然集合是DataSet。事实上,我有一个数据集,我给它添加了空白表。但是不知道如何将查询添加到数据表中的每个表中。当前我有一个FrACH(MyDataSet…表中的DataTab-TBL),但是它的代码上下文需要通过IM来确定,语法EtCIEVE使用了您的解决方案,出现了一个错误,表示已存在具有相同密钥的Entry,有什么想法吗?您可能在字典中添加了两次密钥。您好,是的。然而,我确实有一个新问题,我将更新我的问题以显示发生了什么。我猜
querys
对象的一个方法是返回null
,而不是DataTable
(但您应该知道null
到底是什么)。您应该能够找出它正在使用调试器并检查kvp.Key
。我在sql manager上运行了我的查询,运行良好。在我的程序中运行该方法时没有错误,这是表中没有值的奇怪原因。仍然没有错误,合并时发生错误。kvp.key表示“mantableasc”,kvp.value表示“kvp.value={Method={System.Data.DataTable b__8()}”
var tables = new SortedDictionary<string, Func<DataTable>>() //or use List of Tuples...
{
{"VRM_TOP", () => querys.TopVRM("DESC")},
{"FooBar_TOP", () => querys.FooBar("DESC")},
{"Something", () => querys.Something("ASC")},
};
foreach(var kvp in tables)
ds.Tables[kvp.Key].Merge(kvp.Value());
foreach(var kvp in tables)
{
try
{
ds.Tables[kvp.Key].Merge(kvp.Value());
SetTxtBox1(String.Format("{0} ==== {1} has ben loaded\r\n", DateTime.Now, kvp.Key));
}
...
}