Visual Basic .NET 구성 요소를 COM + 트랜잭션을 사용하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 315707 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 COM + 를 사용하는 방법을 보여 줍니다 (구성 요소 서비스) 트랜잭션을 Visual Basic .NET 클래스의. 데이터베이스 작업의 집합은 하나의 단위로 간주됩니다. 작업이 모두 성공할 또는, 한 작업이 실패하면 전체 트랜잭션이 실패합니다. 후자의 경우 시도하였습니다 데이터베이스 작업은 기본 데이터베이스에 게시되지 않습니다.

요구 사항

다음 항목은 권장되는 하드웨어, 소프트웨어, 네트워크 인프라, 기술 및 지식 및 서비스 팩이 설명합니다.
  • Microsoft Windows 2000 SP-1을 실행하는 서버
  • Microsoft 인터넷 정보 서비스(IIS) 버전 4.0 이상
  • Microsoft Internet Explorer 버전 5.0, 5.5 또는 6
필요한 사전 지식:
  • 트랜잭션 개념 및 처리
  • COM + (구성 요소 서비스) 에 잘 알고 있어야 .

COM + 트랜잭션 서비스

Microsoft .NET Framework 내에서 System.EnterpriseServices 네임스페이스 트랜잭션 처리 구현할 수 있는 기능을 제공합니다. 액세스하기 위해 COM + 트랜잭션 서비스에 클래스를 다음 이 단계를 수행하여 만듭니다.
  1. Visual Studio .NET 엽니다.
  2. Visual Basic .NET 에서 prjEnterprise 라는 새 클래스 라이브러리 프로젝트를 만듭니다. Visual Basic .NET Class1 명명된 공용 클래스를 만듭니다.
  3. System.EnterpriseServices 라이브러리에 대한 참조를 프로젝트에 추가하십시오. 솔루션 탐색기 창에서 참조 폴더를 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 참조 추가 선택하십시오. .NET 탭에서 System.EnterpriseServices 찾을 때까지 스크롤하십시오. System.EnterpriseServices 두 번 System.EnterpriseServices 선택한 구성 요소 창에 나타납니다 있는지 확인한 다음 확인 을 누릅니다.
  4. 나중에 코드에서 이 네임스페이스에 대한 모든 참조를 정규화해야 사용할 수 있도록 System.EntpriseServices 네임스페이스 및 System.Data.SqlClient 네임스페이스에 대한 Imports 문을 사용하십시오. 클래스 파일의 다른 문 전에 이러한 문을 사용해야 합니다:
    	Imports System.EnterpriseServices
    Imports System.Data.SqlClient
  5. COM + 트랜잭션 서비스를 사용하기 위해 clsES, 라는 클래스에 기능을 ServicedComponent에서 상속해야 합니다:
    	Public Class clsES
    Inherits ServicedComponent
  6. 트랜잭션 특성 클래스에 대한 트랜잭션 지원 수준을 지정할 수 있습니다:
    <Transaction(TransactionOption.Required)> Public Class clsES
       	Inherits ServicedComponent
  7. 네 가지 입력된 정수 매개 변수를 받는 dbAccess 라는 clsES 내에서 메서드를 만듭니다. 처음 두 매개 변수는 제품 ID와 단위 해당 제품의 주문 제공합니다. 둘째 두 매개 변수는 해당 제품의 제품 ID 및 재고 단위를 제공합니다. 이 메서드는 트랜잭션으로 처리할지 이러한 지정한 제품 ID에 대해 데이터베이스 작업 집합을 수행합니다:
    	Public Sub dbAccess (ByVal pid1 As Integer, _
    ByVal onOrder As Integer, _
          ByVal pid2 As Integer, ByVal inStock As Integer)
  8. dbAccess 메서드는 Northwind에 대한 SQL 연결 개체를 만들 데이터베이스, 및 연결을 엽니다. 데이터베이스 작업을 수행할 이 데이터베이스를 사용하여:
    Dim Conn As New _
      SqlConnection("uid=sa;database=northwind;server=localhost")
    Conn.Open()
  9. 발생할 수 있는 모든 데이터베이스 처리를 캡처하려면 Try 블록에 설정하십시오. 트랜잭션을 중단하기 위해서는 수 있도록 이러한 오류는 catch해야 합니다. Try 블록에 지정된 제품 테이블 레코드에서 서로 다른 필드를 업데이트하는 각각 두 가지 데이터베이스 작업이 포함됩니다.
    		Try
  10. 제품 테이블을 첫 번째 업데이트를 수행하십시오. UnitsonOrder 필드를 제품 ID, 처음 두 개의 입력된 매개 변수에 지정된 대로 onOrder 값을 업데이트하십시오. SQL이 이 업데이트를 실행할 수 있는 SQLcommand 사용되는:
    	   Dim Cmd As SqlCommand
          Dim sqlString As String = _
               "update products set UnitsonOrder = " & onOrder _
               & " where productId = " & pid1         
          Cmd = New SqlCommand(sqlString, Conn)
          Cmd.ExecuteNonQuery()
  11. 제품 테이블을 다른 업데이트를 수행하십시오. UnitsinStock 필드를 inStock 제품 ID, 세 번째 및 네 번째 입력된 매개 변수에 지정된 대로 값을 업데이트하십시오. SQL이 이 업데이트를 실행할 수 있는 SQLCommand 사용되는:
          sqlString = _
    "update products set UnitsinStock = " _
    & inStock & " where productId = " & pid2
               
          Cmd.CommandText = sqlString
          Cmd.ExecuteNonQuery()
  12. 이러한 업데이트가 COM + 트랜잭션 속하기 때문에 한 단위로 노력하고 있습니다. 오류가 throw되지 않은 트랜잭션 커밋--이 두 가지 업데이트를--경우 System.EnterpriseServices 네임스페이스의 contextUtil 클래스의 setComplete 메서드가 사용되는:
          ContextUtil.SetComplete()
  13. Northwind 데이터베이스 연결이 닫혀:
          Conn.Close()
  14. 전체 트랜잭션을 중단할 수 있도록 SQL 명령을 실행하는 동안 발생하는 모든 오류를, catch해야 합니다:
    	   Catch e As Exception
  15. setAbort 메서드는 System.EnterpriseServices 네임스페이스의 contextUtil 클래스의 전체 트랜잭션을 중단할 수 있습니다. 첫 번째 업데이트가 성공하고 두 번째 업데이트가 실패한 경우 두 업데이트 제품 테이블에 게시되지 않습니다. 트랜잭션이 실패했음을 나타내는 호출자에게 catch한 예외가 throw되지 않습니다:
          	ContextUtil.SetAbort()
    			Throw e
    		End Try
  16. 제대로 작동하려면 이 구성 요소는 구성 요소에 강력한 이름이 있어야 합니다. 강력한 이름을 생성하는 데 및 강력한 이름으로 어셈블리를 서명하려면 이 다음과 같이 하십시오.

    1. Visual Studio .NET 명령 프롬프트를 열려면 시작 을 누르고, 프로그램, Visual Studio .NET 을 클릭한 다음 Visual Studio .NET 도구 를 누릅니다.
    2. 어셈블리에 강력한 이름을 제공하기 위해 sn.exe -k snEnterprise.snk 명령 프롬프트에서 입력하십시오.

      강력한 이름의 어셈블리 서명에 대한 자세한 내용은 .NET Framework SDK 설명서를 참조하십시오.
    3. snEnterprise.snk 프로젝트 폴더로 복사하십시오.
    4. 앞 또는 기타 어셈블리 특성 문 뒤에 다음 코드 줄을 AssemblyInfo.vb 있는 추가:
      <Assembly: AssemblyKeyFileAttribute("..\..\snEnterprise.snk")>
    5. 저장하고 프로젝트를 빌드하십시오.

