Как получить значение уникального поля

Форум посвящён работе с базами данных в .NET.

Модератор: Ramzes

Lonely
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.10.2005 (Вт) 14:48
Откуда: Kiev

Как получить значение уникального поля

Сообщение Lonely » 26.10.2005 (Ср) 15:38

Вопрос.
Как получить значение уникального поля.

Ситуация такая.
Уникальное поле являеться счетчиком
Когда запись добовляеться в датасет уникальное поле имеет одно значение (допустим -1)
Делаем Update
В базе эта же запись имеет другое уникальное значение (допустим 1), а датасете осталось старое (-1)

База аксесовская

--------------
Заранее блогадарен

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 26.10.2005 (Ср) 15:50

Как, когда и кем делается Update?

Для того, чтобы синхронизировать данные базы и DataSet необходимо фактически заново заполнить DataSet.

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

Может, задача была некорректно решена с точки зрения ADO.NET?
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Lonely
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.10.2005 (Вт) 14:48
Откуда: Kiev

Сообщение Lonely » 26.10.2005 (Ср) 18:06

Обновление происходить с помощью датаадаптера
Если сравнивать InsertComand
для Sql server

INSERT INTO Orders
(CustomerID,...)
VALUES (@CustomerID,...);
SELECT OrderID,...
FROM Orders
WHERE (OrderID = @@IDENTITY)

И он сразу возвращает добавленую запись

А для аксесса

INSERT INTO TableName
(Pole1,...)
VALUES (?, ...)
Может возможно это решить по другому

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 27.10.2005 (Чт) 13:50

Ага, проблема, вроде, понятна: после того, как выполнен Insert, достать вновь добавленный ID.

Решение нашла такое
На AfterRowUpdated повесить выполнение "SELECT @@IDENTITY"
Это должно работать для Jet4 (Access 2000 и выше)

Пойду проверять...
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Lonely
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.10.2005 (Вт) 14:48
Откуда: Kiev

Сообщение Lonely » 27.10.2005 (Чт) 14:05

Я так понимаю AfterRowUpdated - это событие, но у какого обьекта

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 27.10.2005 (Чт) 14:33

у DataAdapter
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Lonely
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.10.2005 (Вт) 14:48
Откуда: Kiev

Сообщение Lonely » 27.10.2005 (Чт) 15:26

Спасибо за подсказку

Вопрос снимаеться все решено.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 27.10.2005 (Чт) 15:28

ммм... не за что...
А у меня не получилось. Не отдает, хотя коннекция открыта, запись добавляется. Странно :).

Ну да ладно, раз все уже хорошо...
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Lonely
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.10.2005 (Вт) 14:48
Откуда: Kiev

Сообщение Lonely » 27.10.2005 (Чт) 15:36

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

Protected Shared Sub OnRowUpdated(ByVal sender As Object, ByVal e As System.Data.OleDb.OleDbRowUpdatedEventArgs)
Dim lSelectCmd As New OleDb.OleDbCommand("Select @@Identity")
lSelectCmd.Connection = e.Command.Connection
Dim lObj As Object
lObj = lSelectCmd.ExecuteScalar
If Not e.Row.Table.Columns(0).ReadOnly Then
e.Row(0) = Convert.ToInt32(lObj)
End If
End Sub

Еще раз огромное тебе спасибо

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 27.10.2005 (Чт) 15:43

нет, других вариантов нет
делаю то же самое :)

lonely писал(а):Еще раз огромное тебе спасибо

пожалуйста. Welcome, как говорится :)
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)


Вернуться в ADO.NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList