diff --git a/Src/Asp.Net/OracleTest/Demos/2_Update.cs b/Src/Asp.Net/OracleTest/Demos/2_Update.cs index 7397925f4..a3fcfa3cd 100644 --- a/Src/Asp.Net/OracleTest/Demos/2_Update.cs +++ b/Src/Asp.Net/OracleTest/Demos/2_Update.cs @@ -58,6 +58,8 @@ namespace OrmTest.Demo //Column is null no update db.Updateable(updateObj).Where(true).ExecuteCommand(); + + db.Updateable(new Student[] { new Student() { Id=2, Name="a2" }, new Student() { Id = 1, Name = "a1" } }).ExecuteCommand(); } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 61bba6810..ec23eeb22 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -25,7 +25,7 @@ namespace SqlSugar private bool IsOffIdentity { get; set; } public MappingTableList OldMappingTableList { get; set; } public bool IsAs { get; set; } - public int ExecuteCommand() + public virtual int ExecuteCommand() { PreToSql(); Check.Exception(UpdateBuilder.WhereValues.IsNullOrEmpty() && GetPrimaryKeys().IsNullOrEmpty(), "You cannot have no primary key and no conditions"); diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs index 242d87074..f1e2aeb8e 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs @@ -10,8 +10,32 @@ namespace SqlSugar { protected override string TomultipleSqlString(List> groupList) { - throw new NotSupportedException("Oracle Waiting for updates updateable(List)"); + StringBuilder sb = new StringBuilder(); + sb.AppendLine("Begin"); + sb.AppendLine(string.Join("\r\n", groupList.Select(t => + { + var updateTable = string.Format("UPDATE {0} SET", base.GetTableNameStringNoWith); + var setValues = string.Join(",", t.Where(s => !s.IsPrimarykey).Select(m => GetOracleUpdateColums(m)).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 = isFirst ? " " : " AND "; + whereString += GetOracleUpdateColums(item); + whereList.Add(whereString); + } + return string.Format("{0} {1} WHERE {2};", updateTable, setValues, string.Join("AND",whereList)); + }).ToArray())); + sb.AppendLine("End;"); + return sb.ToString(); } + + private string GetOracleUpdateColums(DbColumnInfo m) + { + return string.Format("\"{0}\"={1}", m.DbColumnName.ToUpper(), FormatValue(m.Value)); + } + public override object FormatValue(object value) { if (value == null) diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs index 1bbf8cf25..60b34b553 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs @@ -11,5 +11,10 @@ namespace SqlSugar { return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).Select(it => it.DbColumnName).ToList(); } + public override int ExecuteCommand() + { + base.ExecuteCommand(); + return base.UpdateObjs.Count(); + } } }