Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
 DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Уважаемый форум,

Вполне возможно, что вопрос идиотский, но увы.
Итак, есть два источника данных - две базы данных (SQL - сетевая база и SQL Compact - локальная база на клиентском компе).
В приложении необходимо организовать обмен данными между ними по нажатию кнопки. Локальная база привязана к приложению, а сетевая подключается при наличии интернета. Вопрос: можно ли использовать один датасет для обмена данными между базами? Если да, то почему после выполнения кода (заполнение таблиц в датасете из сетевой базы), эти таблицы не показываются в экплорере VS?

        Dim Q_cmd As New SqlCommand, Q_connection As New SqlConnection("Data Source=ServerSQL;Initial Catalog=QA;Integrated Security=True")
        Dim Q_data_1 As New SqlDataAdapter("EXEC API_GetReportDataRowset '502','<params></params>'", Q_connection)
        Dim Q_data_2 As New SqlDataAdapter("EXEC API_GetReportDataRowset '503','<params></params>'", Q_connection)
        Dim Q_data_3 As New SqlDataAdapter("EXEC API_GetReportDataRowset '504','<params></params>'", Q_connection)
        Dim Q_data_4 As New SqlDataAdapter("EXEC API_ART_GetReportDataRowset 'RD_509','<params></params>'", Q_connection)
        Dim Q_dataset As New DataSet(), Q_1 As DataTable, Q_2 As DataTable, Q_3 As DataTable, Q_4 As DataTable

        Q_cmd.Connection = Q_connection
        Q_cmd.Connection.Open()
        Q_dataset.DataSetName = "test"

        Q_data_1.Fill(Q_dataset, "Q_1")
        Q_data_2.Fill(Q_dataset, "Q_2")
        Q_data_3.Fill(Q_dataset, "Q_3")
        Q_data_4.Fill(Q_dataset, "Q_4")

        Q_1 = Q_dataset.Tables("Q_1")
        Q_2 = Q_dataset.Tables("Q_2")
        Q_3 = Q_dataset.Tables("Q_3")
        Q_4 = Q_dataset.Tables("Q_4")

Ошибки не выдает, надо понимать так, что все правильно, но ни датасета "test", ни таблиц в существующем датасете, если его имя подставить в Q_dataset.DataSetName в эксплорере не видно. Что я делаю не так? (с)

Спасибо!
9 ноя 17, 17:56    [20941004]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30161
В одном, если только по очереди. Но вам же самому удобнее иметь комплект на одну бд и комплект на другую.
9 ноя 17, 18:47    [20941114]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142103
Можно.
Что Вы там с ошибками делаете - не знаю
9 ноя 17, 19:42    [20941242]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142103
Petro123
В одном, если только по очереди. Но вам же самому удобнее иметь комплект на одну бд и комплект на другую.

ДатаСет - это локальная модель. Можно вообще без баз данных использовать
9 ноя 17, 19:43    [20941246]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30161
Cat2
Petro123
В одном, если только по очереди. Но вам же самому удобнее иметь комплект на одну бд и комплект на другую.

ДатаСет - это локальная модель. Можно вообще без баз данных использовать

Наполняется из базы?
Зачем ему третья база из локальной.
9 ноя 17, 19:49    [20941257]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Cat2, интересно, как тогда хранить данные, если датасет существует только в оперативке?
Локальная база используется, если нет соединения с интернетом. Оттуда данные нужно перегнать в сетевую базу.
10 ноя 17, 12:58    [20943288]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Petro123, что по очереди? Не совсем понятно. Если я правильно догадываюсь, один датасет должен содержать таблицы из одного источника и из другого. Вопрос: как это сделать? У меня не получилось, поэтому и спрашиваю.

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

Спасибо!
10 ноя 17, 13:02    [20943305]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142103
IFK
Cat2, интересно, как тогда хранить данные, если датасет существует только в оперативке?
Локальная база используется, если нет соединения с интернетом. Оттуда данные нужно перегнать в сетевую базу.

Ну и перегоните, какие проблемы?
10 ноя 17, 13:09    [20943330]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Cat2, проблем нет, если знать как. :) Я - не знаю, поэтому и спрашиваю.
10 ноя 17, 13:12    [20943341]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142103
IFK
У меня не получилось, поэтому и спрашиваю.

Честно говоря глядя на приведенный Вами код я не уверен, что ЭТО вообще работать будет .

Если таблицы из двух баз заполняются , то должно быть два Connection
10 ноя 17, 13:16    [20943357]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142103
Без проверки, навскидку. И это не образец для подражания, а просто один из вариантов!!!

DataSet ds = new DataSet();
DataTable dt0 = new DataTable();
DataTable dt1 = new DataTable();
ds.TablesAdd(dt0);
ds.TablesAdd(dt1);
SqlConnection con0 = new SqlConnection("...");
SqlConnection con1 = new SqlConnection("...");
SqlCommand sql0 = new SqlCommand ("...", con0);
SqlCommand sql1 = new SqlCommand ("...", con1);

SqlDataAdapter da0 = new SqlDataAdapter();
SqlDataAdapter da1 = new SqlDataAdapter();

da0.SecectCommand = sql0 ;
da1.SecectCommand = sql1 ;

