|
@ -16,17 +16,60 @@ namespace SqlSugar |
|
|
internal InsertBuilder InsertBuilder { get; set; } |
|
|
internal InsertBuilder InsertBuilder { get; set; } |
|
|
public int ExecuteBlueCopy() |
|
|
public int ExecuteBlueCopy() |
|
|
{ |
|
|
{ |
|
|
if (DbColumnInfoList==null||DbColumnInfoList.Count == 0) return 0; |
|
|
if (DbColumnInfoList == null || DbColumnInfoList.Count == 0) return 0; |
|
|
|
|
|
|
|
|
var dt= this.Context.Ado.GetDataTable("select top 0 * from " + InsertBuilder.GetTableNameString); |
|
|
DataTable dt; |
|
|
|
|
|
SqlBulkCopy bulkCopy; |
|
|
|
|
|
SetCopyData(out dt, out bulkCopy); |
|
|
|
|
|
try |
|
|
|
|
|
{ |
|
|
|
|
|
bulkCopy.WriteToServer(dt); |
|
|
|
|
|
} |
|
|
|
|
|
catch (Exception ex) |
|
|
|
|
|
{ |
|
|
|
|
|
this.Context.Ado.Connection.Close(); |
|
|
|
|
|
throw ex; |
|
|
|
|
|
} |
|
|
|
|
|
if (this.Context.CurrentConnectionConfig.IsAutoCloseConnection && this.Context.Ado.Transaction == null) |
|
|
|
|
|
{ |
|
|
|
|
|
this.Context.Ado.Connection.Close(); |
|
|
|
|
|
} |
|
|
|
|
|
return DbColumnInfoList.Count; |
|
|
|
|
|
} |
|
|
|
|
|
public async Task<int> ExecuteBlueCopyAsync() |
|
|
|
|
|
{ |
|
|
|
|
|
if (DbColumnInfoList == null || DbColumnInfoList.Count == 0) return 0; |
|
|
|
|
|
|
|
|
|
|
|
DataTable dt; |
|
|
|
|
|
SqlBulkCopy bulkCopy; |
|
|
|
|
|
SetCopyData(out dt, out bulkCopy); |
|
|
|
|
|
try |
|
|
|
|
|
{ |
|
|
|
|
|
await bulkCopy.WriteToServerAsync(dt); |
|
|
|
|
|
} |
|
|
|
|
|
catch (Exception ex) |
|
|
|
|
|
{ |
|
|
|
|
|
this.Context.Ado.Connection.Close(); |
|
|
|
|
|
throw ex; |
|
|
|
|
|
} |
|
|
|
|
|
if (this.Context.CurrentConnectionConfig.IsAutoCloseConnection && this.Context.Ado.Transaction == null) |
|
|
|
|
|
{ |
|
|
|
|
|
this.Context.Ado.Connection.Close(); |
|
|
|
|
|
} |
|
|
|
|
|
return DbColumnInfoList.Count; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void SetCopyData(out DataTable dt, out SqlBulkCopy bulkCopy) |
|
|
|
|
|
{ |
|
|
|
|
|
dt = this.Context.Ado.GetDataTable("select top 0 * from " + InsertBuilder.GetTableNameString); |
|
|
foreach (var rowInfos in DbColumnInfoList) |
|
|
foreach (var rowInfos in DbColumnInfoList) |
|
|
{ |
|
|
{ |
|
|
var dr = dt.NewRow(); |
|
|
var dr = dt.NewRow(); |
|
|
foreach (DataColumn item in dt.Columns) |
|
|
foreach (DataColumn item in dt.Columns) |
|
|
{ |
|
|
{ |
|
|
var rows= rowInfos.ToList(); |
|
|
var rows = rowInfos.ToList(); |
|
|
var value = rows.FirstOrDefault(it => |
|
|
var value = rows.FirstOrDefault(it => |
|
|
it.DbColumnName.Equals(item.ColumnName, StringComparison.CurrentCultureIgnoreCase)|| |
|
|
it.DbColumnName.Equals(item.ColumnName, StringComparison.CurrentCultureIgnoreCase) || |
|
|
it.PropertyName.Equals(item.ColumnName, StringComparison.CurrentCultureIgnoreCase) |
|
|
it.PropertyName.Equals(item.ColumnName, StringComparison.CurrentCultureIgnoreCase) |
|
|
); |
|
|
); |
|
|
if (value != null) |
|
|
if (value != null) |
|
@ -43,15 +86,15 @@ namespace SqlSugar |
|
|
} |
|
|
} |
|
|
dt.Rows.Add(dr); |
|
|
dt.Rows.Add(dr); |
|
|
} |
|
|
} |
|
|
SqlBulkCopy bulkCopy = null; |
|
|
bulkCopy = null; |
|
|
if (this.Context.Ado.Transaction != null) |
|
|
if (this.Context.Ado.Transaction != null) |
|
|
{ |
|
|
{ |
|
|
var sqlTran = this.Context.Ado.Transaction as SqlTransaction; |
|
|
var sqlTran = this.Context.Ado.Transaction as SqlTransaction; |
|
|
bulkCopy = new SqlBulkCopy(this.Context.Ado.Connection as SqlConnection,SqlBulkCopyOptions.CheckConstraints, sqlTran); |
|
|
bulkCopy = new SqlBulkCopy(this.Context.Ado.Connection as SqlConnection, SqlBulkCopyOptions.CheckConstraints, sqlTran); |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
bulkCopy=new SqlBulkCopy(this.Context.Ado.Connection as SqlConnection); |
|
|
bulkCopy = new SqlBulkCopy(this.Context.Ado.Connection as SqlConnection); |
|
|
} |
|
|
} |
|
|
//获取目标表的名称
|
|
|
//获取目标表的名称
|
|
|
bulkCopy.DestinationTableName = InsertBuilder.GetTableNameString; |
|
|
bulkCopy.DestinationTableName = InsertBuilder.GetTableNameString; |
|
@ -60,20 +103,6 @@ namespace SqlSugar |
|
|
{ |
|
|
{ |
|
|
this.Context.Ado.Connection.Open(); |
|
|
this.Context.Ado.Connection.Open(); |
|
|
} |
|
|
} |
|
|
try |
|
|
|
|
|
{ |
|
|
|
|
|
bulkCopy.WriteToServer(dt); |
|
|
|
|
|
} |
|
|
|
|
|
catch (Exception ex) |
|
|
|
|
|
{ |
|
|
|
|
|
this.Context.Ado.Connection.Close(); |
|
|
|
|
|
throw ex; |
|
|
|
|
|
} |
|
|
|
|
|
if (this.Context.CurrentConnectionConfig.IsAutoCloseConnection && this.Context.Ado.Transaction == null) |
|
|
|
|
|
{ |
|
|
|
|
|
this.Context.Ado.Connection.Close(); |
|
|
|
|
|
} |
|
|
|
|
|
return DbColumnInfoList.Count; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private object AddParameter(int i,string dbColumnName, object value) |
|
|
private object AddParameter(int i,string dbColumnName, object value) |
|
|