2014-01-28 10 views
0

데이터베이스 테이블에 데이터 목록을 삽입합니다. 모든 것은 잘 작동하지만 데이터베이스에서 내 테이블을 볼 때 비어 있습니다! 기록이 보이지 않습니다.C# 트랜잭션에서 루프가 있지만 데이터가 삽입되지 않았습니다.

여기 내 기능입니다 :

public int addBulkLeadStages(List<LeadStage> allLeadStages) 
    { 
     //throw new NotImplementedException(); 
     SqlConnection connection; 
     SqlCommand cmd; 
     int effectedRows = 0; 
     int rowsCount = 0; 
     int updatedRowsCount = 0; 
     using (TransactionScope trans = new TransactionScope()) 
     { 
      using (connection = new SqlConnection(SalesForceDBManager.getConnectionString(SalesForceDB.CONNECTION_STRING))) 
      { 
       //Open Connection 
       connection.Open();     
       //Craete Command 
       cmd = connection.CreateCommand(); 
       int noOfLeadStages = allLeadStages.Count; 
       for (int i = 0; i < noOfLeadStages; i++) 
       { 
        //Check If entry already available 
        if (isLeadStageRecordExist(allLeadStages[i].ID,connection)) 
        { 
         //Update Existing Record 
         updatedRowsCount = updateLeadStage(connection, allLeadStages[i].ID, allLeadStages[i]); 
        } 
        else 
        { 
         cmd.CommandText = "INSERT INTO " + SalesForceDB.LeadStage.TABLE_LEAD_STAGE + "(" + 
          SalesForceDB.LeadStage.COLUMN_ID + "," + SalesForceDB.LeadStage.COLUMN_NAME + "," + 
          SalesForceDB.LeadStage.COLUMN_COMMENTS_REMARKS + "," + SalesForceDB.LeadStage.COLUMN_ENTRY_POINT + "," + 
          SalesForceDB.LeadStage.COLUMN_EXIT_POINT + "," + SalesForceDB.CommonColumns.COLUMN_IS_ACTIVE + "," + 
          SalesForceDB.LeadStage.COLUMN_SEQUENCE_NO + "," + SalesForceDB.LeadStage.COLUMN_STAGE_DESCRIPTION + "," + 
          SalesForceDB.CommonColumns.COLUMN_CREATED_BY + "," + SalesForceDB.CommonColumns.COLUMN_CREATED_DATE + "," + 
          SalesForceDB.CommonColumns.COLUMN_LAST_MODIFIED_BY + "," + SalesForceDB.CommonColumns.COLUMN_LAST_MODIFIED_DATE + ")" + 
          " VALUES (@ID,@StageName,@CommentsRemarks,@EntryPoint,@ExitPoint,@IsActive,@SequenceNo,@StageDesc,@CreatedBy,@CreatedDate," + 
          "@LastModifiedBy,@LastModifiedDate)"; 

         //Adding Command Parameters 
         cmd.Parameters.AddWithValue("@ID", allLeadStages[i].ID); 
         cmd.Parameters.AddWithValue("@StageName", allLeadStages[i].Name); 
         cmd.Parameters.AddWithValue("@CommentsRemarks", allLeadStages[i].Comments); 
         cmd.Parameters.AddWithValue("@EntryPoint", allLeadStages[i].EntryPoint); 
         cmd.Parameters.AddWithValue("@ExitPoint", allLeadStages[i].ExitPoint); 
         cmd.Parameters.AddWithValue("@IsActive", allLeadStages[i].IsActive); 
         cmd.Parameters.AddWithValue("@SequenceNo", allLeadStages[i].SequenceNo); 
         cmd.Parameters.AddWithValue("@StageDesc", allLeadStages[i].Description); 
         cmd.Parameters.AddWithValue("@CreatedDate", allLeadStages[i].CreatedDate); 
         cmd.Parameters.AddWithValue("@CreatedBy", allLeadStages[i].CreatedBy); 
         cmd.Parameters.AddWithValue("@LastModifiedBy", allLeadStages[i].LastModifiedBy); 
         cmd.Parameters.AddWithValue("@LastModifiedDate", allLeadStages[i].LastModifiedDate); 
         //Execute query 
         effectedRows = cmd.ExecuteNonQuery(); 
         rowsCount += effectedRows; 
         cmd.Parameters.Clear(); 
        } 
       } 
      } 
      return rowsCount; 
     } 
    } 

그리고 이것은 내 연결 문자열입니다.

Data Source=FAIZAN;Initial Catalog=SalesForceBuild015;Integrated Security=SSPI 

잘 작동합니다! 입력 목록에 11 개의 레코드가 포함되어 있으며 정확한 11 카운트를 출력하지만 데이터베이스 테이블은 비어 있습니다. 나는 이유를 알 수 없다. 여기서 내가 무엇을 놓치고 있니?

