Могу ли я получить первичный ключ вставленной строки, используя ODBC? - PullRequest
1 голос
/ 15 мая 2009

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

Например (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()

Я видел несколько других предложений здесь , но мне интересно, есть ли решения, специфичные для объектов ODBC?

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

Ответы [ 2 ]

2 голосов
/ 15 мая 2009

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

select scope_identity (); на сервере sql.

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

Informix

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

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

1 голос
/ 15 мая 2009

Предполагая, что БД является базой данных SQLServer, все, что вам нужно сделать, это:

 SELECT SCOPE_IDENTITY();

Также не используйте:

 SELECT @@IDENTITY;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...