powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сравнить два DataSet'a ?
25 сообщений из 41, страница 1 из 2
Как сравнить два DataSet'a ?
    #32443109
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... с тем, чтобы их синхронизировать. то есть записи отсутствующие в одноименной таблице первого датасета взять из второго и затем наоборот появившиеся новые записи в первом записать во второй.

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32443142
Kilroy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой метод Merge
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32443212
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Как говорится - будем посмотреть :).

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32444087
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не получается сохранить результат в БД...
Код: plaintext
1.
2.
3.
dataSet1.Merge(dataSet2);
dataSet1.AcceptChanges();
oleDbDataAdapter1.Update(dataSet1);

после этого открываю ацессом БД а там всё старое, хотя в гриде на моей форме отображается правильный т.е. обновлённый датасет dataSet1.

Туплю? Очччень вероятно :), но где?

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32444649
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще сделай DataWizard да и посмотри какой он все разруливает.

Я лично отрабатываю DataSet в такой последовательности:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
//Измененные DataRowState.Modified
DataSet changedDataSet = m_dataset.GetChanges(DataRowState.Deleted);
// изменяем в БД 

//Удаленные (Соответсвенное )
DataSet changedDataSet = m_dataset.GetChanges(DataRowState.Modified);
// удаляем в БД

//Добавленнные
DataSet changedDataSet = m_dataset.GetChanges(DataRowState.Modified);
// вставляем changedDataSet  записи в БД 
Me.m_dataset.Merge(changedDataSet)
Me.m_dataset.AcceptChanges()
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32444652
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу ты на me не смотри в C# это this писал по памяти и наполовину написал на VB.NET половину на C# :-)
но думаю идея понятна
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445103
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я что-то с трудом понимаю на счёт этих .GetChanges().
На мой взгляд мне это ничего не даёт.
У меня несколько БД с одинаковой структурой, одна на сервере и несколько на клиентах, которые надо синхронизировать, т.е. новые записи появившиеся на сервере должны быть переданы клиенту и наоборот. То есть имеем два датасета, которые и надо сравнивать.

Вообще сделай DataWizard да и посмотри какой он все разруливает

Делал, он делает также как и я т.е. oleDbDataAdapter1.Update(dataSet1);
Но у меня данные в БД не меняются а у него да.

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445186
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
dataSet1.Merge(dataSet2);
dataSet1.AcceptChanges();
oleDbDataAdapter1.Update(dataSet1);


А если так:

Код: plaintext
1.
2.
3.
dataSet1.Merge(dataSet2);
oleDbDataAdapter1.Update(dataSet1);
dataSet1.AcceptChanges();
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445204
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я тоже пробовал - не работает.

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445252
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь а что возвращает метод DataSet HasChanges()
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445311
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что мне это даст? У меня 2 датасета от двух РАЗНЫХ БД с одинаковой структурой. Да и дело не в том - результирующий-то датасет правильный, всё работает, только вот в БД не записывается.

oleDbDataAdapter1.Update(dataSet1);

Вот это вот ДОЛЖНО работать, но почему-то в БД никаких изменений.


Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445397
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну HasChanges вернет вообще если какие либо изменения в DataSet или нет. М ожно также getChanges прогнать чтобы узнать что то вообще меняется или нет.

Ну причин может и до и больше.
Начать можно и с адаптера.

Сам его писал или визардом сделал? что вызывается storedProcedure или sql- запрос. Какой sql- запрос. или динамически update генеришь, какой? Выдается ли какая ошибка?

Побольше от тебя информация и поболе будет понятно в чем проблема.

P.S. И еще AcceptChanges всегда помещается уже после Update этот метод принимает изменения совершенные базой данных.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445466
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите это\r
\r
/topic/61041
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445515
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот набросал тестовое приложение. На форме лежат два датагрида, 4-е кнопки
+
oleDbDataAdapter1
oleDbConnection1
dataSet11
+
oleDbDataAdapter2
oleDbConnection2
dataSet21

первый грид связан с датасет11, второй с датасет21
кнопки 1 и 3 : заполняют датасеты данными из БД (успешно)

кнопка 2: добавлена в тестовых целях, если я вручную в гриде что-либо изменю и нажму на эту кнопку, то изменения заносятся в БД (снова успешно)
заметьте без всяких dataSet11.AcceptChanges();

кнопка 4: здесь находятся все проблемы

Код: plaintext
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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace DateUpdate
{
	public class Form1 : System.Windows.Forms.Form
	{
.
.
.
bla-bla-bla
.
.
.

		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void button1_Click(object sender, System.EventArgs e)
		{
			oleDbDataAdapter1.Fill(dataSet11);
			dataSet11.AcceptChanges();

		}

		private void button2_Click(object sender, System.EventArgs e)
		{
			oleDbDataAdapter1.Update(dataSet11);
		}

		private void button3_Click(object sender, System.EventArgs e)
		{
		oleDbDataAdapter2.Fill(dataSet21);
		
		}

		private void button4_Click(object sender, System.EventArgs e)
		{
			dataSet11.Merge(dataSet21);
                                      // после этого в гриде связанном с dataSet11
                                      // я вижу результат, который мне нужен, но
                                     // следующая команда не работает

			oleDbDataAdapter1.Update(dataSet11);
			dataSet11.AcceptChanges();
			
			if (dataSet11.HasChanges()==true) 
			{
				label1.Text= "true" ;
			}
			else
			{
				label1.Text= "false" ;
			}
			// показывает false
		}
	}
}



Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445573
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
oleDbDataAdapter1.Update(dataSet11);
dataSet11.AcceptChanges();

