2009-05-15 2 views
1

.NET에서 ODBC 개체를 사용할 때 삽입 된 행의 기본 키를 검색하는 가장 좋은 방법은 무엇입니까? 예를 들어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를 사용하는 이유는 SQL Server, Oracle, Informix 등 3 가지 다른 데이터베이스를 지원하기 때문입니다.

+1

어떤 데이터베이스입니까? SQL Server? –

+0

삽입하기 전에 mode_key (제로)의 값을 이미 알고 있으므로 mode_key를 '기본'키로 지정하십시오 : – onedaywhen

+0

... 자동 증가 또는 유사한 자동 생성 값이 있습니다 (예 : SQL Server IDENTITY) 당신은 우리에게 말하지 않았습니까? – onedaywhen

답변

2

3 db 엔진 모두에서 작동하는 하나의 방법을 찾을 수 없습니다. 그들은 각각 방금 삽입 한 행의 ID를 가져 오는 다른 방법이 있습니다.

select scope_identity(); SQL Server에서.

오라클에서는 시퀀스를 사용하고 직접 테이블에 값을 삽입해야합니다.

Informix

그래서 코드에서 현재 필요한 코드를 사용하도록 구성되어 어떤 데이터베이스 알아야 할 것입니다.

또 다른 옵션은 저장 프로 시저에 삽입을 수행하고 ID를 반환하는 것입니다. 그런 다음 코드를 변경할 필요가 없으면 코드는 ID를 반환하는 저장 프로 시저를 호출하지만 각 db 엔진에 대해 동일한 이름을 가진 저장 프로 시저의 다른 버전을 가지며 스크립트에 포함합니다 데이터베이스를 만들 수 있습니다.

1

의 SQLServer DB는 DB를한다 가정하면, 당신이해야 할 모든은 다음과 같습니다

또한
SELECT SCOPE_IDENTITY(); 

는 사용하지 마십시오 :

SELECT @@IDENTITY; 

그것은 악마입니다. 좋아, 그것은 실제로 악마가 아니지만 당신이 트리거 또는 다른 DB에 다른 레코드를 삽입하는 다른 것이 있으면 당신이 찾고있는 ID를 반환하지 않을 수 있습니다.

+0

황동은 동일한 코드로 3 db 엔진을 대상으로합니다. 이것은 SQL Server에서만 작동합니다. – jvanderh

관련 문제