powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обмен данными между разными системами.
22 сообщений из 22, страница 1 из 1
Обмен данными между разными системами.
    #38415156
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как организовать обмен данными между таблицами.
Поэтапно пожалуйста (может примеры или ссылки на литературу), задача поставлена а как реализовать не представляю пока ....
Есть базы данных
Бд№1
Бд№2.
Структура этих баз мне известна (первая реализована на SQL Server, второя в любой другой (1с и что-то еще).

Необходимо организовать обмен данными (предположительно через xml документ).

Правило по которому я буду сравнивать записи в БД1 и БД2 составлены, к примеру
из Бд№1 таблица Clients поле id в БД№2 таблицу Сustomers поле Сode.
из Бд№1 таблица Clients поле Name в БД№2 таблицу Сustomers поле Name.

Поля по которым сравнивать записи тоже изветно
Бд№1.Clients.id = БД№2.Customers.Code


Интерфейс реализовать средствами Vusial Studio.
А там через Windows Form или как????
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38415179
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,

а что не ясно? Берешь селект из первой БД1, ищешь в БД2, если записи нет/отличается - делашь insert/update. Потом наоборот. Это если я правильно понял твой сумбур.
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38415225
Syrex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно создать таблицу для объединения.
Слить в нее записи из двух БД.
Ищем недостающие записи для каждой БД и соответственно либо Insert, либо Update
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38415449
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,

... если в целевой таблице есть поле типа autoincrement, то можно просто заливать пачкой (за период, например), а потом удалять продублированные записи - в некоторых случаях это быстрее ...
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38415524
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotikTanya_0306,

... если в целевой таблице есть поле типа autoincrement, то можно просто заливать пачкой (за период, например), а потом удалять продублированные записи - в некоторых случаях это быстрее ...Зато как "сексуально" определять наличие дублей (и хорошо, если полных дублей) на паре-тройке десятков миллионов записей...
Не менее интересно, как тут поможет "автоинкремент в целевой таблице"...
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38415560
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvcarrotikTanya_0306,

... если в целевой таблице есть поле типа autoincrement, то можно просто заливать пачкой (за период, например), а потом удалять продублированные записи - в некоторых случаях это быстрее ...Зато как "сексуально" определять наличие дублей (и хорошо, если полных дублей) на паре-тройке десятков миллионов записей...
Не менее интересно, как тут поможет "автоинкремент в целевой таблице"...

... почему бы сразу не на миллиарде, чего мелочиться? ... я же сказал - в некоторых случаях .... а автоинкремент помогает выделить последнюю запись из дублей, напр:

Код: sql
1.
2.
delete T1 from BankLedger T1, BankLedger T2 where T1.Invoice = T2.Invoice
and T1.TransID > T2.TransID



...где Invoice - составное поле, а TransID - автоинкремент ...
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38415685
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotiksphinx_mvпропущено...
Зато как "сексуально" определять наличие дублей (и хорошо, если полных дублей) на паре-тройке десятков миллионов записей...
Не менее интересно, как тут поможет "автоинкремент в целевой таблице"...... почему бы сразу не на миллиарде, чего мелочиться? ...Намекаете, что для Вас суточный объем данных в 10-15 миллионов "сырых" записей - исключительное количество?
carrotik я же сказал - в некоторых случаях ....
Для "не-некоторых случаев" правильно использовать MERGE - будет точно быстрее. Независимо от наличия "автоинкремента".
carrotik а автоинкремент помогает выделить последнюю запись из дублей, напр:
Код: sql
1.
2.
delete T1 from BankLedger T1, BankLedger T2 where T1.Invoice = T2.Invoice
and T1.TransID > T2.TransID

...где Invoice - составное поле, а TransID - автоинкремент ...С учетом того, что с момента времени TransID1 до TransID2 данные в исходной таблице могли измениться (в том числе и значение поля Invoice) - это весьма "оригинальное" соображение.

Ну, а составное поле - фтопку: прямое нарушение первой нормальной формы...
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38415688
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot sphinx_mvНамекаете, что для Вас суточный объем данных в 10-15 миллионов "сырых" записей - исключительное количество?

Ну, а составное поле - фтопку: прямое нарушение первой нормальной формы...[/quot]

...да, намекаю ... не все торгуют ценными бумагами ... и я вовсе не пытаюсь привести готовый рецепт, а просто один из вариантов к рассмотрению ...
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38416777
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
carrotik,

А можно для НОВИЧКА по шагово.
Мне дадут ФАЙЛ.xml с данными БД1 выгруженный в xml. Я пока не умею работать с этими файлами. Надо прочитать данные из файла.
Вопрос куда и как их выгрузить чтоб потом простым селектом искать и сравнивать данные??

Далее эти данные надо переписать в другую базу данных с известной структурой (создать xml файл).

Может у кого пример есть ?
Пока самую простую задачу реализовать если из БД1 таблицу Clients (id, name, Adress)
переписать в БД2 Customers (Kod,Name,Remark), поле соответсвие id=Kod.
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38416823
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306carrotik,

А можно для НОВИЧКА по шагово.
Мне дадут ФАЙЛ.xml с данными БД1 выгруженный в xml. Я пока не умею работать с этими файлами. Надо прочитать данные из файла.
Вопрос куда и как их выгрузить чтоб потом простым селектом искать и сравнивать данные??

Далее эти данные надо переписать в другую базу данных с известной структурой (создать xml файл).

Может у кого пример есть ?
Пока самую простую задачу реализовать если из БД1 таблицу Clients (id, name, Adress)
переписать в БД2 Customers (Kod,Name,Remark), поле соответсвие id=Kod.

-создай специальную таблицу для новых данных с той же структурой Clients (id, name, Adress)
-заполни данными и xml
-загружай данные INSERT\UPDATE
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38416842
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... по-моему, у ТС вообще задача без привязки к БД, т.е. XML на входе и XML на выходе - в какую-нибудь 1С-ку (если не ошибаюсь?) .... Тогда, может, что-нибудь из Comparing two XML?
http://stackoverflow.com/questions/8096173/how-to-compare-xml-files-in-c

...или в DataTable ... хотя, это головоломка будет еще круче .. :)
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38416895
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
carrotik,

