2014-01-07 120 views
0

我有一些在事務中運行的SQL命令。我使用SqlBulkCopy和SqlCommand類來執行數據庫中的更改。起初,我用原始數據填充一個表格(使用SqlBulkCopy),然後調用執行某種同步的存儲過程(根據原始數據插入,刪除,更新其他表中的數據)。C#SqlTransaction.Commit不會拋出異常

問題是,當我在事務中調用這樣的操作並且存儲過程失敗時(例如外鍵等),它不會拋出異常,我不知道發生了任何錯誤。

這裏是代碼片段(由try/catch語句包圍):

SqlBulkCopy sqlUserGroupBulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction); 
    sqlUserGroupBulkCopy.DestinationTableName = USERGROUP_SOURCE_DATA_TABLE; 

    foreach (DataColumn column in UserGroupDataTable.Columns) 
     sqlUserGroupBulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(column.ColumnName, column.ColumnName)); 

    sqlUserGroupBulkCopy.WriteToServer(UserGroupDataTable); 

    SqlCommand synchronizeCommand = new SqlCommand(); 
    synchronizeCommand.CommandType = CommandType.StoredProcedure; 
    synchronizeCommand.CommandText = SYNCHRONIZATION_SP; 
    synchronizeCommand.Parameters.AddWithValue("SourceName", "XXX"); 
    synchronizeCommand.Parameters.AddWithValue("Local", true); 
    synchronizeCommand.Connection = connection; 
    synchronizeCommand.Transaction = transaction; 
    synchronizeCommand.ExecuteNonQuery(); 

    transaction.Commit(); 

感謝答案, 米雷克

PS:我的代碼運行在.NET 3.5的IIS 7.x的容器。

+0

只有幾點 - 第一,不應該有'@ SourceName'作爲參數名稱而不是'SourceName'例如?其次,ExecuteNonQuery不會拋出異常嗎?這是FK違規或其他情況發生的地方,而不是在事務提交期間(至少使用默認的事務設置)。我只希望其他問題,例如崩潰的服務器等在提交事務時拋出異常。什麼是您的事務隔離級別? – Luaan

+0

當事務內部的某些事務失敗時,事務提交不應該失敗(您可能已經解決了問題並想要提交)。 –

+0

發佈同步SP的代碼。問題可能在那裏,而不是你的C#代碼。此外,張貼所涉及的表格和關係的定義。 –

回答

0

行, 我已經重建項目,重新啓動IIS和MS SQL Server,它開始正常工作。我對生產中的這個問題感到很不高興和擔心。

Mirek