From 4886d1513083d6f2ee83ed5be9a2e3c90e7cbcfb Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 19 May 2019 22:37:16 +0800 Subject: [PATCH] - --- Src/Asp.Net/SqlServerTest/Program.cs | 2 +- .../SugarProvider/SqlSugarProvider.cs | 68 ++++++++++++++++--- 2 files changed, 61 insertions(+), 9 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/Program.cs b/Src/Asp.Net/SqlServerTest/Program.cs index 8e49237c7..3109e1669 100644 --- a/Src/Asp.Net/SqlServerTest/Program.cs +++ b/Src/Asp.Net/SqlServerTest/Program.cs @@ -8,7 +8,7 @@ namespace OrmTest { static void Main(string[] args) { - //OldTestMain.Init(); + OldTestMain.Init(); //Demo Demo1_SqlSugarClient.Init(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index 60811492d..ba6a13695 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -796,7 +796,7 @@ namespace SqlSugar public async Task SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProvider(isTran, async(sql, parameters) => { return await this.Ado.ExecuteCommandAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.ExecuteCommandAsync(sql, parameters); }); } public List SaveQueues(bool isTran = true) { @@ -804,7 +804,7 @@ namespace SqlSugar } public async Task> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProvider(isTran,async (sql, parameters) => { return await this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List> SaveQueues(bool isTran = true) { @@ -812,7 +812,7 @@ namespace SqlSugar } public async Task, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProvider(isTran,async (sql, parameters) => { return await this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List> SaveQueues(bool isTran = true) { @@ -820,7 +820,7 @@ namespace SqlSugar } public async Task, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProvider(isTran, async(sql, parameters) => { return await this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List, List> SaveQueues(bool isTran = true) { @@ -828,7 +828,7 @@ namespace SqlSugar } public async Task, List, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProvider(isTran,async (sql, parameters) => { return await this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List, List, List> SaveQueues(bool isTran = true) { @@ -836,7 +836,7 @@ namespace SqlSugar } public async Task, List, List, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProvider(isTran,async (sql, parameters) => { return await this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List, List, List, List> SaveQueues(bool isTran = true) { @@ -844,7 +844,7 @@ namespace SqlSugar } public async Task, List, List, List, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProvider(isTran,async (sql, parameters) => { return await this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List, List, List, List, List> SaveQueues(bool isTran = true) { @@ -852,7 +852,7 @@ namespace SqlSugar } public async Task, List, List, List, List, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProvider(isTran,async (sql, parameters) => { return await this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public void AddQueue(string sql, object parsmeters=null) { @@ -880,6 +880,58 @@ namespace SqlSugar } public QueueList Queues { get { if (_Queues == null) { _Queues = new QueueList(); } return _Queues; } set => _Queues = value; } + + + private async Task SaveQueuesProviderAsync(bool isTran, Func, Task> func) + { + try + { + if (this.CurrentConnectionConfig.DbType == DbType.Oracle) + { + throw new Exception("Oracle no support SaveQueues"); + } + if (this.Queues == null || this.Queues.Count == 0) return default(T); + isTran = isTran && this.Ado.Transaction == null; + if (isTran) this.Ado.BeginTran(); + StringBuilder sqlBuilder = new StringBuilder(); + var parsmeters = new List(); + var index = 1; + if (this.Queues.HasValue()) + { + foreach (var item in Queues) + { + if (item.Sql == null) + item.Sql = string.Empty; + if (item.Parameters == null) + item.Parameters = new SugarParameter[] { }; + var itemParsmeters = item.Parameters.OrderByDescending(it => it.ParameterName.Length).ToList(); + List addParameters = new List(); + var itemSql = item.Sql; + foreach (var itemParameter in itemParsmeters) + { + var newName = itemParameter.ParameterName + "_q_" + index; + SugarParameter parameter = new SugarParameter(newName, itemParameter.Value); + parameter.DbType = itemParameter.DbType; + itemSql = UtilMethods.ReplaceSqlParameter(itemSql, itemParameter, newName); + addParameters.Add(parameter); + } + parsmeters.AddRange(addParameters); + itemSql = itemSql.TrimEnd(';') + ";"; + sqlBuilder.AppendLine(itemSql); + index++; + } + } + this.Queues.Clear(); + var result =await func(sqlBuilder.ToString(), parsmeters); + if (isTran) this.Ado.CommitTran(); + return result; + } + catch (Exception ex) + { + if (isTran) this.Ado.RollbackTran(); + throw ex; + } + } private T SaveQueuesProvider(bool isTran, Func, T> func) { try