2009-05-15 3 views
1

Каков наилучший способ получить первичный ключ вставленной строки при использовании объектов ODBC в .NET?Могу ли я получить первичный ключ вставленной строки, используя ODBC?

Например (VB):

Dim command As OdbcCommand = gOdbcConn.CreateCommand() 
command.CommandText("INSERT INTO auhinode (node_key, node_desc) VALUES (0, 'New Node')") 
... 
Dim result As Integer = command.ExecuteNonQuery() 

Я видел несколько других предложений here, но мне интересно, если есть решения, относящиеся к объектам ODBC?

Редактировать: Причина, по которой мы используем ODBC, заключается в том, что мы поддерживаем 3 разные базы данных - SQL Server, Oracle, Informix.

+1

В какой базе данных? SQL Server? –

+0

Вы уже знаете значение mode_key (ноль), прежде чем вставлять его, поэтому просто «promate» mode_key будет «основным» ключом :) – onedaywhen

+0

... или есть автоинкремент или подобное автогенерированное значение (например, SQL Server IDENTITY), о котором вы нам не говорили? – onedaywhen

ответ

2

Вы не собираетесь использовать ОДИН способ, который будет работать во всех трехдюймовых двигателях. Каждый из них имеет разные способы получения идентификатора строки, которую вы только что вставили.

select scope_identity(); в sql-сервере.

В oracle вам нужно использовать последовательность и вставить значение в таблицу самостоятельно.

Informix

Так что в вашем коде вы собираетесь должны знать, что база данных в настоящее время настроен на использование необходимого кода.

Другой вариант заключается в том, чтобы хранимая процедура выполняла вставку, возвращает идентификатор вам. Затем вам не нужно вносить какие-либо изменения в свой код, код вызывает хранимую процедуру, которая возвращает идентификатор, но у вас разные версии хранимой процедуры для каждого движка db, каждый с тем же именем, и включать их в свои скрипты для создания вашей базы данных.

1

Предполагая, что децибел является SQLServer дб, все, что вам нужно сделать, это:

SELECT SCOPE_IDENTITY(); 

Кроме того, не следует использовать:

SELECT @@IDENTITY; 

Это зло. Хорошо, это не зло, но он не может вернуть идентификатор, который вы ищете, если у вас есть триггеры или что-то еще, что бы вставить другую запись в ваш db.

+0

латунь нацеливается на 3-х ядерные движки с тем же кодом. Это работает только с SQL Server. – jvanderh

Смежные вопросы