我有一种方法可以使用两种方法。一个处理插入,另一个处理更新。我围绕这两种方法设置了事务范围,因此如果有任何问题,它将回滚。我注意到它正在将数据放入数据库中,但出错时它没有删除它。我已经为范围尝试了 RequiresNew 和 Required 选项,但这似乎没有什么不同。
附加信息: 这些存储过程实际上存储在保存存储过程的“实用程序”数据库中,但它们实际上正在修改不同数据库中的记录。
此方法会将大约 700 多条记录插入 40 个不同的表中。
主要方法
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
foreach (var change in changes)
{
switch (change.ChangeType)
{
case ChangeTypeEnum.Insert:
var result = DataAccess.InsertTableRow(sourceEnvironmentId, SuperClientVendorID,
DatabaseName, DataRouteName, change,
typeNamespace);
postList.Add(result);
break;
case ChangeTypeEnum.Update:
DataAccess.UpdateTableRow(sourceEnvironmentId, SuperClientVendorID, DatabaseName,
DataRouteName, change, typeNamespace);
postList.Add(change);
break;
}
}
scope.Complete();
}
插入方法
var sproc = string.Format("Carma.usp_{0}_{1}_ins", databaseName, managedState.TypeName);
var connString = DataAccessManager.GetConnectionString(executionEnvironment, superClientVendorID, routeName, sproc, false);
using (var newConnection = new SqlConnection(connString))
{
newConnection.Open();
using (var newSqlCommand = new SqlCommand(sproc, newConnection))
{
newSqlCommand.CommandType = CommandType.StoredProcedure;
newSqlCommand.CommandTimeout = Setup.TimeOut;
newSqlCommand.Parameters.AddRange(GetParameters(managedState, typeNamespace, true));
newSqlCommand.ExecuteNonQuery();
return managedState;
}
}