2012-12-18 69 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

清除參數工作:) 我可以' t重新創建命令,因爲我正在使用事務 – Coyolero

+0

它還有一個解決方案,但那太糟糕了:) –