/// <summary> /// /// </summary> /// <param name="entity"></param> /// <returns></returns> public bool Update(DMSTransactionScopeBulkCopyEntity entity) { List <int> resultValueList = new List <int>(); string errMsg = string.Empty; return(Update(entity, ref resultValueList, ref errMsg)); }
/// <summary> /// /// </summary> /// <param name="entity"></param> /// <param name="resultValueList"></param> /// <param name="errMsg"></param> /// <returns></returns> public bool Update(DMSTransactionScopeBulkCopyEntity entity, ref List <int> resultValueList, ref string errMsg) { if (entity.InternalDbProvider == null) { errMsg = "请确保有一个表格指定了elementType类型来进行读取数据库配置"; throw new DMSFrameException(errMsg); } resultValueList = new List <int>(); Queue <TransactionScopeBulkCopyEntity> scopeEntityList = entity.GetEditTS(); bool flag = true; if (scopeEntityList != null && scopeEntityList.Count > 0) { using (var conn = entity.InternalDbProvider.GetOpenConnection()) { IDbTransaction sqlbulkTransaction = conn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); try { foreach (TransactionScopeBulkCopyEntity item in scopeEntityList) { #region sqlBulkCopy SqlBulkCopy sqlBulkCopy = new SqlBulkCopy((SqlConnection)conn, SqlBulkCopyOptions.Default, (SqlTransaction)sqlbulkTransaction); try { string tableName = item.TableName; if (item.TableFunc != null) { tableName = item.TableFunc.Compile()(tableName); } sqlBulkCopy.DestinationTableName = tableName; sqlBulkCopy.BatchSize = 20000; //20000行每连接 sqlBulkCopy.BulkCopyTimeout = 50; //50秒超时 if (item.ColumnMapping != null) { foreach (var c in item.ColumnMapping) { sqlBulkCopy.ColumnMappings.Add(c.Key, c.Value); } } sqlBulkCopy.WriteToServer(item.DataTable); resultValueList.Add(item.DataTable.Rows.Count); } catch (Exception ex) { flag = false; errMsg = ex.Message; Log.Debug(ReflectionUtils.GetMethodBaseInfo(System.Reflection.MethodBase.GetCurrentMethod()), "执行批量插入数据库出错了", ex); throw ex; } finally { sqlBulkCopy.Close(); } #endregion } if (flag) { sqlbulkTransaction.Commit(); } else { sqlbulkTransaction.Rollback(); } } catch (Exception ex) { sqlbulkTransaction.Rollback(); errMsg = ex.Message; Log.Debug(ReflectionUtils.GetMethodBaseInfo(System.Reflection.MethodBase.GetCurrentMethod()), "执行批量插入数据库出错了", ex); throw ex; } finally { entity.Clear(); } } } return(flag); }