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#代码。此外,张贴所涉及的表格和关系的定义。 –