none
vb.net동시성 오류 질문입니다 RRS feed

  • 질문

  • 회사내에서 vb.net을 이용하여 2007년에 만들어진 프로그램을 보고있습니다.

    그런데 최근들어 동시성 오류가 많이 발생한다하여 보고있는데 어떻게 잡아야할지 모르겠습니다.

    에러 메시지는

    동시성 위반 : 필요한 1 레코드 중 DeleteCommand의 영향을 받는 0이(가) 없습니다.

    라고 나오는데 adapter를 이용하여 update하는 부분에서 나는거라 보고있는데 이부분을 어떻게 처리하면 좋을까요?

    2012년 10월 4일 목요일 오전 1:13

모든 응답

  • 안녕하십니까? 유영진 님,
    Microsoft MSDN의 Forum 사이트를 방문해 주셔서 감사합니다.

    현재 문의 하신 ”sql server 2008 r2를 사용하고 있습니다. 동시성 오류에 대해 질문 합니다" 대해 답변을 드리겠습니다.

    동시성 위반을 해결하려면

    1.try/catch 블록 내에서 데이터베이스를 업데이트하는 명령을 실행합니다.
    2.예외가 발생하면 catch 문의 Row 속성을 검사하여 위반이 발생한 행을 확인합니다.
    3.사용자 응용 프로그램의 비즈니스 규칙에 따라 오류를 해결하는 코드를 추가합니다.

    다음 코드에서는 CustomersTableAdapter와 NorthwindDataSet을 응용 프로그램의 데이터 어댑터와 데이터 집합의 예제로 사용합니다.

    Try
        CustomersTableAdapter.Update(NorthwindDataSet)
    
    Catch ex As DBConcurrencyException
    
        Dim customErrorMessage As String
        customErrorMessage = "Concurrency violation" & vbCrLf
        customErrorMessage += CType(ex.Row.Item(0), String)
        MessageBox.Show(customErrorMessage)
    
        ' Add business logic code to resolve the concurrency violation...
    
    End Try


    [참고자료]
    방법: 동시성 오류 처리

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
    하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.

    2012년 10월 4일 목요일 오전 4:39
    중재자
  • catch문으로 잡아 row안의 데이터를 컨트롤 하고싶습니다.

    aDaMdlAdapter.ContinueUpdateOnError = True 를 사용하면 동시성일어나는부분을 제외하고

    UPDATE를 실행하고 DBConcurrencyException의 ROW에 Exception이 일어난 row들이 저장된다고 봤습니다.

    이 열들을 CopyToRows를 통해 복사할수있다는데 현재 null오류가 나서 어떻게 복사해야 될지를 모르겠습니다.

    msdn에는

    ‘선언
    Public Sub CopyToRows ( _
    array As DataRow() _
    )
    ‘사용 방법
    Dim instance As DBConcurrencyException Dim array As DataRow()

    instance.CopyToRows(array)

    나와있습니다. 어떻게 해결하면 좋을까요?

    2012년 10월 9일 화요일 오전 6:47