diff --git a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index e1fbdf58f..081163d60 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -444,6 +444,132 @@ namespace SqlSugar } #endregion + #region Core Async + public virtual async Task ExecuteCommandAsync(string sql, params SugarParameter[] parameters) + { + try + { + InitParameters(ref sql, parameters); + if (FormatSql != null) + sql = FormatSql(sql); + SetConnectionStart(sql); + if (this.ProcessingEventStartingSQL != null) + ExecuteProcessingSQL(ref sql, parameters); + ExecuteBefore(sql, parameters); + var sqlCommand = GetCommand(sql, parameters); + int count =await sqlCommand.ExecuteNonQueryAsync(); + if (this.IsClearParameters) + sqlCommand.Parameters.Clear(); + ExecuteAfter(sql, parameters); + return count; + } + catch (Exception ex) + { + CommandType = CommandType.Text; + if (ErrorEvent != null) + ExecuteErrorEvent(sql, parameters, ex); + throw ex; + } + finally + { + if (this.IsAutoClose()) this.Close(); + SetConnectionEnd(sql); + } + } + public virtual async Task GetDataReaderAsync(string sql, params SugarParameter[] parameters) + { + try + { + InitParameters(ref sql, parameters); + if (FormatSql != null) + sql = FormatSql(sql); + SetConnectionStart(sql); + var isSp = this.CommandType == CommandType.StoredProcedure; + if (this.ProcessingEventStartingSQL != null) + ExecuteProcessingSQL(ref sql, parameters); + ExecuteBefore(sql, parameters); + var sqlCommand = GetCommand(sql, parameters); + var sqlDataReader =await sqlCommand.ExecuteReaderAsync(this.IsAutoClose() ? CommandBehavior.CloseConnection : CommandBehavior.Default); + if (isSp) + DataReaderParameters = sqlCommand.Parameters; + if (this.IsClearParameters) + sqlCommand.Parameters.Clear(); + ExecuteAfter(sql, parameters); + SetConnectionEnd(sql); + return sqlDataReader; + } + catch (Exception ex) + { + CommandType = CommandType.Text; + if (ErrorEvent != null) + ExecuteErrorEvent(sql, parameters, ex); + throw ex; + } + } + public virtual async Task GetDataReaderNoCloseAsync(string sql, params SugarParameter[] parameters) + { + try + { + InitParameters(ref sql, parameters); + if (FormatSql != null) + sql = FormatSql(sql); + SetConnectionStart(sql); + var isSp = this.CommandType == CommandType.StoredProcedure; + if (this.ProcessingEventStartingSQL != null) + ExecuteProcessingSQL(ref sql, parameters); + ExecuteBefore(sql, parameters); + var sqlCommand = GetCommand(sql, parameters); + var sqlDataReader = await sqlCommand.ExecuteReaderAsync(); + if (isSp) + DataReaderParameters = sqlCommand.Parameters; + if (this.IsClearParameters) + sqlCommand.Parameters.Clear(); + ExecuteAfter(sql, parameters); + SetConnectionEnd(sql); + return sqlDataReader; + } + catch (Exception ex) + { + CommandType = CommandType.Text; + if (ErrorEvent != null) + ExecuteErrorEvent(sql, parameters, ex); + throw ex; + } + } + public virtual async Task GetScalarAsync(string sql, params SugarParameter[] parameters) + { + try + { + InitParameters(ref sql, parameters); + if (FormatSql != null) + sql = FormatSql(sql); + SetConnectionStart(sql); + if (this.ProcessingEventStartingSQL != null) + ExecuteProcessingSQL(ref sql, parameters); + ExecuteBefore(sql, parameters); + var sqlCommand = GetCommand(sql, parameters); + var scalar =await sqlCommand.ExecuteScalarAsync(); + //scalar = (scalar == null ? 0 : scalar); + if (this.IsClearParameters) + sqlCommand.Parameters.Clear(); + ExecuteAfter(sql, parameters); + return scalar; + } + catch (Exception ex) + { + CommandType = CommandType.Text; + if (ErrorEvent != null) + ExecuteErrorEvent(sql, parameters, ex); + throw ex; + } + finally + { + if (this.IsAutoClose()) this.Close(); + SetConnectionEnd(sql); + } + } + #endregion + #region Methods public virtual string GetString(string sql, object parameters) diff --git a/Src/Asp.Net/SqlSugar/Interface/IAdo.cs b/Src/Asp.Net/SqlSugar/Interface/IAdo.cs index 250fb89a2..e3c91b7e9 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IAdo.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IAdo.cs @@ -33,6 +33,10 @@ namespace SqlSugar void SetCommandToAdapter(IDataAdapter adapter, DbCommand command); IDataAdapter GetAdapter(); DbCommand GetCommand(string sql, SugarParameter[] parameters); + Task ExecuteCommandAsync(string sql, params SugarParameter[] parameters); + Task GetDataReaderAsync(string sql, params SugarParameter[] parameters); + Task GetDataReaderNoCloseAsync(string sql, params SugarParameter[] parameters); + Task GetScalarAsync(string sql, params SugarParameter[] parameters); DataTable GetDataTable(string sql, object parameters); DataTable GetDataTable(string sql, params SugarParameter[] parameters); DataTable GetDataTable(string sql, List parameters);