Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 DataSet Merge проблема...  [new]
EvgenyV
Member

Откуда:
Сообщений: 111
Привет, народ!
Может кто-то встречался с такой проблемой:
Есть DataSet dsOrigin с одной немодифицированной строкой и одной таблицей Table[0].
Создаю новый Dataset dsNew с абсолютно идентичной схемой,
добавляю в него новую строку и вызываю
dsOrigin.Merge(dsNew).
После вызова в dsOrigin появляется 2 таблицы.
Где проблема?
Или я что-то делаю не правильно?

Заранее спасибо
Евгений
10 дек 03, 19:56    [455913]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
hDrummer
Member

Откуда: Турция
Сообщений: 18227
dsOrigin.Merge(dsNew)

здесь вы опустили два параметра,
preserveChanges - по умолчанию false

Если он установлен в true, входящие значения при обновлении не будут перезаписывать существующие значения в текущей(current) версии строки. Если false, то будут.

MissingSchemaAction -

Параметр используется для указания как Merge будет обрабатывать элементы схемы в поступающих данных, которые не являются частью существующего DataSet.

Add Add the new schema information to the DataSet and populate the new columns with the incoming values. This is the default.
Насколько я понимаю, это и есть причина добавления новой таблицы в DataSet.

AddWithKey Add the new schema and primary key information to the DataSet and populate the new columns with the incoming values.

Error Throw an exception if mismatched schema information is encountered.
Ignore Ignore the new schema information

Ignore Ignore the new schema information.
11 дек 03, 09:30    [456303]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
EvgenyV
Member

Откуда:
Сообщений: 111
Спасибо большое!
11 дек 03, 17:06    [457491]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
hmsa
Guest
подскажите - можно ли с помощью dataset.merge всегда добавлять записи
в другой датасет
у меня пустой датасет ds1, из другой формы заполняю ds2
делаю ds1.merge(ds2, True, MissingSchemaAction.Add)
ds1 заполняется, потом мне нужно опять добавить значения из ds2 - опять делаю merge
и записи в ds1 перетираются новыми из ds2
или как может по другому добавлять новые записи?
17 май 04, 12:40    [681790]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
>ds1 заполняется, потом мне нужно опять добавить значения из ds2 - опять делаю merge
и записи в ds1 перетираются новыми из ds2

Ну практическое применение merge как раз в этом и состоит

Вы лучше расскажите поподробнее в чем задача, желательно со структруой таблиц и кодом.
17 май 04, 14:06    [682180]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
hmsa
Guest
задача проста:
в форме таблица товаров, в эту таблицу выбираю некотрые строки из другой таблицы товаров по нажатию кнопки,
выбранные товары из второй таблицы добавляются в первую,
а сейчас выходит, что ранее выбранные перетираются новыми
17 май 04, 14:35    [682329]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
А структуру таблиц можете привести с указанием первичных ключей
17 май 04, 14:41    [682348]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
И желательно еще конкретный пример, который бы показал что необходимо получить в результате
ds1 - такие данные , ds2 - другие и т.д
17 май 04, 14:49    [682388]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
hmsa
Guest
ds1 изначально пустой, в него выбираю записи из ds2 (заполненный из табл1)
затем в ds1 редактируются значения в строках и отправляются в ту же табл1

табл1
id name date ....
1 сок 12.03.2004
2 пиво 12.03.2004
17 май 04, 16:41    [682806]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
>ds1 изначально пустой, в него выбираю записи из ds2 (заполненный из табл1)
затем в ds1 редактируются значения в строках и отправляются в ту же табл1

Ну я не вижу проблему использования Merge в данном случае:

Например, ds1 и ds2 полностью идентичные по своей структуре.

1) сок, пиво, водка в ds2.
ds1 пустой.

2) ds1.Merge(ds2)
В ds1 теперь сок, пиво, водка

3) Меняем водку на лимонад.
В ds1 теперь сок, пиво, лимонад

