Member 13391127 Ответов: 1

Используйте SQL запрос для вставки данных в OLEDB tblone из SQLDB tbltwo


У меня есть моя программа: "WEBBIT"
У меня есть БД из другой программы (только для чтения): "много"

В WEBBIT у меня есть [patientID] и [LOTSID] в tblpatients.

Я хочу импортировать всех новых пациентов из лотов в ВЕББИТ.

НАПР..
INSERT INTO tblpatients( LOTSID, PATIENTNAME)
SELECT patients.PatientName, patients.LOTSpatientID
FROM LOTS.patients JOIN tblpatients ON patients.LOTSpatientID= tblpatients.LOTSID
WHERE (((tblpatients.LOTSID) Is Null));


В значительной степени это находит всех пациентов, не входящих в Webbit, которые находятся в лотах, и вставляет их в tblpatients в WEBBIT.

Проблема в том, что они находятся в двух разных базах данных, одна из которых является SQL, а другая-ACCDB..

У меня есть следующие Кон струны:

SqlConnection lotscon = new SqlConnection(PackChecker.Properties.Settings.Default["LOTSConnectionString"].ToString()

OleDbConnection con = new OleDbConnection(PackChecker.Properties.Settings.Default["WebbitConnectionString"].ToString()



Любые идеи или направления были бы потрясающими!

Что я уже пробовал:

Я попробовал использовать только соединение Webbit OLEDB с oledbcommand выше, которое работает! Но это работает только на моем компьютере под управлением visual Studio.. даже после компиляции.
Это не работает на другом компьютере, и я понятия не имею, почему??

Я пытался открыть соединение с обоими, когда запускал его... но команда не привязана к обоим, поэтому она терпит неудачу.

Я тоже пробовал ниже... но я не знаю, куда идти отсюда!

DataTable dtLotsInst = new DataTable();
            using (SqlConnection lotscon = new SqlConnection(PackChecker.Properties.Settings.Default["LOTSConnectionString"].ToString()))
            {
                using (SqlDataAdapter instadapt = new SqlDataAdapter(@"SELECT * FROM NEWinstitution;", lotscon))
                {
                    lotscon.Open();

                    instadapt.Fill(dtLotsInst);

                    lotscon.Close();
                }

            }

            DataTable dtWebbitInst = new DataTable();
            using (OleDbConnection con = new OleDbConnection(PackChecker.Properties.Settings.Default["WebbitConnectionString"].ToString()))
            {
                using (OleDbDataAdapter instadaptweb = new OleDbDataAdapter(@"SELECT * FROM tblinstitution;", con))
                {
                    con.Open();

                    instadaptweb.Fill(dtWebbitInst);

                    con.Close();
                }

            }

1 Ответов

Рейтинг:
2

RickZeeland

Я думаю, что на другом компьютере вам не хватает некоторых предварительных условий, таких как dll ACCESS.
К сожалению, невозможно смешивать соединения с разными серверами и использовать только один SQL-оператор.
Вам придется подключиться к обоим серверам отдельно, а затем сделать цикл для обхода записей, чтения записи с одного сервера и вставки записи на другой.

Также видеть: Сравнение данных с использованием LINQ Except, Intersect и Union : www.dotnetmentors.com[^]


Member 13391127

Спасибо, Рик.
Я рассматривал возможность создания набора данных из обоих данных, а затем запуска запроса LINQ с помощью оператора LEFT... Будет ли это тоже вариантом?

RickZeeland

Это кажется отличной идеей, см. Эту статью "сравнение данных с использованием LINQ Except, Intersect и Union". http://dotnetmentors.com/adonet/datatable-comparison-using-linq-except-intersect-union.aspx
Если ваша база данных не слишком велика, то есть, в противном случае она, вероятно, будет медленной, как патока :)

Member 13391127

МММ, кажется, совсем над головой. Я даже не могу получить базовый запрос LINQ для возврата результатов. Начать всё с начала. Так легко в MS Access просто получить данные из баз данных и сравнить их, но это невозможно..