Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Получение последней добавленной строки


Автор: Ruslan_ 4.9.2008, 20:29
Приветствую!

Как получить последнюю добавленную строку (или точнее говоря ее первичный ключь), используя драйвер ODBC. Есть какой-то универсальный метод для любой БД? Я разрабатываю ПО для работы с СУБД Access и Postgres.

Заранее благодарю.

Автор: MasterOfCode 5.9.2008, 06:12
Код


SqlCommand cmdSQL;

//...

cmdSQL.CommandText = "insert into table values('name'); SET @IdParam = CAST(SCOPE_IDENTITY() as INT);";
SqlParameter idParameter = cmdSQL.Parameters.Add("@IdParam", System.Data.SqlDbType.Int)
idParameterJob.Direction = System.Data.ParameterDirection.Output;
cmdSQL.ExecuteNonQuery();
Console.WriteLine(idParameterJob.Value.ToString());

Так.

Автор: Idsa 5.9.2008, 06:13
MasterOfCode, читайте внимательнее. Необходим универсальный способ под ODBC.

Автор: Ruslan_ 5.9.2008, 06:26
Если нет (а я уже искал везде, где только можно), можете сказать, как получить строку (или ключевое поле) последней добавленной строки в Access?

В Postgres все понятно: следующее значение из последовательности использовать как значение ключегого поля при вставке строки.

Автор: MasterOfCode 5.9.2008, 06:42
Простите за невнимательность. Не знаю как в Access, есть ли там Тригерры и Процедуры, если есть, то можно добавить в таблицу поле например DATE_INSERT типа DateTime, написать триггер который при вставке добавлял дату вставки, и Хранимую процедуру (функцию) на вставку, которая бы добавляла запись, а в качестве возвращаемого параметра возвращала ID записи.

Автор: Idsa 5.9.2008, 06:53
Цитата(Ruslan_ @  5.9.2008,  10:26 Найти цитируемый пост)
В Postgres все понятно: следующее значение из последовательности использовать как значение ключегого поля при вставке строки. 

Так можно сделать и в Access: там есть поле типа "Счетчик". Но это неверный подход: между тем, как Вы считаете значение, и сделаете вставку, кто-нибудь может изменить таблицу.

Автор: Ruslan_ 5.9.2008, 10:01
Как у этого поля типа "Счетчик" запросить следующее значение перед вставкой?

Автор: Idsa 5.9.2008, 12:48
Ruslan_, а зачем? Оно само выставляется, когда вставляется запись. А в INSERT это поле не указывается.

Автор: Varenij 5.9.2008, 12:54
Цитата(Idsa @  5.9.2008,  15:48 Найти цитируемый пост)
Ruslan_, а зачем? Оно само выставляется, когда вставляется запись. А в INSERT это поле не указывается.

Не знаю как Вам, но мне очень часто нужно знать ID вставленной строки, чтобы с ней дополнительные манипуляции произвести.

Автор: Idsa 5.9.2008, 13:00
Цитата(Varenij @  5.9.2008,  16:54 Найти цитируемый пост)
Не знаю как Вам, но мне очень часто нужно знать ID вставленной строки, чтобы с ней дополнительные манипуляции произвести. 

Это уже другой вопрос. Вы говорите о том, чтобы узнать ID после вставки, а Ruslan_, судя по всему, хочет узнать ID до вставки.

Автор: Ruslan_ 5.9.2008, 13:21
Idsa, знать значение первичного ключа мне необходимо для того, чтобы с добавленной записью в таблице связать записи из др. таблиц, связанных отношением первичный-внешний ключ. А иначе не получится.

На самом деле не важно: сгенерировать следующее значение для счетчика и вставить строку с этим значением или же вставить строку и узнать ее ид. - не важно. Просто нужно получить любыми способами добавленную строку.

Здесь ведь есть программисты для БД. Скажите, пожалуйста, как вы делаете это для Access (если нет общего механизма для любой БД)? (Просто в Access нет типа последовательность, как в Oracle или Postgres.)

Автор: Ruslan_ 5.9.2008, 14:44
Это просто важно очень.

Как получить последнюю добавленную строку в Access'е?

Автор: Ruslan_ 19.9.2008, 15:11
Если кто-то столкнется с такой же проблемой, опишу мое решение.
В зависимости от того, какая СУБД используется, для Oracle и Postgres я перед добавлением новой записи предварительно получаю ее ид. из последовательности; для Access'а получаю максимальный ид. и использую на 1 больше. Access открываю в монопольном режиме. Использую драйвер ODBC.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)