DetailPage-MSS-KB

기술 자료

기술 자료: 815629 - 마지막 검토: 2007년 5월 12일 토요일 - 수정: 3.2

 

이 페이지에서

요약

이 문서에서는 Access 데이터베이스에서 ID 열 값을 검색하는 방법을 설명합니다.

Jet 데이터베이스 배치 다중 문 명령을 지원하지 않기 때문에 Identity 값은 Jet 데이터베이스에 있는 데이터를 검색하는 SQL Server의 다릅니다. Jet OLE DB 버전 4.0 공급자가 @@ Identity SELECT 쿼리를 지원하는 연결 시 생성된 자동 증가 필드의 값을 검색할 수 있습니다. @@ Identity SELECT 쿼리를 실행하려면 다른 OleDbCommand 개체를 사용하는 것이 좋습니다. 이 문서에서는 두 번째 OleDbCommand Identity 열 값을 검색하는 방법을 설명합니다.

참고:이 기능은 Microsoft Jet OLEDB 4.0 데이터베이스에 대해서만 작동합니다. 이전 버전의 Microsoft Jet OLEDB이 이 기능을 지원하지 않습니다.

추가 정보

Access 데이터베이스에 연결

Access 데이터베이스에 연결 및 ID 열을 사용하여 테이블 만들기 위해 다음과 같이 하십시오.
  1. Microsoft Visual Studio .NET 2002 시작하십시오.
  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트 를 클릭하십시오.
  3. 프로젝트 형식Visual Basic 프로젝트 를 클릭하십시오. 템플릿 구역에서 콘솔 응용 프로그램 을 누릅니다. 기본적으로 Module1.vb를 만들어집니다.
  4. MyJetApplication 프로젝트 이름을 지정한 다음 확인 을 누릅니다.
  5. 기존 코드를 다음 코드로 바꿉니다:
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    
    Module Module1
    
       Sub Main()
    
          ' Open Connection 
          Dim cnJetDB As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=YourAccessDatabase")
          cnJetDB.Open()
    
          ' If the test table does not exist, create the Table.
          Dim strSQL As String
          strSQL = "CREATE TABLE AutoIncrementTest " & _
                   "(ID int identity, Description varchar(40), " & _
                   "CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))"
    
          ' Command for creating Table.
          Dim cmdJetDB As New OleDbCommand(strSQL, cnJetDB)
          cmdJetDB.ExecuteNonQuery()
    
          ' Create a DataAdaptor With Insert Command For inserting records
          Dim oleDa As New OleDbDataAdapter("Select * from AutoIncrementTest", cnJetDB)
    
    
          ' Command to Insert Records.
          Dim cmdInsert As New OleDbCommand()
          cmdInsert.CommandText = "INSERT INTO AutoIncrementTest (Description) VALUES (?)"
          cmdInsert.Connection = cnJetDB
          cmdInsert.Parameters.Add(New OleDbParameter("Description", OleDbType.VarChar, 40, "Description"))
          oleDa.InsertCommand = cmdInsert
    
          ' Create a DataTable
          Dim dtTest As New DataTable()
          oleDa.Fill(dtTest)
    
          Dim drTest As DataRow
    
          ' Add Rows to the Table
          drTest = dtTest.NewRow
          drTest("Description") = "This is a Test Row 1"
          dtTest.Rows.Add(drTest)
    
          drTest = dtTest.NewRow
          drTest("Description") = "This is a Test Row 2"
          dtTest.Rows.Add(drTest)
          
       End Sub
    
    End Module
    
  6. Access 데이터베이스로 가리키도록 연결 문자열의 데이터 원본 이름을 수정하십시오.




Identity 열 값 트랩

DataAdapter RowUpdated 이벤트 에서 단계를 요약하면 Access 데이터베이스에 있는 테이블의 열에 대해 생성된 ID 열 값을 트래핑할 수 있습니다. RowUpdated 이벤트를 다른 명령 개체를 사용하여 @@ IDENTITY SELECT 쿼리를 실행할 및 ID 열이 쿼리에서 반환된 값을 할당합니다. 마지막으로, 열 값을 허용하도록 DataRow 개체의 AcceptChanges 메서드를 호출하십시오.