3) Отправляем изменения в БД
myDataAdapter.Update(ds1)
ds1.AcceptChanges()
18 май 04, 07:58    [683498]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
hmsa
Guest
так мне надо не менять водку на лимонад, а добавлять!
т.е сначало выбрал в ds1 из ds2 сок, пиво, водка
а потом ещё добавил из того же ds2 лимонад
и стал список сок, пиво, водка, лимонад
а сейчас при втором выборе в ds2 лимонада он один и будет в ds1 при ds1.merge(ds2)
18 май 04, 09:37    [683642]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
Артем1
Member

Откуда: www.desnogorsk.{ru||net} -> Москва
Сообщений: 2036
Можно попробовать ImportRow или LoadDataRow.
18 май 04, 10:14    [683743]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
Привидите код:
Как создаете, заполняете ds2, ds1? Интересует любой код где фигурируют эти объекты.

Если у вас в ds2 изначально сок, пиво, лимонад, водка то при merge в пустой ds1 и попадут сразу все 4 наименования. Я пока не понял механизм каким образом сначала туда попадает сок, пиво, водка. А затем только лимонад? То есть здесь поподробнее.
Если же у вас в ds2 изначально только сок, пиво, водка. То интересует каким образом потом появляется там лимонад?

Затем непонятно если в базе данных в таблице 1 содержатся все наименования, то куда должны сохраняться выбранные наименования или они никуда не сохраняются?

Что используется в качестве БД? Поле "Ид" в таблице 1 это первичный ключ?

Пока вопросов больше чем ответов, так как вы не приводите интересующий код, а гадать я не умею.
18 май 04, 11:41    [684046]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
hmsa
Guest
ну код ты уже видел массив datarow для dataset.merge

>>Я пока не понял механизм каким образом сначала туда попадает сок, пиво, водка. А затем только лимонад? То есть здесь поподробнее.

выбираю строки в гриде и передаю их вдругой грид (видно из ссылки выше)
потом решаю ещё добавить туда лимонад!

Затем непонятно если в базе данных в таблице 1 содержатся все наименования, то куда должны сохраняться выбранные наименования или они никуда не сохраняются?

просто меняются некоторые поля, например - дата, количество, ... и эти записи обновляются в той же самой таблице откуда выбраны!

бд - sql server, id - ключ
18 май 04, 11:52    [684095]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
Ну ситуация проясняется.
Dim myForm As Form
Dim myParent As FormGL = CType(Me.MdiParent, FormGL)
For Each myForm In myParent.MdiChildren()
If myForm.Name = "FormNewSd" Then
CType(myForm, FormNewSd).dsNewSD = dsSD.Clone()    // Убрать эту строчку
CType(myForm, FormNewSd).dsNewSD.Merge(dataRows)
CType(myForm, FormNewSd).UltraGrid1.DataSource = CType(myForm, FormNewSd).dsNewSD
End If
Next

Теперь понятны ваши проблемы. У вас все время создается новый пустой датасет идентичныей по структуре исходному:
CType(myForm, FormNewSd).dsNewSD = dsSD.Clone() 
То есть эту строку надо убрать из этой процедуры, и работать всегда с одним датасет не создавая каждый раз новый.
18 май 04, 12:09    [684169]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
hmsa
Guest
CType(myForm, FormNewSd).dsNewSD.Merge(dataRows)
в dsNewSD у меня много таблиц,
и когда я делаю dsNewSD.Merge(dataRows)
а потом Me.ugVeks.DataSource = Me.dsNewSD
то ultragrid заполняется совершенно другим набором данных, из другой datatable dsNewSD
как можно при dsNewSD.Merge указать таблицу?
или как решить проблему?
18 май 04, 14:26    [684777]     Ответить | Цитировать Сообщить модератору
 Re: DataSet Merge проблема...  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
А если указать что имено показывать ultragridу:
Me.ugVeks.DataSource = Me.dsNewSD
Me.ugVeks.DataMember = "myTable"  
Если конечно свойство DataMember у UltraGrid имеется. Если его нет то 100 % это можно сделать подругому.

И конечно рекомендую убранную строчку с Clone, вставить например в Load формы. Основная идея чтобы все таки клонировать структуру с DataSet - источника, но при этом делать это один раз, а не каждый раз когда выделенные записи из UltraGrid добавляются к dsNewSd.
18 май 04, 14:40    [684828]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить