2014-04-15 5 views
0

나는 행을 삽입하고이 같은 ADO.Net를 사용하여 ID 번호를 반환하고있다 : -이 코드가 데이터베이스에 두 개의 행을 삽입하는 이유는 무엇입니까?

command_string = "INSERT INTO [MyDB].[dbo].[MyTable] (THIS, THAT)" & _ 
       " OUTPUT inserted.ID_NUMER AS ID_NUMBER " & _ 
       " VALUES ('This', 'That')" 

Dim insert_command As SqlCommand  = 
     New SqlCommand(command_string, database_connection) 
Dim output_parameter As SqlParameter = 
     New SqlParameter("@id_number", SqlDbType.Int) 
Dim transaction  As SqlTransaction = 
     database_connection.BeginTransaction(System.Data.IsolationLevel.Serializable) 
insert_command.Transaction = transaction 
output_parameter.Direction = ParameterDirection.Output 
insert_command.Parameters.Add(output_parameter) 
insert_command.ExecuteNonQuery() 
Dim reader As SqlDataReader = insert_command.ExecuteReader() 
reader.Read() 
id_number = reader.GetInt32(0) 
reader.Close 
transaction.Commit 

하지만이 코드를 할 때 목표 테이블에 실행 삽입 두 행. 판독기에서 반환 된 id_number은 두 번째 행의 ID 번호입니다.

두 행을 삽입하는 이유를 알고있는 사람이 있습니까? 은 (이 질문 here을 통해 확인하고 나는 그것이 같은 문제라고 생각하지 않습니다,하지만 난 코드를 한 번만 실행되는 것을 확인할 수 테이블에 트리거가 없습니다.)

답변

4

두 번

그것을 실행하기 때문에
insert_command.ExecuteNonQuery() 
Dim reader As SqlDataReader = insert_command.ExecuteReader() 

그래서 첫 번째를 제거하고 단지 유지 :

Dim reader As SqlDataReader = insert_command.ExecuteReader() 
2

이 ID_NUMBER를 얻으려면, 대신 ExecuteScalar는 사용해보십시오 :

id_number = insert_command.ExecuteScalar() 

ExecuteReader 또는 ExecuteNonQuery으로 전화 할 필요가 없습니다.

관련 문제