From 50cb8cede6e8a0e227ca5144f16d8b85ed3e0438 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Tue, 30 Aug 2022 21:38:09 +0800 Subject: [PATCH] Update Access --- .../SqlSugar.Access/Access/AccessProvider.cs | 9 +- .../Access/SqlBuilder/AccessInsertBuilder.cs | 1 - .../Access/SqlBuilder/AccessUpdateBuilder.cs | 95 +++++++++++++++++-- 3 files changed, 94 insertions(+), 11 deletions(-) diff --git a/Src/Asp.Net/SqlSugar.Access/Access/AccessProvider.cs b/Src/Asp.Net/SqlSugar.Access/Access/AccessProvider.cs index 30ee73ae1..6ef87df39 100644 --- a/Src/Asp.Net/SqlSugar.Access/Access/AccessProvider.cs +++ b/Src/Asp.Net/SqlSugar.Access/Access/AccessProvider.cs @@ -137,7 +137,14 @@ namespace SqlSugar.Access } else { - return base.ExecuteCommand(sql, parameters); + if (sql.TrimStart('\r').TrimStart('\n') != "") + { + return base.ExecuteCommand(sql, parameters); + } + else + { + return 0; + } } } public override async Task ExecuteCommandAsync(string sql, SugarParameter[] parameters) diff --git a/Src/Asp.Net/SqlSugar.Access/Access/SqlBuilder/AccessInsertBuilder.cs b/Src/Asp.Net/SqlSugar.Access/Access/SqlBuilder/AccessInsertBuilder.cs index 3e5c8ee2d..e5db0f446 100644 --- a/Src/Asp.Net/SqlSugar.Access/Access/SqlBuilder/AccessInsertBuilder.cs +++ b/Src/Asp.Net/SqlSugar.Access/Access/SqlBuilder/AccessInsertBuilder.cs @@ -138,7 +138,6 @@ namespace SqlSugar.Access } return "'" + date.ToString("yyyy-MM-dd HH:mm") + "'"; } - private object GetDateTimeString(object value) { var date = value.ObjToDate(); diff --git a/Src/Asp.Net/SqlSugar.Access/Access/SqlBuilder/AccessUpdateBuilder.cs b/Src/Asp.Net/SqlSugar.Access/Access/SqlBuilder/AccessUpdateBuilder.cs index 84dcd97a8..541632b02 100644 --- a/Src/Asp.Net/SqlSugar.Access/Access/SqlBuilder/AccessUpdateBuilder.cs +++ b/Src/Asp.Net/SqlSugar.Access/Access/SqlBuilder/AccessUpdateBuilder.cs @@ -10,19 +10,96 @@ namespace SqlSugar.Access { protected override string TomultipleSqlString(List> groupList) { - if (groupList.Count == 0) + StringBuilder sb = new StringBuilder(); + int i = 0; + sb.AppendLine(string.Join("", groupList.Select(t => { - return null; + var updateTable = string.Format("UPDATE {0} SET", base.GetTableNameStringNoWith); + var setValues = string.Join(",", t.Where(s => !s.IsPrimarykey).Select(m => GetOracleUpdateColums(i, m, false)).ToArray()); + var pkList = t.Where(s => s.IsPrimarykey).ToList(); + List whereList = new List(); + foreach (var item in pkList) + { + var isFirst = pkList.First() == item; + var whereString = ""; + whereString += GetOracleUpdateColums(i, item, true); + whereList.Add(whereString); + } + i++; + return string.Format("{0} {1} WHERE {2}", updateTable, setValues, string.Join(" AND", whereList)) + UtilConstants.ReplaceCommaKey; + }).ToArray())); + return sb.ToString(); + } + private string GetOracleUpdateColums(int i, DbColumnInfo m, bool iswhere) + { + return string.Format("{0}={1}", m.DbColumnName , FormatValue(m.Value)); + } + + public override object FormatValue(object value) + { + var n = ""; + if (value == null) + { + return "NULL"; } - else if (groupList.GroupBy(it => it.Key).Count() > 1) + else { - throw new Exception("access no support batch update"); - } - else - { - return ToSingleSqlString(groupList); + var type = UtilMethods.GetUnderType(value.GetType()); + if (type == UtilConstants.DateType) + { + return GetDateTimeString(value); + } + else if (value is DateTimeOffset) + { + return GetDateTimeOffsetString(value); + } + else if (type == UtilConstants.ByteArrayType) + { + string bytesString = "0x" + BitConverter.ToString((byte[])value).Replace("-", ""); + return bytesString; + } + else if (type.IsEnum()) + { + if (this.Context.CurrentConnectionConfig.MoreSettings?.TableEnumIsString == true) + { + return value.ToSqlValue(); ; + } + else + { + return Convert.ToInt64(value); + } + } + else if (SqlSugar.UtilMethods.IsNumber(type.Name)) + { + return value; + } + else if (type == UtilConstants.BoolType) + { + return value.ObjToBool() ? "1" : "0"; + } + else + { + return n + "'" + value + "'"; + } } } - + private object GetDateTimeOffsetString(object value) + { + var date = UtilMethods.ConvertFromDateTimeOffset((DateTimeOffset)value); + if (date == DateTime.MinValue) + { + date = Convert.ToDateTime("1900-01-01"); + } + return "'" + date.ToString("yyyy-MM-dd HH:mm") + "'"; + } + private object GetDateTimeString(object value) + { + var date = value.ObjToDate(); + if (date == DateTime.MinValue) + { + date = Convert.ToDateTime("1900-01-01"); + } + return "'" + date.ToString("yyyy-MM-dd HH:mm") + "'"; + } } }