2017-01-24 20 views
1

우리는 windows formms를 사용하고 있습니다. 양식에서 우리는 새로운 행을 삽입하고 기존 행을 함께 업데이트하는 gridview를 가지고 있습니다. 그리고 아래의 프로세스 InsertCommand 잘 작동하고 아래 adap.Update(deltaTable);에서 예외가 발생동시성 위반 : UpdateCommand가 예상 한 레코드 0 개에 영향을 미침

OracleDataAdapter adapter = new OracleDataAdapter(sql, conn); 
OracleCommandBuilder oraCmdBuilder = new OracleCommandBuilder(adapter); 
OracleDataAdapter adap = new OracleDataAdapter(); 
adap.SelectCommand = new OracleCommand(sql, conn); 

adap.InsertCommand = oraCmdBuilder.GetInsertCommand(); 
adap.InsertCommand.Connection = conn; 
adap.UpdateCommand = oraCmdBuilder.GetUpdateCommand(); 
adap.UpdateCommand.Connection = conn; 
adap.DeleteCommand = oraCmdBuilder.GetDeleteCommand(); 
adap.DeleteCommand.Connection = conn; 
adap.UpdateBatchSize = 100; 

int i = adap.Update(deltaTable); 

,

동시성 위반, 코드입니다 다음 UpdateCommand가 예상 한 기록의 영에 영향을 미쳤다. 우리는 업데이트 방법 전에 acceptchanges를 추가하려고 시도했지만, 변경은 변경에 영향을주었습니다. 행이 삭제되지 않았습니다.

모든 의견을 환영합니다.

미리 감사드립니다.

안부

+0

Row.AcceptChanges() 당신이 본 적이 있소 어디서든 당신이 [이] (http://stackoverflow.com/questions/3388100/concurrency-violation-the-updatecommand- 영향을받은 0 개의 예상 레코드 수) 및 [this] (http://stackoverflow.com/questions/9521355/concurrency-violation-the-updatecommand-affected-0-of-the-expected-1 -records-v) 이것을 새로운 질문으로 게시하기 전에? –

+1

또는 this http://stackoverflow.com/a/32558609/2946329 –

+0

ConflictOption.OverwriteChanges를 추가하면 저장 또는 임의의 동작이 여러 번 반복됩니다. – user703526

답변

0

나는이 문제를 당신은 업데이트하기 전에 원본 데이터와 데이터를 제어 한 당신의 update 쿼리에서 이유

1

) 아래에 직면했다. 해결하려면 쿼리에서이 조건을 제거하십시오. 조건을 제거하면 last modified win이됩니다. 조건은 @original입니다. 코드에서 Update 전에

WHERE CustomerID = @Original_CustomerID OR @Original_CustomerID IS NULL AND customer ID IS NULL 

2)와 같은 쿼리