트랩 ID 열 값을 다음과 같이 하십시오.
  1. 다음 코드를 Main 메서드 @@ IDENTITY SELECT 쿼리에 대한 두 번째 OleDbCommand 개체를 만들려면 먼저 추가:
       ' Create OleDbCommand for SELECT @@IDENTITY statement
       Private cmdGetIdentity As OleDbCommand
  2. 다음 코드를 Main 메서드를 OleDbCommand 클래스의 새 인스턴스를 만드는 추가:
          ' Create another command to get IDENTITY value.
          cmdGetIdentity = New OleDbCommand()
          cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
          cmdGetIdentity.Connection = cnJetDB
    
    
  3. 다음 코드를 Main 메서드를 RowUpdated 이벤트를 처리하기 위한 추가:
          ' Delegate for handling RowUpdated event.
          AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. 데이터 업데이트에 대한 Main 메서드에서 다음 코드를 추가하십시오. RowUpdated 이벤트는 Update 메서드를 호출한 후 발생합니다.
          ' Update the Data
          oleDa.Update(dtTest)
    
  5. AutoIncrementTest 테이블 삭제 및 리소스를 해제하기 위한 Main 메서드에 다음 코드를 추가합니다:
          ' Drop the table
          cmdJetDB.CommandText = "DROP TABLE AutoIncrementTest"
          cmdJetDB.ExecuteNonQuery()
    
          ' Release the resources.
          cmdGetIdentity.Dispose()
          cmdGetIdentity = Nothing
          cmdInsert.Dispose()
          cmdInsert = Nothing
          cmdJetDB.Dispose()
          cmdJetDB = Nothing
          cnJetDB.Close()
          cnJetDB.Dispose()
          cnJetDB = Nothing
  6. Module1 위해 다음 RowUpdated 이벤트 처리기 코드를 추가할:
       ' Event handler for RowUpdated event.
       Private Sub HandleRowUpdated(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs)
          If e.Status = UpdateStatus.Continue AndAlso e.StatementType = StatementType.Insert Then
             ' Get the Identity column value
             e.Row("ID") = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())
             Debug.WriteLine(e.Row("ID"))
             e.Row.AcceptChanges()
          End If
       End Sub
    
  7. 디버그 메뉴에서 응용 프로그램을 실행하려면 시작 을 클릭하십시오. ID 열 값은 출력 창에 표시됩니다.


코드 목록 완료

Imports System
Imports System.Data
Imports System.Data.OleDb

Module Module1

   ' Create OleDbCommand for SELECT @@IDENTITY statement
   Private cmdGetIdentity As OleDbCommand

   Sub Main()

      ' Open Connection 
      Dim cnJetDB As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=YourAccessDatabase")
      cnJetDB.Open()

      ' If the test table does not exist then create the Table
      Dim strSQL As String
      strSQL = "CREATE TABLE AutoIncrementTest " & _
               "(ID int identity, Description varchar(40), " & _
               "CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))"

      ' Command for Creating Table
      Dim cmdJetDB As New OleDbCommand(strSQL, cnJetDB)
      cmdJetDB.ExecuteNonQuery()

      ' Create a DataAdaptor With Insert Command For inserting records
      Dim oleDa As New OleDbDataAdapter("Select * from AutoIncrementTest", cnJetDB)


      ' Command to Insert Records
      Dim cmdInsert As New OleDbCommand()
      cmdInsert.CommandText = "INSERT INTO AutoIncrementTest (Description) VALUES (?)"
      cmdInsert.Connection = cnJetDB
      cmdInsert.Parameters.Add(New OleDbParameter("Description", OleDbType.VarChar, 40, "Description"))
      oleDa.InsertCommand = cmdInsert

      ' Create a DataTable
      Dim dtTest As New DataTable()
      oleDa.Fill(dtTest)

      Dim drTest As DataRow

      ' Add Rows to the Table
      drTest = dtTest.NewRow
      drTest("Description") = "This is a Test Row 1"
      dtTest.Rows.Add(drTest)

      drTest = dtTest.NewRow
      drTest("Description") = "This is a Test Row 2"
      dtTest.Rows.Add(drTest)

      ' Create another Command to get IDENTITY Value
      cmdGetIdentity = New OleDbCommand()
      cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
      cmdGetIdentity.Connection = cnJetDB

      ' Delegate for Handling RowUpdated event
      AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated

      ' Update the Data
      oleDa.Update(dtTest)

      ' Drop the table
      cmdJetDB.CommandText = "DROP TABLE AutoIncrementTest"
      cmdJetDB.ExecuteNonQuery()

      ' Release the Resources
      cmdGetIdentity.Dispose()
      cmdGetIdentity = Nothing
      cmdInsert.Dispose()
      cmdInsert = Nothing
      cmdJetDB.Dispose()
      cmdJetDB = Nothing
      cnJetDB.Close()
      cnJetDB.Dispose()
      cnJetDB = Nothing
   End Sub

   ' Event Handler for RowUpdated Event
   Private Sub HandleRowUpdated(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs)
      If e.Status = UpdateStatus.Continue AndAlso e.StatementType = StatementType.Insert Then
         ' Get the Identity column value
         e.Row("ID") = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())
         Debug.WriteLine(e.Row("ID"))
         e.Row.AcceptChanges()
      End If
   End Sub
End Module

참조

Visual Basic 6.0 에서 관련된 항목에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
232144  (http://support.microsoft.com/kb/232144/EN-US/ ) @@ Identity 4.0 Supports SELECT 정보: Jet OLE DB 공급자 버전
자세한 내용은 다음 MSDN 웹 사이트를 방문하십시오.
OleDbDataAdapter.RowUpdated 이벤트
http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbdataadapter.rowupdated(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbdataadapter.rowupdated(vs.71).aspx)

본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ADO.NET 1.0
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
키워드: 
kbmt kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster KB815629 KbMtko
기계 번역된 문서기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
공유
추가 지원 옵션
Microsoft Community 지원 포럼
직접 문의하기
Microsoft Certified Partner 찾기
Microsoft Store
소기업이 아닙니까?
다음에서 팔로우하십시오.