da0.Fill(dt0);
da1.Fill(dt1);
10 ноя 17, 13:24    [20943384]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Cat2, угу, что-то подобное я как раз пробую:
        Dim Q_cmd As New SqlCommand, Q_connection As New SqlConnection("Data Source=server01;Initial Catalog= QA;Integrated Security=True")
        Dim Q_data_Users As New SqlDataAdapter("EXEC API '504','<params></params>'", Q_connection)
        Dim Q_dataset As New DataSet("test"), Q_Users As DataTable

        Q_cmd.Connection = Q_connection
        Q_cmd.Connection.Open()

        Q_data_Users.Fill(Q_dataset, "Q_Users")
        Q_Users = Q_dataset.Tables("Q_Users")

        Dim SqlCeCommand As New SqlServerCe.SqlCeCommand, SQLCe_connection As New SqlServerCe.SqlCeConnection("Data Source=localcomp\localDB.sdf;Persist Security Info=False")
        Dim GS_data As New SqlServerCe.SqlCeDataAdapter("SELECT * FROM GS_data", SQLCe_connection), GS_data_loaded As DataTable

        GS_data.Fill(Q_dataset, "GS_data_loaded")
        GS_data_loaded = Q_dataset.Tables("GS_data_loaded")


Теперь вопрос: как проверить, что это сработало? В эксплорере источников данных я никакого датасета с именем "test" не вижу. Так должно быть?
10 ноя 17, 13:30    [20943413]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
fortibransa
Member

Откуда: СПб
Сообщений: 21016
IFK
Cat2, интересно, как тогда хранить данные, если датасет существует только в оперативке?
Локальная база используется, если нет соединения с интернетом. Оттуда данные нужно перегнать в сетевую базу.
ds.WriteXml("bebe.xml");
ds.ReadXml("bebe.xml");
10 ноя 17, 13:44    [20943511]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
fortibransa, и какая разница, в XML или в локальной базе?
10 ноя 17, 13:57    [20943580]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30161
IFK,
1. Делаете на кнопку выброс в лог из обоих баз информацию (два connection и два датасета к ним как вариант).
2. Пробуете из одной не в лог а во вторую базу.
Всё.
10 ноя 17, 14:00    [20943601]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Petro123, и как вы себе это представляете? Я не совсем понимаю, как это осуществить. :(
10 ноя 17, 14:15    [20943673]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2350
сомнительный способ, хотели как лучше, а получилось как всегда.
это только на 1 взгляд кажется "проще и удобнее", а на деле вы уже сейчас страдаете.
если нужно сделать экспорт\импорт из 1 базы в другую, что мешает просто читать таблицу и делать bulk insert как все нормальные люди?
а если таблица будет не 2 кб, а 4 гб? всё грузить в память, а потом в базу?
10 ноя 17, 14:19    [20943702]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30161
IFK
Petro123, и как вы себе это представляете? Я не совсем понимаю, как это осуществить. :(

Я предлагаю по шагам, без всякой оптимищации.
Не умеем на экран писать табличку?
10 ноя 17, 14:22    [20943728]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Roman Mejtes, угу, но это хорошо если трансфер данных односторонний, например из сетевой базы с локальную. А мне нужно еще и в другую сторону, когда локальные данные в сетевую базу должны ехать. Причем, bulk не получится - потрется все.
10 ноя 17, 14:28    [20943766]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Petro123, вот тут не совсем понятно, что вы имели в виду => "2. Пробуете из одной не в лог а во вторую базу."
10 ноя 17, 14:29    [20943771]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30161
IFK,
Я не знаю, что вы умеете, а что нет.
Через клиента это в цикле переписывать в переменные и потом вставлять в ДатаСет2 или insert
10 ноя 17, 14:37    [20943823]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Petro123, это как раз понятно. Я использую массивы для этого. Непонятно, почему не добавляются таблицы в датасет, когда я их добавляю программно из разных источников. Вернее, эти таблицы не видны в студии в разделе "Источники данных". Если создавать новый датасет программно, используя два соединения и т.д., то его тоже не видно в студии. Я понимаю, что может быть вариант "Ты суслика видишь? Нет. И я нет, а он есть.", но хотелось бы прояснить этот момент.

Второй момент был об оптимизации задачи перекачки данных из одного источника в другой (из локальной базы в сиквел и наоборот). Варианты:
- один общий датасет и переливание между таблицами
- два датасета и переливание между ними. Здесь не все понятно, как именно это сделать. Я бы использовал массивы, но не уверен, что нет пути проще и быстрее.
10 ноя 17, 15:06    [20943947]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30161
IFK,
Не создавай программно.
2. Оптимизация это не через клиент, а как вариант - репликация.
10 ноя 17, 15:18    [20944005]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 893
Petro123, К сожалению, сетевая база не в моем распоряжении и доступ к ней возможен только через непрозрачные ХП - чисто вытащить результирующий набор данных. Заливка обратно тоже через ХП.

Если бы я мог напрямую связать сетевую базы - я бы вообще этот вопрос не поднимал.
10 ноя 17, 15:25    [20944038]     Ответить | Цитировать Сообщить модератору
 Re: DataSet для разных источников данных  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30161
IFK,
Если не дают, зачем извращатся?
Ты же про оптимизацию спросил.
Удачи!
10 ноя 17, 15:50    [20944141]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
Все форумы / WinForms, .Net Framework Ответить