|
Модераторы: gambit |
|
Artorius |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 27.3.2007 Репутация: нет Всего: 1 |
Стоит такая задача, вставить запись в таблицу и получить референс только что вставленной записи.
Пишу на C# (Framework 2.0) под Oracle. Подозреваю, что применяемый мною метод не самый элегантный. Может кто нибудь знает более короткий и эфективный?
|
|||
|
||||
Papirus |
|
|||
Опытный Профиль Группа: Участник Сообщений: 298 Регистрация: 19.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Может аналогия поможет, т.к. про Оракл сказать ничего не могу. В SQL server можно делать так:
Вот это выражение "; Select scope_identity()" после точки с запятой и возвращает последний сгенерированный БД id (значение счетчика) после вставки данных. |
|||
|
||||
Artorius |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 27.3.2007 Репутация: нет Всего: 1 |
Не получилось так - не понравилась ему ";" между SQL-командами.
Кстати Oracle вообще очень нервно реагирует на точку с запятой в командах... это естественно в коде на C#, в оболочке конечно все отрабатывает хорошо. Есть метод OracleCommand.ExecuteOracleNonQuery(out OracleString), возвращающий ID строки в OracleString. Потом по этому ID можно получить быстрый (быстрее чем поиск по первичному ключу) доступ к строке. Но так как тут есть последовательность, у меня сомнения появляются, будет ли такой запрос работать быстрее чем запрос к последовательности... |
|||
|
||||
alik_voodoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.10.2006 Репутация: нет Всего: нет |
Для этого можно банально запустить отдельный ExecuteReader, который находит в нужной тебе таблице максимальный ID.
|
|||
|
||||
Enuviel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Oracle клиент не работает с пакетными SQL запросами, в отличии от SQL клиента, вот и реагирует нервно. |
|||
|
||||
Artorius |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 27.3.2007 Репутация: нет Всего: 1 |
Enuviel, это я уже понял
alik_voodoo, именно так и делаю, и именно то, что ExecuteReader отдельный мне и не нравится Ладно, спасибо всем, а отдельное спасиб Papirus'у, за напоминание про ExecuteScalar() - я про него подзабыл)) - с ним код чуть проще получется. |
|||
|
||||
Gesha |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 170 Регистрация: 5.10.2005 Репутация: нет Всего: 2 |
--------------------
|
|||
|
||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |