diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index 9a7c70200..59f93ef6d 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -101,7 +101,7 @@ namespace OrmTest.Demo var p11 = new SugarParameter("@p1", "1"); var p22 = new SugarParameter("@p2", null, true);//isOutput=true //4 - var dt2 = db.Ado.UseStoredProcedure().GetDataTable("sp_school",p11,p22); + var dt2 = db.Ado.UseStoredProcedure().SqlQuery("sp_school",p11,p22); } private static void Tran() { @@ -175,6 +175,7 @@ namespace OrmTest.Demo var t2 = db.Ado.GetInt("select 1"); var t3 = db.Ado.GetDataTable("select 1 as id"); db.Ado.CommitTran(); + var t11 = db.Ado.SqlQuery("select * from student"); //more //db.Ado.GetXXX... } diff --git a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index 604051072..d03f76b23 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -32,7 +32,8 @@ namespace SqlSugar public IDbTransaction Transaction { get; set; } public virtual SqlSugarClient Context { get; set; } internal CommandType OldCommandType { get; set; } - internal bool OldClearParameters{ get; set; } + internal bool OldClearParameters { get; set; } + public IDataParameterCollection DataReaderParameters { get; set; } public virtual IDbBind DbBind { get @@ -98,7 +99,7 @@ namespace SqlSugar } catch (Exception ex) { - Check.Exception(true,ErrorMessage.ConnnectionOpen, ex.Message); + Check.Exception(true, ErrorMessage.ConnnectionOpen, ex.Message); } } } @@ -218,6 +219,7 @@ namespace SqlSugar this.OldCommandType = this.CommandType; this.OldClearParameters = this.IsClearParameters; this.CommandType = CommandType.StoredProcedure; + this.IsClearParameters = false; return this; } #endregion @@ -238,12 +240,15 @@ namespace SqlSugar } public virtual IDataReader GetDataReader(string sql, params SugarParameter[] parameters) { + var isSp = this.CommandType == CommandType.StoredProcedure; if (this.ProcessingEventStartingSQL != null) ExecuteProcessingSQL(ref sql, parameters); ExecuteBefore(sql, parameters); IDbCommand sqlCommand = GetCommand(sql, parameters); var isAutoClose = this.Context.CurrentConnectionConfig.IsAutoCloseConnection && this.Transaction == null; IDataReader sqlDataReader = sqlCommand.ExecuteReader(isAutoClose ? CommandBehavior.CloseConnection : CommandBehavior.Default); + if (isSp) + DataReaderParameters = sqlCommand.Parameters; if (this.IsClearParameters) sqlCommand.Parameters.Clear(); ExecuteAfter(sql, parameters); @@ -389,12 +394,25 @@ namespace SqlSugar builder.SqlQueryBuilder.sql.Append(sql); if (parameters != null && parameters.Any()) builder.SqlQueryBuilder.Parameters.AddRange(parameters); + List result = null; using (var dataReader = this.GetDataReader(builder.SqlQueryBuilder.ToSqlString(), builder.SqlQueryBuilder.Parameters.ToArray())) { - var reval = this.DbBind.DataReaderToList(typeof(T), dataReader, builder.SqlQueryBuilder.Fields); + result = this.DbBind.DataReaderToList(typeof(T), dataReader, builder.SqlQueryBuilder.Fields); builder.SqlQueryBuilder.Clear(); - return reval; } + if (this.Context.Ado.DataReaderParameters != null) + { + foreach (IDataParameter item in this.Context.Ado.DataReaderParameters) + { + var parameter = parameters.FirstOrDefault(it => item.ParameterName.Substring(1) == it.ParameterName.Substring(1)); + if (parameter != null) + { + parameter.Value = item.Value; + } + } + this.Context.Ado.DataReaderParameters = null; + } + return result; } public virtual List SqlQuery(string sql, List parameters) { @@ -572,7 +590,8 @@ namespace SqlSugar } } } - if (this.OldCommandType != 0) { + if (this.OldCommandType != 0) + { this.CommandType = this.OldCommandType; this.IsClearParameters = this.OldClearParameters; this.OldCommandType = 0; diff --git a/Src/Asp.Net/SqlSugar/Interface/IAdo.cs b/Src/Asp.Net/SqlSugar/Interface/IAdo.cs index 4506bbdc5..d5c22b3fe 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IAdo.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IAdo.cs @@ -20,6 +20,7 @@ namespace SqlSugar void ExecuteBefore(string sql, SugarParameter[] pars); void ExecuteAfter(string sql, SugarParameter[] pars); + IDataParameterCollection DataReaderParameters { get; set; } CommandType CommandType { get; set; } bool IsEnableLogEvent { get; set; } Action LogEventStarting { get; set; } diff --git a/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs b/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs index ca8bb5e26..566ea823b 100644 --- a/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs +++ b/Src/Asp.Net/SqlSugar/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("4.5.1.4")] -[assembly: AssemblyFileVersion("4.5.1.4")] +[assembly: AssemblyVersion("4.5.1.5")] +[assembly: AssemblyFileVersion("4.5.1.5")]