Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ForEach C期间保持向表中添加行#_C#_Loops_Foreach_Datatables - Fatal编程技术网

C# 在ForEach C期间保持向表中添加行#

C# 在ForEach C期间保持向表中添加行#,c#,loops,foreach,datatables,C#,Loops,Foreach,Datatables,我有下面的代码,它在运行foreach语句以运行多个文件、填充名为dt_LearnDelivery和dt_LearnDelFAM的数据表时非常有用。但是,对于它运行的每个文件,它都会覆盖表的现有内容。我想要发生的是,每次它通过foreach语句读取新文件时,它都会添加到dt_LearnDelivery和dt_LearnDelFAM中的任何现有行中。有什么建议吗 using System; using System.Collections.Generic; using System.Data; u

我有下面的代码,它在运行foreach语句以运行多个文件、填充名为dt_LearnDelivery和dt_LearnDelFAM的数据表时非常有用。但是,对于它运行的每个文件,它都会覆盖表的现有内容。我想要发生的是,每次它通过foreach语句读取新文件时,它都会添加到dt_LearnDelivery和dt_LearnDelFAM中的任何现有行中。有什么建议吗

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MessageLogging;

namespace ILRValidation
{
    public static partial class Validation
    {
    static MessageLogging.Msgs msgs = Msgs.Instance;
    static MessageLogging.Progress progress = Progress.Instance;
    /// <summary>
    /// Takes ILR Converted dataset, and checks for null values and outputs to separate validation dataset
    /// </summary>
    /// <param name="ds_NullChecks">ILR XML Import Dataset</param>
    /// <returns></returns>
    public static DataSet NullChecks(DataSet ds_NullChecks)
    {
        return Checks(ds_NullChecks);
    } 

