c# - MS-Access에서 거래가 있습니까?




.net sql (2)

C # .NET 및 MS-Access를 사용하여 작은 데스크탑 응용 프로그램을 개발하고 있습니다. 나는 MS-Access에 대한 사전 경험이 없습니다. Ms-Access에서 거래를 사용할 수 있는지 여부를 알고 싶습니다.

나는 아래에 언급 된 상황이있다.

Tbl1에 삽입
Tbl2에 삽입

tbl1에 삽입이 성공했을 때만 tbl2에 삽입하고 싶습니다. 그리고 tbl2에 삽입하는 동안 예외가있는 경우 tbl1에 삽입을 롤백하고 싶습니다.
SQL Server에서이 작업을 쉽게 수행 할 수 있지만 ms 액세스의 경우이 작업을 어떻게 관리해야합니까? 제발 도와주세요, 미리 감사드립니다.


아무도 실제로 여기에 대한 답변으로 코드 예제를 제공하지 않았거나 예제를 인용 한 적이 없습니다 (Access 도움말 파일에는 예제가 포함되어 있습니다). 명심해야 할 핵심 쟁점은 Jet / ACE (Access는 트랜잭션 자체를 지원하지 않으므로 트랜잭션을 작업 공간 수준에서 제어한다는 점입니다. 거래를위한 새로운 작업 공간을 만들거나 새로운 작업 공간을 만들 수 있습니다. 다음은 몇 가지 샘플 코드입니다.

  On Error GoTo errHandler
    Dim wrk As DAO.Workspace
    Dim db As DAO.Database
    Dim lngInvoiceID As Long

    Set wrk = DBEngine.Workspaces(0)
    Set db = wrk.OpenDatabase(CurrentDb.Name)
    With wrk
      .BeginTrans
      db.Execute "INSERT INTO tblInvoice (CustomerID) VALUES (123);", dbFailOnError
      lngInvoiceID = db.OpenRecordset("SELECT @@IDENTITY")(0)
      db.Execute "INSERT INTO tblInvoiceDetail (InvoiceID) VALUES (" & lngInvoiceID & ")", dbFailOnError
      .CommitTrans
      Debug.Print "Inserted Invoice header and detail for Invoice " & lngInvoiceID
    End With

  exitRoutine:
    If Not (db Is Nothing) Then
       db.Close
       Set db = Nothing
    End If
    Set wrk = Nothing
    Exit Sub

  errHandler:
    MsgBox Err.Number & ": " & Err.Description, vbExclamation, "Error in transaction"
    wrk.Rollback
    Resume exitRoutine

(코드 테스트 및 Access 내에서 작동)


예 Microsoft Access는 트랜잭션을 지원하며 매우 잘 작동합니다. 몇 년 전에 Access로 데이터베이스를 사용하는 상용 POS 응용 프로그램을 만들었고 트랜잭션 지원이 매우 잘되었습니다.

그렇더라도 가능한 경우 SQL Server Express를 사용합니다. 무료이며 Access보다 훨씬 강력합니다.





ado.net