void FillDbCommandParams(ChloeDbCommandEventData eventData, IDbCommand command)
        {
            foreach (IDbDataParameter item in command.Parameters)
            {
                DbCommandParam p = new DbCommandParam();
                p.Name   = item.ParameterName;
                p.Value  = item.Value == DBNull.Value ? null : item.Value;
                p.DbType = item.DbType;

                eventData.Parameters.Add(p);
            }
        }
        public void ScalarExecuting(IDbCommand command, DbCommandInterceptionContext <object> interceptionContext)
        {
            interceptionContext.DataBag.Add("startTime", DateTime.Now);
            if (_diagnosticListener.IsEnabled(ChloeDiagnosticListenerNames.ScalarExecuting))
            {
                var eventData = new ChloeDbCommandEventData()
                {
                    CommandText = command.CommandText,
                    ElapsedTime = null,
                    Exception   = null
                };

                this.FillDbCommandParams(eventData, command);

                _diagnosticListener.Write(ChloeDiagnosticListenerNames.ScalarExecuting, eventData);
            }
        }
        public void NonQueryExecuted(IDbCommand command, DbCommandInterceptionContext <int> interceptionContext)
        {
            if (_diagnosticListener.IsEnabled(ChloeDiagnosticListenerNames.NonQueryExecuted))
            {
                DateTime startTime = (DateTime)(interceptionContext.DataBag["startTime"]);
                var      eventData = new ChloeDbCommandEventData()
                {
                    CommandText = command.CommandText,
                    ElapsedTime = (long)DateTime.Now.Subtract(startTime).TotalMilliseconds,
                    Exception   = interceptionContext.Exception
                };

                this.FillDbCommandParams(eventData, command);

                _diagnosticListener.Write(ChloeDiagnosticListenerNames.NonQueryExecuted, eventData);
            }
        }