2017-04-09 14 views
-1

레코드를 수정하기 전에 하나의 레코드를 잠글 수 있습니까?레코드를 수정하기 전에 하나의 레코드를 잠글 수 있습니까?

string stOpenConn = new FbConnectionStringBuilder { 
    Database = stPathFilename, 
    UserID = stUserID, 
    Password = stPassword, 
    ServerType = FbServerType.Embedded, 
    ClientLibrary = stCLIENT_LIBRARY 
}.ToString(); 

try { 
    using(FbConnection fbConn = new FbConnection(stOpenConn)) { 
     fbConn.Open(); 

     string stCmd = "UPDATE " + stTableName + " SET " + liststFieldNamesNoKeyID[0] + " = @p0"; 
     for (int iii = 1; iii < liststFieldNamesNoKeyID.Count(); iii++) 
      stCmd += ", " + liststFieldNamesNoKeyID[iii] + " = @p" + iii.ToString(); 
     stCmd += " WHERE" + stFieldKeyID + "= @p" + liststFieldNamesNoKeyID.Count().ToString(); 

     FbTransaction fbTransaction = fbConn.BeginTransaction(); 
     using (FbCommand fbCmd = new FbCommand(stCmd, fbConn, fbTransaction)) { 
      for (int iii = 0; iii < liststFieldNamesNoKeyID.Count(); iii++) { 
       string stPlaceHolder = "@p" + (iii).ToString(); 
       string stValue = liststNewValuesNoKeyID[iii]; 
       fbCmd.Parameters.AddWithValue(stPlaceHolder, stValue); 
      } 
      int iKeyID = Convert.ToInt32(stKeyID); 
      fbCmd.Parameters.AddWithValue("@p" + liststFieldNamesNoKeyID.Count().ToString(), iKeyID); 
      fbCmd.ExecuteNonQuery(); 
      fbTransaction.Commit(); 
     }//using 
    }//using 
}//try 

그런 다음 수정이 완료되면 해제 하시겠습니까?

나는 BeginTransaction ... 전에 연결이 열린 후 레코드 잠금이 발생하고 fbTransaction.Commit 다음에 레코드 잠금을 해제한다고 가정합니다.

+1

그게 무슨 거래입니다. 무엇을 성취하려고합니까? –

+0

두 사람이 같은 기록을 동시에 변경하지 못하게하는 것이 목적입니다. 귀하의 의견 인 Mark Rotteveel을 토대로 거래가 기록을 잠그는 것으로 보입니다. 나는이 게시물 이전에 인터넷 검색을 수행했다 ... 기록을 잠그기 위해 거래를 묶은 것은 아무것도 보지 못했다. 설명 주셔서 감사합니다! – ttom

+0

업데이트하면 첫 번째 트랜잭션이 커밋되지 않은 동안 다른 트랜잭션이 동일한 레코드를 업데이트 할 수 없습니다. –

답변