AdoNetAppender: split database command preparation from executing the database command (LOG4NET-538)
This patch changes the behavior to first clear and add all database command parameters. Then the database command is prepared. After that the database command parameter values are updated and the database command is executed for each log event. Project: http://git-wip-us.apache.org/repos/asf/logging-log4net/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4net/commit/067f34c2 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4net/tree/067f34c2 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4net/diff/067f34c2 Branch: refs/heads/feature/cd-pipeline Commit: 067f34c2ddeb3648f5b796b77d1ba1ab88fb4cb5 Parents: 538fc98 Author: Dominik Psenner <dpsen...@apache.org> Authored: Fri Sep 1 09:05:14 2017 +0200 Committer: Dominik Psenner <dpsen...@apache.org> Committed: Fri Sep 1 09:05:14 2017 +0200 ---------------------------------------------------------------------- src/Appender/AdoNetAppender.cs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/067f34c2/src/Appender/AdoNetAppender.cs ---------------------------------------------------------------------- diff --git a/src/Appender/AdoNetAppender.cs b/src/Appender/AdoNetAppender.cs index 811e28e..46e7d98 100644 --- a/src/Appender/AdoNetAppender.cs +++ b/src/Appender/AdoNetAppender.cs @@ -545,28 +545,33 @@ namespace log4net.Appender // Set the command type dbCmd.CommandType = CommandType; - + // Send buffer using the prepared command object if (dbTran != null) { dbCmd.Transaction = dbTran; } + // clear parameters that have been set + dbCmd.Parameters.Clear(); + + // Add the query parameters + foreach (AdoNetAppenderParameter param in m_parameters) + { + param.Prepare(dbCmd); + } + + // prepare the command, which is significantly faster + dbCmd.Prepare(); + // run for all events foreach (LoggingEvent e in events) { - // clear parameters that have been set - dbCmd.Parameters.Clear(); - // Set the parameter values foreach (AdoNetAppenderParameter param in m_parameters) { - param.Prepare(dbCmd); param.FormatValue(dbCmd, e); } - - // prepare the command, which is significantly faster - dbCmd.Prepare(); // Execute the query dbCmd.ExecuteNonQuery();