2010-11-29 6 views
0

2 개의 데이터 세트와 2 개의 데이터 어댑터 (각 데이터 세트마다 하나씩)를 정의했습니다. 생성 후 2 개의 dataAdapter 각각에 대해 SqlCommandBuilder를 정의합니다. 모든 것이 여기까지 있습니다. dataAdapter1.Update (dataSet1)를 사용하여 데이터베이스에서 추가, 수정, 삭제할 수 있습니다. 지우지만, 추가, 수정하는 순서는 아닙니다.동시성 위반 : UpdateCommand가 예상 한 레코드 0 개에 영향을 미침. DB concurrencyException이 처리되지 않았습니다.

   string sql = "SELECT * From localitati"; 
       da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
       da1.Fill(ds1, "localitati"); 
       cmdBuilder1 = new SqlCommandBuilder(da1); 

둘째 :

  sql = "SELECT * From sucursale"; 
      da2 = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
      da2.Fill(ds2, "sucursale"); 
      //face automat select, insert ,etc !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
      cmdBuilder2 = new SqlCommandBuilder(da2); 

어떤 아이디어 왜 이런 일이 여기에

첫 번째 데이터 세트, 데이터 어댑터와 데 SqlCommandBuilder 코드입니다?

+0

코드가 불완전하지만 문제에 대한 설명이 없습니다. –

답변

12

제공된 귀하의 정보는 쓸모가 없습니다. 그러나 오류의 의미를 설명 할 수 있습니다. ADO.Net 작성

모든 업데이트 명령의 형식은 다음과 같습니다

Update col1, col2 where col1=col1value AND col2=col2value 

ADO.Net은 데이터베이스에서 선택된 컬럼의 값을 유지합니다. 갱신을 수행 할 때 커미트 할 때 컬럼이 변경되지 않은 것입니다.

오류가 나타나는 이유는 선택을 수행하고 da2.UpdateChanges(ds2)을 호출하는 중에 데이터베이스 행이 변경 되었기 때문입니다. 논리를 살펴보면 두 개의 개별 데이터 세트 (또는 두 개의 다른 스레드)로 행의 값을 선택하고 선택을 수행 한 후 행에 대한 업데이트를 수행했을 것입니다.