From fa7b38119db9c898b454750abf34e63b44c1e7b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=89=91=E8=BE=89?= <510875374@qq.com> Date: Tue, 28 Oct 2025 13:49:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=B7=E9=87=8F=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93mysql=20BulkCopyAsync=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SqlBuilder/PostgreSQLFastBuilder.cs | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLFastBuilder.cs index 19b9bce38..adf67094d 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLFastBuilder.cs @@ -11,7 +11,7 @@ namespace SqlSugar { public class PostgreSQLFastBuilder : FastBuilder, IFastBuilder { - public static Dictionary PgSqlType = UtilMethods.EnumToDictionary(); + public static Dictionary PgSqlType = UtilMethods.EnumToDictionary(); private EntityInfo entityInfo; public PostgreSQLFastBuilder(EntityInfo entityInfo) @@ -38,8 +38,10 @@ namespace SqlSugar { lsColNames.Add($"\"{dt.Columns[i].ColumnName}\""); } - string copyString = $"COPY {dt.TableName} ( {string.Join(",", lsColNames) } ) FROM STDIN (FORMAT BINARY)"; - if (this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.OpenGauss) + string copyString = $"COPY {dt.TableName} ( {string.Join(",", lsColNames)} ) FROM STDIN (FORMAT BINARY)"; + var innertemp = this.Context.CurrentConnectionConfig?.MoreSettings?.InnerTemp as DbType?; + if (this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.OpenGauss || + (this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Vastbase && innertemp == DbType.MySql)) { copyString = copyString.Replace("(FORMAT BINARY)", "(FORMAT 'BINARY')"); } @@ -58,14 +60,14 @@ namespace SqlSugar { throw ex; } - finally + finally { base.CloseDb(); } return await Task.FromResult(dt.Rows.Count); } - private void BulkCopy(DataTable dt, string copyString, NpgsqlConnection conn, List columns) + private void BulkCopy(DataTable dt, string copyString, NpgsqlConnection conn, List columns) { if (conn.State == ConnectionState.Closed) conn.Open(); @@ -75,9 +77,9 @@ namespace SqlSugar ColumnView result = new ColumnView(); result.DbColumnInfo = columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName)); result.DataColumn = item; - result.EntityColumnInfo=this.entityInfo.Columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName)); + result.EntityColumnInfo = this.entityInfo.Columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName)); var key = result.DbColumnInfo?.DataType?.ToLower(); - if (result.DbColumnInfo == null) + if (result.DbColumnInfo == null) { result.Type = null; } @@ -88,7 +90,7 @@ namespace SqlSugar else if (key?.First() == '_') { if (key == "_int4") - { + { result.Type = NpgsqlDbType.Array | NpgsqlDbType.Integer; } else if (key == "_int2") @@ -135,20 +137,20 @@ namespace SqlSugar { writer.Write(value); } - else + else { writer.Write(value, column.Type.Value); - } + } } } writer.Complete(); } } - + public override async Task UpdateByTempAsync(string tableName, string tempName, string[] updateColumns, string[] whereColumns) { - var sqlquerybulder= this.Context.Queryable().SqlBuilder; + var sqlquerybulder = this.Context.Queryable().SqlBuilder; Check.ArgumentNullException(!updateColumns.Any(), "update columns count is 0"); Check.ArgumentNullException(!whereColumns.Any(), "where columns count is 0"); var sets = string.Join(",", updateColumns.Select(it => $"{sqlquerybulder.GetTranslationColumnName(it)}=TE.{sqlquerybulder.GetTranslationColumnName(it)}")); @@ -156,7 +158,7 @@ namespace SqlSugar string sql = string.Format(UpdateSql, sets, tableName, tempName, wheres); return await this.Context.Ado.ExecuteCommandAsync(sql); } - public override async Task CreateTempAsync(DataTable dt) + public override async Task CreateTempAsync(DataTable dt) { await this.Context.Queryable().Where(it => false).AS(dt.TableName).Select(" * into temp mytemptable").ToListAsync(); dt.TableName = "mytemptable";