точно, xml на входе и xml на выходе.
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38416901
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306carrotik,

точно, xml на входе и xml на выходе.


..а сравнивать с чем? ... как вы будете сравнивать с целевой базой (и что это все же, SQL, FireBird, 1c) ? ... кто-то выгрузит вам xml для сравнения? ... или есть возможность сделать к целевой базе SELECT? ...
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38417112
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306carrotik,

точно, xml на входе и xml на выходе.

xml -> deserialize -> object -> update ->serialize -> xml
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38417854
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

начала вот так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

namespace xml4_conn_bd
{
    public partial class Form1 : Form
    {
        public static string comSTR = "Data Source......";
        string CommandText = @"select  id,client,identifier,adress,remark from Clients";
        string ConnetionString = @comSTR;
           
        public Form1()
        {
            InitializeComponent();
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = ConnetionString;
            
            SqlDataAdapter dataAdapter_Clients = new SqlDataAdapter(CommandText,conn);
            DataSet ds_Clients = new DataSet();
            dataAdapter_Clients.Fill(ds_Clients);
            ds_Clients.WriteXml(@"E:\Clients.xml");
          

            CommandText = @"select  id,company,identifier,adress from Companies";
            SqlDataAdapter dataAdapter_Companies = new SqlDataAdapter(CommandText, conn);
            DataSet ds_Companies = new DataSet();
            dataAdapter_Companies.Fill(ds_Companies);
            ds_Companies.WriteXml(@"E:\Companies.xml");
            conn.Dispose();
        }

       
    }
}



Из базы переписала в xml документ. Теперь как его прочитать и сохранить данные в таблицы на SQL server.
Не сочтите за трудность ..... подскажи код ..... Примеры те что гугл выдает не удается прикрутить к программе, ведать не совсем еще механизм понимаю.
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38417982
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306carrotik,

точно, xml на входе и xml на выходе.