전체 코드 목록

Imports System.Data.SqlClient
Imports System.EnterpriseServices

<Transaction(TransactionOption.Required)> Public Class ClsES
    Inherits ServicedComponent

Public Sub dbAccess(ByVal pid1 As Integer, ByVal onOrder As Integer, _
      ByVal pid2 As Integer, ByVal inStock As Integer)

        Dim Conn As New _
          SqlConnection("uid=sa;database=northwind;server=localhost")
          Conn.Open()
        Try
          Dim Cmd As SqlCommand
          Dim sqlString As String = _
             "update products set UnitsonOrder = " & _
              onOrder & " where productId = " & pid1
          Cmd = New SqlCommand(sqlString, Conn)
          Cmd.ExecuteNonQuery()

          sqlString = _

         " update products set UnitsinStock = " & inStock & _
                " where productId = " & pid2
           Cmd.CommandText = sqlString
           Cmd.ExecuteNonQuery()

           ContextUtil.SetComplete()
           Conn.Close()
        
         Catch e As Exception
            ContextUtil.SetAbort()
		  Throw e
        End Try
    End Sub 
End Class

작동하는지 확인하십시오.

이 코드를 테스트하기 위해 clsES 사용하는 콘솔 응용 프로그램을 만듭니다. 한 경우, 트랜잭션이 성공할 및 onorderinstock 지정된 제품에 대한 필드가 업데이트됩니다. 두 번째 경우에는 onOrder 필드에 대해 지정한 제품 업데이트, 업데이트 있지만 성공할 경우 inStock 지정된 제품 번호가 제품 테이블에 없기 때문에 제품을 실패한 것에 대한 필드. 무시되지 트랜잭션 트랜잭션 오류가 발생합니다.
  1. 솔루션을 testES 프로젝트와 prjEnterprise 프로젝트 포함되도록 솔루션 testES 라는 새 콘솔 응용 프로그램을 추가하십시오. 새 프로젝트를 추가하려면 [파일] 메뉴에서 [새로 만들기 를 클릭한 다음 프로젝트 를 선택하십시오.
  2. 새 프로젝트 대화 상자가 나타납니다. Visual Basic 폴더의 있는 프로젝트 선택 형식 창 및 템플릿 을 선택한 다음 콘솔 응용 프로그램. 템플릿 창에서 이름 상자에 testES 수 있는 프로젝트의 이름을 입력하십시오. 대화 상자의 아래쪽에 나타나는 솔루션에 추가 단추가 선택되어 있는지 확인하십시오. 이 프로젝트를 솔루션에 추가하려면 확인 을 클릭하십시오.
  3. clsES 테스트하려면 testES 참조를 추가해야 합니다. 솔루션 창에서 방금 추가한 프로젝트 testES 아래에 있는 참조 폴더를 마우스 오른쪽 단추로 클릭하십시오. 참조 추가 선택하십시오. 참조 추가 대화 상자가 나타납니다.
  4. 프로젝트 탭을 선택하고 prjEnterprise 두 번 클릭하십시오. 참조 대화 상자의 아래 부분에 있는 선택한 구성 요소, 나타나야 합니다. 이 프로젝트에 이 참조를 추가하려면 확인 을 클릭하십시오.
  5. testES, 콘솔 응용 프로그램을 마우스 오른쪽 단추로 클릭한 다음 선택한 같이 시작 설정 프로젝트.
  6. 디버그 메뉴에서 Windows를 선택하십시오. 하위 메뉴에 즉시를 선택하십시오. 직접 실행 창에 표시되도록 합니다.
  7. Sub Main 및 End Sub 문을 대체하는 다음 테스트 코드를 모듈 Module1 복사하십시오. 이 모듈에서는 다음과 같이 나타나야 합니다:
        Sub Main()
            Dim myTest As New prjEnterprise.clsES()
    
            Try
                myTest.dbAccess(1, 777, 2, 888)
                Debug.WriteLine("TRANSACTION ONE -- SUCCESS")
               
                myTest.dbAccess(1, 5, 2, -20)
                Debug.WriteLine("TRANSACTION TWO -- SUCCESS")
            
            Catch
                Debug.WriteLine("TRANSACTION FAILURE")
            End Try
        End Sub
  8. 테스트 코드를 실행하려면 F5 키를 누릅니다.
  9. 7단계에서 코드에서 dbAccess 첫 번째 호출이 성공합니다. 제품 1 및 2 제품 제품 테이블에 있습니다. 777, 1 제품의 onOrder 필드가 업데이트되어 및 inStock 제품 2로 888 업데이트된에 대한 필드. 이 트랜잭션의 성공 때문에 직접 실행 창에 "TRANSACTION ONE-성공" 메시지가 표시되어야 합니다.

    dbAccess 두 번째 호출은 실패합니다. 따라서 두 하나를 Products dbAccess 내의 업데이트 문 테이블을 데이터베이스에 게시됩니다. 제품 1 5로 업데이트된 onOrder 필드에 있을 수 있지만 제품 2 없습니다 해당 inStock 수 -20 필드 설정합니다. 제품 테이블 정의에 정의된 제약 조건의 때문에 inStock 음수 가질 수 없습니다.

    따라서 이 호출하면 dbAccess, 전체 트랜잭션이 실패한 결과 실패합니다. 해당 dbAccess 호출하기 전에 있었던 Products 테이블에 남아 있습니다. Catch 문을 직접 실행 창에 표시되는 "트랜잭션 실패" 메시지가 결과적으로 dbAccess에서 트랜잭션 실패 알림을 처리합니다.
SQL Server 엔터프라이즈 관리자를 사용하여 Northwind Products 테이블의 내용을 확인하십시오. 제품 1 볼 때 onOrder 필드 777, 2, 제품의 같은지 있는 instock 888 필드입니다. 따라서 이러한 필드 서로 다른 값을 초래할 수 있습니다. dbAccess 두 번째 호출이 실패했습니다.

문제 해결

  • COM + 서비스를 사용하는 프로젝트가 강력한 이름을 갖고 있는지 확인하십시오.
  • COM + 서비스를 사용하는 모든 클래스는 System.EnterpriseServices 네임스페이스에 있는 서비스되는 구성 요소에서 상속해야 합니다.
  • 커밋 또는 중단 전에 디버깅하는 동안 트랜잭션 시간이 있습니다. 시간 초과가 발생하지 않도록 하려면 트랜잭션 특성에서 제한 시간 속성을 사용하십시오. 다음 예제에서 시간이 초과되기 전에 모든 트랜잭션을 완료하는 데 1,200 초 연결된 메서드를 가져옵니다.
    <Transaction(TransactionOption.Required, timeout:=1200) >

참조

자세한 내용은 다음 Microsoft 개발자 네트워크 (MSDN) 웹 사이트를 방문하십시오.
COM + 통합: .NET 엔터프라이즈 서비스를 사용하면 도움말 수 방법 빌드 분산 응용 프로그램
http://msdn.microsoft.com/msdnmag/issues/01/10/complus/

서비스되는 구성 요소
http://msdn.microsoft.com/en-us/library/aa289839.aspx

속성

기술 자료: 315707 - 마지막 검토: 2005년 11월 8일 화요일 - 수정: 3.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
키워드:?
kbmt kbhowtomaster KB315707 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com