Загрузка данных из двух баз данных в одну WPF DataGrid - PullRequest
1 голос
/ 18 февраля 2020

Я пытаюсь заполнить данные из двух баз данных в одну WPF DataGrid. Может кто-нибудь посоветовать, что я делаю неправильно в моем текущем коде? Отладчик выделен серым цветом в этом разделе:

            using (OdbcConnection dbConnectionFR = new OdbcConnection(connectionStringFR))
            {
                dbConnectionFR.Open();
                OdbcDataAdapter dadapterFR = new OdbcDataAdapter();
                dadapterFR.SelectCommand = new OdbcCommand(queryStringFR, dbConnectionFR);

                var table = new DataTable("COMPANY");
                dadapterFR.Fill(table);

                return table.DefaultView;

            }

поговорка:

Код серьезности Описание Файл проекта Состояние подавления строки Предупреждение CS0162 Обнаружен недоступный код

Здесь мой полный код:

using System.Data.Odbc;
using System.Windows;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System;

namespace DB_inspector_FilterTest
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        }

        private async void Button_Click_1(object sender, RoutedEventArgs e)
        {

            try
            {
                ProgressBar.IsIndeterminate = true;

                DataGrid1.ItemsSource = await GetDataAsync();

                ProgressBar.IsIndeterminate = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private Task<DataView> GetDataAsync()
        {
            return Task.Run(() =>
            {

                string connectionStringDE = "Driver={Pervasive ODBC Client Interface};ServerName=DE875;dbq=@DEDBFS;Uid=DEUsername;Pwd=DEPassword;";

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

                string connectionStringFR = "Driver={Pervasive ODBC Client Interface};ServerName=FR875;dbq=@FRDBFS;Uid=FRUsername;Pwd=FRPassword;";

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

                // using-statement will cleanly close and dispose unmanaged resources i.e. IDisposable instances
                using (OdbcConnection dbConnectionDE = new OdbcConnection(connectionStringDE))
                {
                    dbConnectionDE.Open();
                    OdbcDataAdapter dadapterDE = new OdbcDataAdapter();
                    dadapterDE.SelectCommand = new OdbcCommand(queryStringDE, dbConnectionDE);

                    var table = new DataTable("COMPANY");
                    dadapterDE.Fill(table);

                    return table.DefaultView;

                }
                using (OdbcConnection dbConnectionFR = new OdbcConnection(connectionStringFR))
                {
                    dbConnectionFR.Open();
                    OdbcDataAdapter dadapterFR = new OdbcDataAdapter();
                    dadapterFR.SelectCommand = new OdbcCommand(queryStringFR, dbConnectionFR);

                    var table = new DataTable("COMPANY");
                    dadapterFR.Fill(table);

                    return table.DefaultView;

                }
            });
        }
}

1 Ответ

1 голос
/ 18 февраля 2020

Например, вы можете объединить два DataTables в одно:

private Task<DataView> GetDataAsync()
{
    return Task.Run(() =>
    {

        string connectionStringDE = "Driver={Pervasive ODBC Client Interface};ServerName=DE875;dbq=@DEDBFS;Uid=DEUsername;Pwd=DEPassword;";
        string queryStringDE = "select NRO,NAME,NAMEA,NAMEB,ADDRESS,POSTA,POSTN,POSTADR,COMPANYN,COUNTRY,ID,ACTIVE from COMPANY";
        string connectionStringFR = "Driver={Pervasive ODBC Client Interface};ServerName=FR875;dbq=@FRDBFS;Uid=FRUsername;Pwd=FRPassword;";
        string queryStringFR = "select NRO,NAME,NAMEA,NAMEB,ADDRESS,POSTA,POSTN,POSTADR,COMPANYN,COUNTRY,ID,ACTIVE from COMPANY";

        DataTable dataTable = new DataTable("COMPANY");
        // using-statement will cleanly close and dispose unmanaged resources i.e. IDisposable instances
        using (OdbcConnection dbConnectionDE = new OdbcConnection(connectionStringDE))
        {
            dbConnectionDE.Open();
            OdbcDataAdapter dadapterDE = new OdbcDataAdapter();
            dadapterDE.SelectCommand = new OdbcCommand(queryStringDE, dbConnectionDE);

            dadapterDE.Fill(dataTable);

        }
        using (OdbcConnection dbConnectionFR = new OdbcConnection(connectionStringFR))
        {
            dbConnectionFR.Open();
            OdbcDataAdapter dadapterFR = new OdbcDataAdapter();
            dadapterFR.SelectCommand = new OdbcCommand(queryStringFR, dbConnectionFR);

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

            dataTable.Merge(newTable);

        }

        return dataTable.DefaultView;
    });
}

На заметку о том, что писать асинхронные оболочки - плохая практика: https://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...