Если два XML и известен маппинг одних полей на другие, то тут XSLT приходит на ум.
Далее, вместо XSLT можно применить T4. Плюс: не нужно заморачиваться со страшно выглядящим XSLT
Еще вариант: десериализовать XML и работать уже с объектами, а потом новые объекты десериализовать обратно
Еще вариант: загрузить XML в память и работать уже с самим документом
Самый быстрый способ (но не самый простой):XmlReader + XmlWriter. То есть преобразовывать документ по мере чтения, не дожидаясь полной загрузки в оперативку (прекрасно для большеразмерных XML)

Самый правильный (ИМХО): у вас же есть MS SQL Server. Для каждого получателя там можно достаточно быстро сделать SSIS пакет. Функционала SSIS за глаза + оттестированность промышленного решения
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38417983
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306Из базы переписала в xml документ
не смотрели SELECT FOR XML ?
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38418010
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

Спасибо за ссылку, смотрю.
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38418032
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306Из базы переписала в xml документ. Теперь как его прочитать и сохранить данные в таблицы на SQL server.
.

вы, все-таки, определите задачу более четко ... если это из XML в XML, то это одни инструменты ... но я вижу что вы сами создаете XML и сами же потом из одного приложения его грузите в (другой?) SQL-сервер (другую базу на том же сервере?) ... просто, если это так, то можно обойтись без XML , например, открыть подключение к первому серверу, загрузить данные в DataTable, закрыть подключение, открыть второе, а потом циклом for each DataRow делать UPDATE БД2 сразу в БД второго сервера, проверяя идентификационное поле на WHERE table1.id NOT IN (SELECT table2.id FROM БД2) .... примерно так, но вам надо бы прояснить вашу схему
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38418054
Newbie001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tanya_0306Подскажите как организовать обмен данными между таблицами.
Поэтапно пожалуйста (может примеры или ссылки на литературу), задача поставлена а как реализовать не представляю пока ....
Есть базы данных
Бд№1
Бд№2.
Структура этих баз мне известна (первая реализована на SQL Server, второя в любой другой (1с и что-то еще).

Необходимо организовать обмен данными (предположительно через xml документ).

Правило по которому я буду сравнивать записи в БД1 и БД2 составлены, к примеру
из Бд№1 таблица Clients поле id в БД№2 таблицу Сustomers поле Сode.
из Бд№1 таблица Clients поле Name в БД№2 таблицу Сustomers поле Name.

Поля по которым сравнивать записи тоже изветно
Бд№1.Clients.id = БД№2.Customers.Code


Интерфейс реализовать средствами Vusial Studio.
А там через Windows Form или как????
В вашем обмене предполагается участие пользователя? Ну т.е. он должен будет в процессе обмена выполнять какие-то действия вручную? Если нет, то никакое клиентское приложение(ни на WinForms, ни на чем-либо другом) вам не нужно.

Далее, обмен односторонний(из какой системы в какую?) или двусторонний? Будет ли обмен выполняться автоматически, по заданному расписанию, или он будет инициироваться какой-либо из систем?

От ответов на эти вопросы зависит выбор средств для реализации.

carrotikпримерно так, но вам надо бы прояснить вашу схему
Присоединяюсь к коллеге)
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38418102
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Newbie001,

Данные от пользователя я получу в виде xml файла. (Пока делаю его сама).
Предполагается что пользователь может указать соответствие таблиц и полей, зайти в приложении и указать соответствие между базами данных.
Вот примерно такую схему БД думаю реализовать. (файл прикрепила)
Мне полученные данные в виде xml надо переписать в структуру БД№2. И отдать этот файл xml, пусть выгружают.
Вроде вот так.
Обмен будет производится 1 раз в сутки.

Все дают хорошие советы ... Но с реализацией сложновато ..... Для меня ново и С# и XML.
...
Рейтинг: 0 / 0
Обмен данными между разными системами.
    #38418169
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306Предполагается что пользователь может указать соответствие таблиц и полей, зайти в приложении и указать соответствие между базами данных.

Зачем пользователю КАЖДЫЙ раз указывать соответствие? У вас, что, каждый раз новая система? Разработчик, то есть вы, ОДИН раз для каждой используемой системы задает соответствие

Собственно, и выбор у вас тогда появляется. А доверять пользователю ввод таких данных - нельзя. 100% будет путать названия, регистры, алфавиты. Нужно избегать таких ситуаций, когда пользователю дается столь широкий выбор.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обмен данными между разными системами.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]