    public static DataSet NullChecks(string xmlPath)
    {

        DataSet ds_xmlDataset = new DataSet();
        FileInfo fileInfo = new FileInfo(xmlPath);

        ds_xmlDataset.ReadXml(fileInfo.FullName, XmlReadMode.Auto);

        return Checks(ds_xmlDataset);
    }
    private static DataSet Checks(DataSet dataset)
    {
        msgs.AddMsg("Entering Checks");
        progress.ResetValue();

        if (ds_Validation.Tables.Contains("LearningDelivery_NullValues"))
        {
            ds_Validation.Tables.Remove("LearningDelivery_NullValues");
        }

        if (ds_Validation.Tables.Contains("LearnerDeliveryFAM_NullValues"))
        {
            ds_Validation.Tables.Remove("LearnerDeliveryFAM_NullValues");
        }

        msgs.AddMsg("Adding Extra columns to LearningDelivery & LearningDeliveryFAM");
        dataset.Tables["LearningDelivery"].Columns.Add("LearnRefNumber").SetOrdinal(0);
        dataset.Tables["LearningDelivery"].Columns.Add("Comments");
        dataset.Tables["LearningDeliveryFAM"].Columns.Add("LearnRefNumber").SetOrdinal(0);
        dataset.Tables["LearningDeliveryFAM"].Columns.Add("Comments");

        DataTable dt_LearnDelivery = new DataTable();
        dt_LearnDelivery.TableName = "LearningDelivery_NullValues";



        foreach (DataColumn dataColumn in dataset.Tables["LearningDelivery"].Columns)
        {
            dt_LearnDelivery.Columns.Add(dataColumn.ColumnName);
        }



        //Make a table to hold the issues with LearnerDeliveryFAM
        DataTable dt_LearnDelFAM = new DataTable();
        dt_LearnDelFAM.TableName = "LearnerDeliveryFAM_NullValues";

        foreach (DataColumn dataColumn in dataset.Tables["LearningDeliveryFAM"].Columns)
        {
            dt_LearnDelFAM.Columns.Add(dataColumn.ColumnName);
        }

        progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(LearnAimRef,'') = ''").Count());
        progress.SetMessage("Checked for issues 1 of 9");

        //Add "No Aim" issues to new table
        foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(LearnAimRef,'') = ''"))
        {
            dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
            dr["Comments"] = "LearnAimRef - No Aim Ref Supplied";

            dt_LearnDelivery.Rows.Add(dr.ItemArray);

            progress.IncProgress();
        }

        progress.int_Progress = 0;
        progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(AimType,'') = ''").Count());
        progress.SetMessage("Checked for issues 2 of 9");

        //Add "No Aim Type" issues to new table
        foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(AimType,'') = ''"))
        {

            dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
            dr["Comments"] = "AimType - No Aim Type Supplied";

            dt_LearnDelivery.Rows.Add(dr.ItemArray);

            progress.IncProgress();
        }

        progress.int_Progress = 0;
        progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(AimSeqNumber,'') = ''").Count());
        progress.SetMessage("Checked for issues 3 of 9");

        //Add "No Aim Sequence Number" issues to new table
        foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(AimSeqNumber,'') = ''"))
        {

            dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
            dr["Comments"] = "AimSeqNumber - No Aim Sequence Number Supplied";

            dt_LearnDelivery.Rows.Add(dr.ItemArray);

            progress.IncProgress();
        }
        progress.int_Progress = 0;
        progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(LearnStartDate,'') = ''").Count());
        progress.SetMessage("Checked for issues 4 of 9");

        //Add "No Learner Start Date" issues to new table
        foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(LearnStartDate,'') = ''"))
        {

            dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
            dr["Comments"] = "LearnStartDate - No Learner Start Date Supplied";

            dt_LearnDelivery.Rows.Add(dr.ItemArray);

            progress.IncProgress();
        }

        progress.int_Progress = 0;
        progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(LearnPlanEndDate,'') = ''").Count());
        progress.SetMessage("Checked for issues 5 of 9");

        //Add "No Learner Planned End Date" issues to new table
        foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(LearnPlanEndDate,'') = ''"))
        {

            dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
            dr["Comments"] = "LearnPlanEndDate - No Learner Planned End Date Supplied";

            dt_LearnDelivery.Rows.Add(dr.ItemArray);

            progress.IncProgress();
        }

        progress.int_Progress = 0;
        progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(FundModel,'') = ''").Count());
        progress.SetMessage("Checked for issues 6 of 9");

        //Add "No Funding Model" issues to new table
        foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(FundModel,'') = ''"))
        {

            dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
            dr["Comments"] = "FundModel - No Funding Model Supplied";

            dt_LearnDelivery.Rows.Add(dr.ItemArray);

            progress.IncProgress();
        }

        progress.int_Progress = 0;
        progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(DelLocPostCode,'') = ''").Count());
        progress.SetMessage("Checked for issues 7 of 9");

        //Add "No Delivery Location Postcode" issues to new table
        foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(DelLocPostCode,'') = ''"))
        {

            dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
            dr["Comments"] = "DelLocPostCode - No Delivery Location Postcode Supplied";

            dt_LearnDelivery.Rows.Add(dr.ItemArray);

            progress.IncProgress();
        }

        progress.int_Progress = 0;
        progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(CompStatus,'') = ''").Count());
        progress.SetMessage("Checked for issues 8 of 9");

        //Add "No Completion Status" issues to new table
        foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(CompStatus,'') = ''"))
        {

            dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
            dr["Comments"] = "CompStatus - No Completion Status Supplied";

            dt_LearnDelivery.Rows.Add(dr.ItemArray);

            progress.IncProgress();
        }

        progress.int_Progress = 0;
        progress.SetMax(dataset.Tables["LearningDeliveryFAM"].Select("Isnull(LearnDelFAMCode,'') = '' and LearnDelFAMType = 'SOF'").Count());
        progress.SetMessage("Checked for issues 9 of 9");

        //Add "No SOF" issues to new table
        foreach (DataRow dr in dataset.Tables["LearningDeliveryFAM"].Select("Isnull(LearnDelFAMCode,'') = '' and LearnDelFAMType = 'SOF'"))
        {
            DataRow AimRow = dr.GetParentRow("LearningDelivery_LearningDeliveryFAM");

            dr["LearnRefNumber"] = AimRow.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
            dr["Comments"] = "LearnDelFAMCode is null where LearnDelFAMType is SOF";

            dt_LearnDelFAM.Rows.Add(dr.ItemArray);

            progress.IncProgress();
        }


        ds_Validation.Tables.Add(dt_LearnDelivery);
        ds_Validation.Tables.Add(dt_LearnDelFAM);

        return ds_Validation;
    }
}
}

在每次运行
方法检查(DataSet DataSet)
时,使用

DataTable dt_LearnDelivery = new DataTable();
该变量需要升级为类的静态变量

namespace ILRValidation
{
    public static partial class Validation
    {
        static MessageLogging.Msgs msgs = Msgs.Instance;
        static MessageLogging.Progress progress = Progress.Instance;

        static DataTable dt_LearnDelivery = new DataTable();
        ...

是的,帮你自己一个忙,按照@Broots Waymb的建议,将该方法分解为更小的方法。

我强烈建议的一件事的可能重复是将
检查方法分解。它对单个方法做了很多工作,在调试过程中对您没有任何帮助。这只是冰山一角。您计划如何初始化该表?为什么一切都是静态的?如果要为一组新文件重用验证类,则需要清除所有内容。
namespace ILRValidation
{
    public static partial class Validation
    {
        static MessageLogging.Msgs msgs = Msgs.Instance;
        static MessageLogging.Progress progress = Progress.Instance;

        static DataTable dt_LearnDelivery = new DataTable();
        ...