if (dataSet11.HasChanges()==true) 
{
label1.Text= "true" ;
}
else
{
label1.Text= "false" ;
}
// показывает false



Мне интересно посмотреть HasChanges не после того как ты данные уже закоммитил AcceptChanges() ом а до него до Update вообще.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
if (dataSet11.HasChanges()==true) 
{
label1.Text= "true" ;
}
else
{
label1.Text= "false" ;
}
// что показывает?



oleDbDataAdapter1.Update(dataSet11);
dataSet11.AcceptChanges();




Это снимет лишнии дерганья.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445602
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже false

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445674
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hDrummer прав, тебе надо туда по его ссылке.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32445764
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот так выдаёт true, но попрежнему не работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
dataSet11.Merge(dataSet21,true);
if (dataSet11.HasChanges()==true) 
{
     label1.Text= "true" ;
}
else
{
    label1.Text= "false" ;
}
dataSet11.AcceptChanges();
oleDbDataAdapter1.Update(dataSet11);



А вот так выдаёт true и ошибку,говорит что команда упдате
подействовала на 0 записей

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
dataSet11.Merge(dataSet21,true);
if (dataSet11.HasChanges()==true) 
{
     label1.Text= "true" ;
}
else
{
    label1.Text= "false" ;
}
//dataSet11.AcceptChanges();
oleDbDataAdapter1.Update(dataSet11);


По ссылке ходил, читал - не утешительно. Возникает вопрос: А на кой
тогда нужен ds1.Merge(ds2) ?!

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32446098
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
dataSet11.Merge(dataSet21,true);
if (dataSet11.HasChanges()==true) 
{
     label1.Text= "true" ;
}
else
{
    label1.Text= "false" ;
}
dataSet11.AcceptChanges();
oleDbDataAdapter1.Update(dataSet11);


Да на какой ляд ды данные в DataSet commitишь до Update?

Делай так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
dataSet11.Merge(dataSet21,true);
if (dataSet11.HasChanges()==true) 
{
     label1.Text= "true" ;
}
else
{
    label1.Text= "false" ;
}
oleDbDataAdapter1.Update(dataSet11);
dataSet11.AcceptChanges();
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32446121
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы невнимательно читали мой пост.
Во втором примере я как раз так и делаю и получаю ошибку, если dataSet1.AcceptChanges(); не стоит перед упдате
а здесь dataSet11.Merge(dataSet21,true); выставлено труе
.

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32446141
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я прочитал, но также и очевидно что AcceptChanges() не ставиться перед Update поэтому можно перестать рассматривать другие варианты. Какая ошибка ? Дострочно можете ее привести здесь.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32446159
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, могу дострочно:

System.Data.DBConcurrencyException: Parallelitätsverletzung : Der UpdateCommand hat sich auf 0 Datensätze ausgewirkt.

Что можно перевести на русский так:

System.Data.DBConcurrencyException: Повреждение параллелности : UpdateCommand подействовал на 0 записей

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32446189
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да кажется по поводу построчно я погорячился :-)
ни шпрехен я.

Попробуй еще до update поставить следующее
this.BindingContext[dataSet1].EndCurrentEdit();

А вообще надо еще попробовать через GetChanges как делаю я . Это и правильно потому что для Update свой dataset, для Insert получается свой.
А самое главное что updatу отдается на съедение не весь DataSet а только изменившиеся его часть.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32448599
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По вашему, это должно выглядеть так:

Код: plaintext
1.
2.
3.
DataSet changedDataSet =dataSet11.GetChanges(DataRowState.Modified);
dataSet11.Merge(changedDataSet);
dataSet11.AcceptChanges();


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

Я сделал всё что мог, кто может пусть сделает лучше.
...
Рейтинг: 0 / 0
Как сравнить два DataSet'a ?
    #32448682
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай уточним постановку:
Есть две БД: БД1 и БД2. Соответственно к ним два DataSet: ds1, ds2.
БД1 и БД2 - одинаковы по структуре.

Цель: Слить данные из БД2 в БД1.

Вопросы:
1) правильно я понял твою задачу?
2) какое количество таблиц в ds1 и ds2?
3) могут ли записи в ds1 и ds2 совпадать?
4) что надо делать если записи из ds1 и ds2 совпадают по идентификатору но не по содержанию. Оставить в ds1 как есть, переписать их из ds2. Либо спросить юзера что делать?
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сравнить два DataSet'a ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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