//TODO:: Figure out whether we want to log these, minimally to the debug output or if we want throw a hard exception
 internal static void SubmitResult(ProfilerItem sqlProfileItem)
 {
     if (!ConfigurationSettings.ProcessResultsSynchronously)
     {
         Task.Factory.StartNew(() =>
         {
             try { ProcessResult(sqlProfileItem); }
             catch { }
         });
     }
     else
     {
         try { ProcessResult(sqlProfileItem); }
         catch { }
     }
 }
        public override int ExecuteNonQuery()
        {
            if (!Profiler.IsProfilingEnabled)
                return _cmd.ExecuteNonQuery();

            ProfilerItem sqlTiming = null;
            try
            {
                sqlTiming = new ProfilerItem(this, ExecuteType.NonQuery);
                var result = _cmd.ExecuteNonQuery();
                return result;
            }
            finally
            {
                if (sqlTiming != null)
                    sqlTiming.ExecutionComplete();
            }
        }
        public override object ExecuteScalar()
        {
            if (!Profiler.IsProfilingEnabled)
                return _cmd.ExecuteScalar();

            ProfilerItem sqlTiming = null;
            try
            {
                sqlTiming = new ProfilerItem(this, ExecuteType.Scalar);
                return _cmd.ExecuteScalar();
            }
            finally
            {
                if (sqlTiming != null)
                    sqlTiming.ExecutionComplete();
            }
        }
        protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior)
        {
            if (!Profiler.IsProfilingEnabled)
                return _cmd.ExecuteReader(behavior);

            ProfilerItem sqlTiming = null;
            try
            {
                sqlTiming = new ProfilerItem(this, ExecuteType.Reader);
                var result = _cmd.ExecuteReader(behavior);
                return new ProfilableDbDataReader(result, _conn, sqlTiming);
            }
            finally
            {
                if (sqlTiming != null)
                    sqlTiming.FirstFetchComplete();
            }            
        }