Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> .Net 4 .accdb (MS Access) last insert id (OleDb), Как получить? 
:(
    Опции темы
shandy
Дата 20.12.2010, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.12.2010

Репутация: нет
Всего: нет



Есть проект под VS2010, в нем стандартный источник данных связанный с файлом MS Access (.accdb) делаю обычный инсерт в БД:
Код
 
// Все классы стандартные - сгенерированные самой студией в процессе связывания БД
da = new AppCertWorkspaceReportDataSetTableAdapters.TableAdapterManager();
da.companyTableAdapter = new AppCertWorkspaceReportDataSetTableAdapters.companyTableAdapter();
ds = new AppCertWorkspaceReportDataSet();
da.companyTableAdapter.Fill(ds.company);
da.companyTableAdapter.Insert("Букашка");

Как теперь возвратить primary key вставленной записи?
Пробывал так:
Код
OleDbCommand cmd = new OleDbCommand("SELECT @@IDENTITY",da.companyTableAdapter.Connection);
int id = (int) cmd.ExecuteScalar();

Кричит на закрытый Connection, если его открывать перед этим то id возвращается = 0....
PM MAIL   Вверх
mrbrooks
Дата 20.12.2010, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



было бы логичнее вызывать 
Код

SELECT @@IDENTITY;

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

Добавлено через 2 минуты и 49 секунд
т.е. я про составной запрос.
PM MAIL   Вверх
Экскалупатор
Дата 20.12.2010, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



я читал что аксес(до 2003 включительно) запросы SELECT @@IDENTITY; не поддерживает. в 2007 получается есть?
PM MAIL ICQ   Вверх
mrbrooks
Дата 20.12.2010, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



Цитата(Экскалупатор @  20.12.2010,  11:44 Найти цитируемый пост)
я читал что аксес(до 2003 включительно) запросы SELECT @@IDENTITY; не поддерживает. в 2007 получается есть? 

если верить Дэвиду Сеппа (и полагаю, что он прав) - поддержка SELECT @@IDENTITY начинается с Access 2000. Воспользоваться ею можно соответственно через  Microsoft Jet OLE DB 4.0.
PM MAIL   Вверх
shandy
Дата 20.12.2010, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.12.2010

Репутация: нет
Всего: нет



Цитата(mrbrooks @ 20.12.2010,  10:28)
было бы логичнее вызывать 
Код

SELECT @@IDENTITY;

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

Добавлено @ 10:31
т.е. я про составной запрос.

Так в том то и дело, что метод Insert был автогенерирован студией, и посмотрев на его код там оказалось идет открытие, инсерт, закрытие подключение.... То есть после вызова метода Insert уже бесполезно обращаться к закрытому коннекту... 
Временно вышел с положения - отнаследовал этот класс и переписал метод инсерт, чтобу там вызывалось открытие, инсерт, селект ИД, закрытие, и возвращался ИД...
Но думаю это не очень правильно так как автогенерация работает при каждом внесении изменений в источник данных, как то странно что Microsoft не предусмотрело данный ход....
PM MAIL   Вверх
Экскалупатор
Дата 20.12.2010, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



shandy, редко пользуюсь автогенирацией, но если не мне не изменяет память то в визарде есть место в котором показано какой конкретно запрос будет выполнятся(т.е. что конкретно тебе визард генерит) и там можно открыть редактор запросов и дописать туда все что нужно. а визард в принципе не должен предугадывать ваши запросы, и подстраиваться под них, он генерит самый часто используемый вариант...
PM MAIL ICQ   Вверх
shandy
Дата 21.12.2010, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.12.2010

Репутация: нет
Всего: нет



Цитата(Экскалупатор @ 20.12.2010,  23:50)
shandy, редко пользуюсь автогенирацией, но если не мне не изменяет память то в визарде есть место в котором показано какой конкретно запрос будет выполнятся(т.е. что конкретно тебе визард генерит) и там можно открыть редактор запросов и дописать туда все что нужно. а визард в принципе не должен предугадывать ваши запросы, и подстраиваться под них, он генерит самый часто используемый вариант...

Этот момент я тоже проверял ), не получается добавить SELECT @@IDENTITY - он (визард) пытается его распарсить и выдает ошибку просто не понимает запрос (ругается на @).
PM MAIL   Вверх
jonie
Дата 21.12.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



shandy, зато можно руками в XSD схеме вписать как в XML файле в общем


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
shandy
Дата 21.12.2010, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.12.2010

Репутация: нет
Всего: нет



Цитата(jonie @ 21.12.2010,  10:39)
shandy, зато можно руками в XSD схеме вписать как в XML файле в общем

Точно! Об этом я как-то не подумал ) В XSD вписал и все получилось, не знаю правда насколько это хардкордно, но в следующий раз лучше наверно свой клас модели написать для работы с базой и датасетом, чем использовать то что студия автогенерирует...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.