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的容器。
只有幾點 - 第一,不應該有'@ SourceName'作爲參數名稱而不是'SourceName'例如?其次,ExecuteNonQuery不會拋出異常嗎?這是FK違規或其他情況發生的地方,而不是在事務提交期間(至少使用默認的事務設置)。我只希望其他問題,例如崩潰的服務器等在提交事務時拋出異常。什麼是您的事務隔離級別? – Luaan
當事務內部的某些事務失敗時,事務提交不應該失敗(您可能已經解決了問題並想要提交)。 –
發佈同步SP的代碼。問題可能在那裏,而不是你的C#代碼。此外,張貼所涉及的表格和關係的定義。 –