Объединить две таблицы данных с определенными условиями - PullRequest
0 голосов
/ 24 апреля 2020

Этот вопрос относится к Создание одной таблицы данных из двух с определенными условиями . Я пытаюсь объединить две таблицы данных с определенными условиями. Однако моя текущая настройка выдает ошибку:

Ошибка CS5001 Программа не содержит метод stati c 'Main', подходящий для точки входа

Моя программа. CS:

using System.Data;
using System.Data.Odbc;

namespace Importer_v._0._1
{
    class Program
    {

        static void Main(string[] args, DataTable t1, DataTable t2, DataTable tResult, DataTable tTemp)
        {

            // Trim in datatbase - SELECT RTRIM(LTRIM(ColumnName)) AS TrimmedColumn FROM TableName

            string connectionStringSE = "Driver={Pervasive ODBC Client Interface};ServerName=123;dbq=@123;Uid=123;Pwd=123;";

            string queryStringSE = "select NRO,NAME,NAMEA,NAMEB,ADDRESS,POSTA,POSTN,POSTADR,COMPANY,COUNTRY,ID,ACTIVE from COMPANY";

            string connectionStringFI = "Driver={Pervasive ODBC Client Interface};ServerName=123;dbq=@123;Uid=123;Pwd=123;";

            string queryStringFI = "select NRO,NAME,NAMEA,NAMEB,ADDRESS,POSTA,POSTN,POSTADR,COMPANY,COUNTRY,ID,ACTIVE from COMPANY";

            DataTable dataTable = new DataTable("COMPANY");

            using (OdbcConnection dbConnectionSE = new OdbcConnection(connectionStringSE))
            {
                dbConnectionSE.Open();
                OdbcDataAdapter dadapterSE = new OdbcDataAdapter();
                dadapterSE.SelectCommand = new OdbcCommand(queryStringSE, dbConnectionSE);

                dadapterSE.Fill(dataTable);

            }
            using (OdbcConnection dbConnectionFI = new OdbcConnection(connectionStringFI))
            {
                dbConnectionFI.Open();
                OdbcDataAdapter dadapterFI = new OdbcDataAdapter();
                dadapterFI.SelectCommand = new OdbcCommand(queryStringFI, dbConnectionFI);

                var newTable = new DataTable("COMPANY");
                dadapterFI.Fill(newTable);

                Merger.merge_it(t1, t2, tResult, tTemp);
            }

            dataTable.TableName = "MyTable";

            dataTable.WriteXmlSchema("dtSchemaOrStructure.xml");

            dataTable.WriteXml("dtData.xml");


        }
    }
}

Merger.cs:

using System;
using System.Data;

namespace Importer_v._0._1
{
    class Merger
    {

        internal static void merge_it(DataTable t1, DataTable t2, DataTable tResult, DataTable tTemp)
        {
            tResult.Merge(t1);
            tResult.Columns.Add("NRO1", typeof(int));

            tTemp.Merge(t2);
            tTemp.Columns.Add("NRO1", typeof(int));

            foreach (DataRow row in tTemp.Rows)
            {
                string name1 = row.Field<string>("NAME");
                string name2 = row.Field<string>("NAMEA");
                DataRow[] matches = tResult.Select($"NAME = '{name1}' AND NAMEA = '{name2}'");
                if (matches.Length > 0)
                {
                    matches[0].SetField<int>("NRO1", row.Field<int>("NRO"));
                }
                else
                {
                    tResult.ImportRow(row);
                }
            }

            foreach (DataRow row in tResult.Rows)
            {
                if (row["NRO1"] == DBNull.Value)
                {
                    row["NRO1"] = 0;
                }
            }
        }
    }
}

РЕДАКТИРОВАТЬ:

С static void Main(string[] args) Я получаю:

enter image description here


EDIT2:

Отредактировано в соответствии с рекомендациями программиста Кайдзен. Теперь он дает:

enter image description here

1 Ответ

1 голос
/ 24 апреля 2020

Вы должны использовать одну из действительных подписей :

public static void Main() { }
public static int Main() { }
public static void Main(string[] args) { }
public static int Main(string[] args) { }
public static async Task Main() { }
public static async Task<int> Main() { }
public static async Task Main(string[] args) { }
public static async Task<int> Main(string[] args) { }

Удалить DataTable из основного метода:

using System.Data;
using System.Data.Odbc;

namespace Importer_v._0._1
{
    class Program
    {
        private static DataTable t1;
        private static DataTable t2;
        private static DataTable tResult;
        private static DataTable tTemp
        static void Main(string[] args)
        {

            // Trim in datatbase - SELECT RTRIM(LTRIM(ColumnName)) AS TrimmedColumn FROM TableName

            string connectionStringSE = "Driver={Pervasive ODBC Client Interface};ServerName=123;dbq=@123;Uid=123;Pwd=123;";

            string queryStringSE = "select NRO,NAME,NAMEA,NAMEB,ADDRESS,POSTA,POSTN,POSTADR,COMPANY,COUNTRY,ID,ACTIVE from COMPANY";

            string connectionStringFI = "Driver={Pervasive ODBC Client Interface};ServerName=123;dbq=@123;Uid=123;Pwd=123;";

            string queryStringFI = "select NRO,NAME,NAMEA,NAMEB,ADDRESS,POSTA,POSTN,POSTADR,COMPANY,COUNTRY,ID,ACTIVE from COMPANY";

            DataTable dataTable = new DataTable("COMPANY");

            using (OdbcConnection dbConnectionSE = new OdbcConnection(connectionStringSE))
            {
                dbConnectionSE.Open();
                OdbcDataAdapter dadapterSE = new OdbcDataAdapter();
                dadapterSE.SelectCommand = new OdbcCommand(queryStringSE, dbConnectionSE);

                dadapterSE.Fill(dataTable);

            }
            using (OdbcConnection dbConnectionFI = new OdbcConnection(connectionStringFI))
            {
                dbConnectionFI.Open();
                OdbcDataAdapter dadapterFI = new OdbcDataAdapter();
                dadapterFI.SelectCommand = new OdbcCommand(queryStringFI, dbConnectionFI);

                var newTable = new DataTable("COMPANY");
                dadapterFI.Fill(newTable);

                Merger.merge_it(t1, t2, tResult, tTemp);
            }

            dataTable.TableName = "MyTable";

            dataTable.WriteXmlSchema("dtSchemaOrStructure.xml");

            dataTable.WriteXml("dtData.xml");


        }
    }
}
...