TransactionScope는 괜찮습니까?

감사합니다.

+1

트랜잭션을 커밋해야하며, 명시 적 커밋이 수행되지 않으면 기본적으로 롤백됩니다. –

답변

3

코드의 어느 시점에서 trans.Complete();으로 전화해야합니다. 그렇지 않으면 트랜잭션이 롤백됩니다.

public int addBulkLeadStages(List<LeadStage> allLeadStages) 
{ 
    //throw new NotImplementedException(); 
    SqlConnection connection; 
    SqlCommand cmd; 
    int effectedRows = 0; 
    int rowsCount = 0; 
    int updatedRowsCount = 0; 
    using (TransactionScope trans = new TransactionScope()) 
    { 
     using (connection = new SqlConnection(SalesForceDBManager.getConnectionString(SalesForceDB.CONNECTION_STRING))) 
     { 
      //Open Connection 
      connection.Open();     
      //Craete Command 
      cmd = connection.CreateCommand(); 
      int noOfLeadStages = allLeadStages.Count; 
      for (int i = 0; i < noOfLeadStages; i++) 
      { 
       //Check If entry already available 
       if (isLeadStageRecordExist(allLeadStages[i].ID,connection)) 
       { 
        //Update Existing Record 
        updatedRowsCount = updateLeadStage(connection, allLeadStages[i].ID, allLeadStages[i]); 
       } 
       else 
       { 
        cmd.CommandText = "INSERT INTO " + SalesForceDB.LeadStage.TABLE_LEAD_STAGE + "(" + 
         SalesForceDB.LeadStage.COLUMN_ID + "," + SalesForceDB.LeadStage.COLUMN_NAME + "," + 
         SalesForceDB.LeadStage.COLUMN_COMMENTS_REMARKS + "," + SalesForceDB.LeadStage.COLUMN_ENTRY_POINT + "," + 
         SalesForceDB.LeadStage.COLUMN_EXIT_POINT + "," + SalesForceDB.CommonColumns.COLUMN_IS_ACTIVE + "," + 
         SalesForceDB.LeadStage.COLUMN_SEQUENCE_NO + "," + SalesForceDB.LeadStage.COLUMN_STAGE_DESCRIPTION + "," + 
         SalesForceDB.CommonColumns.COLUMN_CREATED_BY + "," + SalesForceDB.CommonColumns.COLUMN_CREATED_DATE + "," + 
         SalesForceDB.CommonColumns.COLUMN_LAST_MODIFIED_BY + "," + SalesForceDB.CommonColumns.COLUMN_LAST_MODIFIED_DATE + ")" + 
         " VALUES (@ID,@StageName,@CommentsRemarks,@EntryPoint,@ExitPoint,@IsActive,@SequenceNo,@StageDesc,@CreatedBy,@CreatedDate," + 
         "@LastModifiedBy,@LastModifiedDate)"; 

        //Adding Command Parameters 
        cmd.Parameters.AddWithValue("@ID", allLeadStages[i].ID); 
        cmd.Parameters.AddWithValue("@StageName", allLeadStages[i].Name); 
        cmd.Parameters.AddWithValue("@CommentsRemarks", allLeadStages[i].Comments); 
        cmd.Parameters.AddWithValue("@EntryPoint", allLeadStages[i].EntryPoint); 
        cmd.Parameters.AddWithValue("@ExitPoint", allLeadStages[i].ExitPoint); 
        cmd.Parameters.AddWithValue("@IsActive", allLeadStages[i].IsActive); 
        cmd.Parameters.AddWithValue("@SequenceNo", allLeadStages[i].SequenceNo); 
        cmd.Parameters.AddWithValue("@StageDesc", allLeadStages[i].Description); 
        cmd.Parameters.AddWithValue("@CreatedDate", allLeadStages[i].CreatedDate); 
        cmd.Parameters.AddWithValue("@CreatedBy", allLeadStages[i].CreatedBy); 
        cmd.Parameters.AddWithValue("@LastModifiedBy", allLeadStages[i].LastModifiedBy); 
        cmd.Parameters.AddWithValue("@LastModifiedDate", allLeadStages[i].LastModifiedDate); 
        //Execute query 
        effectedRows = cmd.ExecuteNonQuery(); 
        rowsCount += effectedRows; 
        cmd.Parameters.Clear(); 
       } 
      } 

      trans.Complete(); // <-- THIS IS MISSING! 
     } 
     return rowsCount; 
    } 
} 
+1

(facepalm)! 나는 정말로 그것을 놓쳤다. Thorsten에게 감사드립니다. –

관련 문제