From f0daf77b32eaca9e67ed90a01626891d4a06ca08 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 12 Jan 2019 03:30:41 +0800 Subject: [PATCH] Support array parameters --- Src/Asp.Net/OracleTest/Demos/1_Query.cs | 3 ++ Src/Asp.Net/SqlServerTest/Demos/1_Query.cs | 3 ++ Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs | 2 +- .../Abstract/AdoProvider/AdoProvider.cs | 36 +++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/Src/Asp.Net/OracleTest/Demos/1_Query.cs b/Src/Asp.Net/OracleTest/Demos/1_Query.cs index 5a47ca7cc..e627c95fd 100644 --- a/Src/Asp.Net/OracleTest/Demos/1_Query.cs +++ b/Src/Asp.Net/OracleTest/Demos/1_Query.cs @@ -197,6 +197,9 @@ namespace OrmTest.Demo var t2 = db.Ado.GetInt("select 1 from dual"); var t3 = db.Ado.GetDataTable("select 1 as id from dual"); var sqlPage = db.SqlQueryable("select * from student").ToPageList(1, 2); + var t4 = db.Ado.GetScalar("select * from student where id in (@id) ", new { id = new List() { 1, 2, 3 } }); + var t5 = db.Ado.GetScalar("select * from student where id in (@id) ", new { id = new int[] { 1, 2, 3 } }); + var t6 = db.Ado.GetScalar("select * from student where id in (@id) ", new SugarParameter("@id", new int[] { 1, 2, 3 })); db.Ado.CommitTran(); //more //db.Ado.GetXXX... diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index 49fa3a824..abc5e39b9 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -310,6 +310,9 @@ namespace OrmTest.Demo var t1 = db.Ado.SqlQuery("select 'a'"); var t2 = db.Ado.GetInt("select 1"); var t3 = db.Ado.GetDataTable("select 1 as id"); + var t4 = db.Ado.GetScalar("select * from student where id in (@id) ", new { id = new List() { 1, 2, 3 } }); + var t5 = db.Ado.GetScalar("select * from student where id in (@id) ", new { id = new int [] { 1, 2, 3 } }); + var t6= db.Ado.GetScalar("select * from student where id in (@id) ", new SugarParameter("@id", new int[] { 1, 2, 3 })); db.Ado.CommitTran(); var t11 = db.Ado.SqlQuery("select * from student"); //more diff --git a/Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs b/Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs index 4bcab57e8..52d9b9ac6 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs @@ -48,7 +48,7 @@ namespace OrmTest.Demo //Insert List var insertObjs = new List(); - for (int i = 0; i < 1000; i++) + for (int i = 0; i < 10; i++) { insertObjs.Add(new Student() { Name = "name" + i }); } diff --git a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index cbd2aa738..d931e292d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; @@ -284,6 +285,7 @@ namespace SqlSugar { try { + InitParameters(ref sql, parameters); if (FormatSql != null) sql = FormatSql(sql); SetConnectionStart(sql); @@ -313,6 +315,7 @@ namespace SqlSugar { try { + InitParameters(ref sql, parameters); if (FormatSql != null) sql = FormatSql(sql); SetConnectionStart(sql); @@ -341,6 +344,7 @@ namespace SqlSugar { try { + InitParameters(ref sql, parameters); if (FormatSql != null) sql = FormatSql(sql); SetConnectionStart(sql); @@ -373,6 +377,7 @@ namespace SqlSugar { try { + InitParameters(ref sql,parameters); if (FormatSql != null) sql = FormatSql(sql); SetConnectionStart(sql); @@ -791,6 +796,37 @@ namespace SqlSugar { ErrorEvent(new SqlSugarException(this.Context,ex, sql, parameters)); } + private void InitParameters(ref string sql, SugarParameter[] parameters) + { + if (parameters.HasValue()) + { + foreach (var item in parameters) + { + if (item.Value != null) + { + var type = item.Value.GetType(); + if ((type != UtilConstants.ByteArrayType && type.IsArray) || type.FullName.IsCollectionsList()) + { + var newValues = new List(); + foreach (var inValute in item.Value as IEnumerable) + { + newValues.Add(inValute.ObjToString()); + } + if (newValues.IsNullOrEmpty()) + { + newValues.Add("-1"); + } + if (item.ParameterName.Substring(0, 1) == ":") + { + sql = sql.Replace("@"+item.ParameterName.Substring(1), newValues.ToArray().ToJoinSqlInVals()); + } + sql = sql.Replace(item.ParameterName, newValues.ToArray().ToJoinSqlInVals()); + item.Value = DBNull.Value; + } + } + } + } + } #endregion } }