C#缩短数据表函数

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

使用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个数据表之一。对于每个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));
    }
    ...
}