2013-10-07 1 views
1

내 코드에서 팔레트 번호를 선택한 상자에 지정해야합니다.업데이트 및 선택 후 SQL Server 잠금 오류

일단 사용자가 상자 (15-30 상자)를 선택하고 확인을 누르면 다음 코드가 실행됩니다.

//UPDATE THE PALLET NO FOR ALL THE SELECTED CARTONS 

      foreach (DataGridViewRow item in dgvCartonDetails.Rows) 
      { 
       dbLayer.tblCartonUpdatePalletid(item.Cells["CM_ID"].Value.ToString(), Pno, _Settings.Line.ToString()); 

    //STORED PROCEDURE:tblCartonUpdatePalletid 
    //update tblCarton set CM_palletid = @palletid, cm_cartoncompletetime = getdate() where cm_id = @cm_id 
      } 
      //PRINT ALL THE BOXES IN THE PALLET 
      dbLayer.tblPrintAllCartonsOfthePallet(PalletID); 

    //STORED PROCEDURE: tblPrintAllCartonsOfthePallet 
    //select * from tblCarton where cm_palletid = @PalletID 

때때로 잠금 오류 (ref 그림)가 발생합니다.

enter image description here

내가 referance에 대한뿐만 아니라 저장 프로 시저의 데이터를 주었다. 카톤 테이블은 하루 5000 레코드의 속도로 증가합니다.

나는 실종 된 것을 모른다. 어디를 조사해야합니까? 미리 감사드립니다.

답변

1

다른 프로세스가 동시에 실행되어야합니다. 그것이 무엇인지 식별해야합니다. 가능한 한 최선의 일은 프로파일 러에서 교착 상태를 포착하는 것입니다. 교착 상태에있는 프로세스와 리소스를 정확히 보여주기 때문입니다.

나는이 두 쿼리를 1 회의 트랜잭션으로 실행한다고 가정합니다.

위의 코드를 실행하는 프로세스가 2 개있는 경우 업데이트가 동시에 발생합니다 (tblCarton). 첫 번째 페이지는 1 페이지의 레코드를 업데이트하고 두 번째 페이지는 페이지 2의 레코드를 업데이트합니다. 그런 다음 페이지를 역순으로 업데이트해야합니다. 먼저 페이지 2와 두 번째 페이지 1을 업데이트해야합니다. 그러면 교착 상태가 발생합니다.

프로파일 러에서 교착 상태 보고서를 가져 오지 않고도이 문제가 확실하게 발생하는지 여부는 알 수 없습니다.