2012-12-18 2 views
1

트랜잭션 내에서 데이터베이스에 삽입 할 쿼리를 실행하는 C# 메서드가 있습니다.C#의 트랜잭션 내부 루프 루프

는 내가하고 싶은 것은 몇 가지 "전화 번호"

// Creates the transaction 
dbTransaction = dbConnection.DbConnection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); 

// Creates the sql command 
dbCommand = factory.CreateCommand(); 
dbCommand.Connection = dbConnection.DbConnection; 
dbCommand.Transaction = dbTransaction;  

... 로직 물건을 삽입하는 루프

// Inserts the phone 
foreach (PlacePhoneDTO placePhoneDTO in placePhoneList) 
{ 
    dbCommand.CommandText = sqlStatementPhone.ToString(); 
    // Adds the parameters 
    AddParameter<int>("@PlaceID", placeID, ref dbCommand); 
    AddParameter<string>("@PhoneNumber", placePhoneDTO.phoneNumber, ref dbCommand); 
    dbCommand.ExecuteNonQuery(); 
} 

dbTransaction.Commit(); 

루프를 실행하는 두 번째 시간

실패 고마워요.

+1

그것은 어떤 오류가 발생합니까? – Amit

+0

당신의 메소드'AddParameter'의 구현은 무엇이고 당신은 어떤 에러/예외를 얻고 있습니까? – Habib

+4

예외/실패 란 무엇입니까? (아마도 추측 할 수 있지만 질문에 그 세부 사항을 포함시켜야합니다.) 'dbCommand.Parameters.Clear()'를 수행합니까? – slugster

답변

2

slugster와 같은 명령 매개 변수를 지워야합니다. 그의 코멘트에서. 또한과 같이 루프 내부의 명령을이 같은 모든 시간을

dbCommand.CommandText = sqlStatementPhone.ToString(); 

foreach (PlacePhoneDTO placePhoneDTO in placePhoneList) 
{ 
    dbCommand.Parameters.Clear(); 

    // Adds the parameters 
    AddParameter<int>("@PlaceID", placeID, ref dbCommand); 
    AddParameter<string>("@PhoneNumber", placePhoneDTO.phoneNumber, ref dbCommand); 

    dbCommand.ExecuteNonQuery(); 
} 

을 이후 루프 외부 명령 텍스트를 이동하거나 다시 만들 수 있습니다 :

foreach (PlacePhoneDTO placePhoneDTO in placePhoneList) 
{ 
    dbCommand = factory.CreateCommand(); 
    dbCommand.Connection = dbConnection.DbConnection; 
    dbCommand.Transaction = dbTransaction; 
    dbCommand.CommandText = sqlStatementPhone.ToString(); 

    // Adds the parameters 
    AddParameter<int>("@PlaceID", placeID, ref dbCommand); 
    AddParameter<string>("@PhoneNumber", placePhoneDTO.phoneNumber, ref dbCommand); 
    dbCommand.ExecuteNonQuery(); 
} 
+0

지우기 매개 변수는 ' 내가 할 수있는 :) 근무 트랜잭션을 사용 중이기 때문에 명령을 다시 작성하지 마십시오. – Coyolero

+0

해결책이 하나 더 있지만 너무 나쁩니다. :) –