разница между двумя таблицами данных - PullRequest
2 голосов
/ 24 июня 2011

У меня проблема здесь.Если кто-нибудь из вас может помочь мне в этом вопросе, это будет geat.

Поскольку я новый пользователь, он не позволяет мне публиковать новые изображения.

Таблица1 имеет две строки саналогичные данные, как показано ниже (пожалуйста, попробуйте выглядеть как DataView).

RID      | Release_Point_ID   | short_desc
-------------------------------------------
1007     | SV006              | Boiler1
1008     | SV006              | Boiler2

Таблица2 содержит одну строку с теми же данными.

RID      | Release_Point_ID   | short_desc
-------------------------------------------
1017     | SV006              | Boiler

Мой фрагмент кода ниже сканирует и прерывает цикл, как только находит данные в Таблице 2.

Если вы видите два прикрепленных снимка вместе с этим письмом, этоПредставления DataSet для двух разных таблиц данных.На этих снимках я выделил строку для столбца Process_rid со строкой "100100164".И то же самое для table2, но здесь у нас есть две строки.

Мне нужно получить разницу между этими двумя таблицами данных.Я привел примеры снимков для понимания сценария, код, который я написал, очень простой, но пропустит строку, если в ней есть две общие / похожие строки.

#region get Difference Table
    public static bool isEqual;
    public static DataTable table;
    public static string table2PrvRow, tablePrvRow;
    public static int tblRow = 0, tableRCount = 0;
    // This function fetches the row which is different in both the tables.
    public DataTable getDifferenceTable(DataTable table1, DataTable table2)
    {
        //Create Empty Table
        DataTable table = new DataTable("Difference");
        try
        {
            if (table1.Rows.Count > table2.Rows.Count)
            {
                resultTable = table1.Clone();
                DataRow resultRow = resultTable.NewRow();
                if (tblName == "INV_SOURCES")
                {
                    string sourceId = "27" + string.Format("{0:00000000}", getPreferredID(facId));
                    table = _DB.ReadDataTable(string.Format("SELECT SOURCE_NAME FROM RAPIDS.INV_SOURCES WHERE INVENTORY_RID = {0} AND SOURCE_ID = {1}", glblVars.invRid, sourceId));
                }
                else if (tblName == "INV_PROCESS_RELEASE_POINTS")
                    table = _DB.ReadDataTable(string.Format("SELECT IPRP.PROCESS_RID FROM RAPIDS.INV_PROCESS_RELEASE_POINTS IPRP WHERE IPRP.SOURCE_RID = {0}", glblVars.RapidsSourceRID));
                for (int row = 0; row < table.Rows.Count; row++)
                {
                    foreach (DataRow rpIDRow in table2.Rows)
                    {
                        if (tblName == "INV_SOURCES" && rpIDRow["SOURCE_NAME"].ToString() == table1.Rows[row]["SOURCE_NAME"].ToString())
                        { copy = "N"; break; }
                        else if (tblName == "INV_PROCESS_RELEASE_POINTS" && rpIDRow["PROCESS_RID"].ToString() == table1.Rows[row]["PROCESS_RID"].ToString())
                        { copy = "N"; break; }
                        else
                        { copy = "Y"; }
                    }

                    if (copy == "Y")
                    { resultRow = resultTable.NewRow(); resultRow.ItemArray = table1.Rows[row].ItemArray; resultTable.Rows.Add(resultRow); }
                }
            }
            else if (table1.Rows.Count < table2.Rows.Count)
            {
                resultTable = table2.Clone();
                DataRow resultRow = resultTable.NewRow();
                if (tblName == "INV_SOURCES")
                {
                    string sourceId = "27" + string.Format("{0:00000000}", getPreferredID(facId));
                    table = _DB.ReadDataTable(string.Format("SELECT SOURCE_NAME FROM RAPIDS.INV_SOURCES WHERE INVENTORY_RID = {0} AND SOURCE_ID = {1}", glblVars.invRid, sourceId));
                }
                else if (tblName == "INV_PROCESS_RELEASE_POINTS")
                {
                    //DataTable differenceOfTwoTables = Difference(table1, table2);
                    table = _DB.ReadDataTable(string.Format("SELECT IPRP.PROCESS_RID FROM RAPIDS.INV_PROCESS_RELEASE_POINTS IPRP WHERE IPRP.SOURCE_RID = {0}", glblVars.RapidsSourceRID));
                }
                for (int row = 0; row < table2.Rows.Count; row++)
                {

                    foreach (DataRow rpIDRow in table.Rows)
                    {
                        tableRCount = 0;
                        if (tblName == "INV_SOURCES")
                        {
                            string table1srcName = rpIDRow["SOURCE_NAME"].ToString();
                            string table2srcName = table2.Rows[row]["SOURCE_NAME"].ToString().Replace("'", "");
                            if (table1srcName == table2srcName)
                            { copy = "N"; break; }
                        }
                        else if (tblName == "INV_PROCESS_RELEASE_POINTS" && rpIDRow["PROCESS_RID"].ToString() == table2.Rows[row]["PROCESS_RID"].ToString())
                        { copy = "N"; break; }

                        else
                        { copy = "Y"; } tableRCount++;
                    }
                    if (copy == "Y")
                    { resultRow = resultTable.NewRow(); resultRow.ItemArray = table2.Rows[row].ItemArray; resultTable.Rows.Add(resultRow); }
                }
            }
            else
                resultTable = table1.Clone();
        }
        catch (Exception ex)
        {
            throw new Exception("Get Difference Table: " + ex.Message);
        }
        return resultTable;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...