/// <summary>
        /// 指定された <see cref="DbCommand"/> から <see cref="CommandLogEntry"/> のインスタンスを生成します。
        /// </summary>
        /// <param name="command">エントリーを作成する元となる <see cref="DbCommand"/> </param>
        /// <returns><see cref="DbCommand"/> から作成された <see cref="CommandLogEntry"/> のインスタンス</returns>
        public static CommandLogEntry Create(DbCommand command)
        {
            var entry = new CommandLogEntry();

            entry.DbCommand   = command;
            entry.CommandText = command.CommandText.Replace("\r\n", " ").Replace("\n", " ").Replace("\r", " ").Trim();

            var paramEntires = new List <CommandParameterLogEntry>();

            foreach (DbParameter param in command.Parameters)
            {
                var paramEntry = new CommandParameterLogEntry();
                paramEntry.Name       = param.ParameterName;
                paramEntry.Value      = param.Value == null || DBNull.Value == param.Value ? "[null]" : param.Value.ToString();
                paramEntry.DbType     = param.DbType.ToString();
                paramEntry.Direction  = param.Direction.ToString();
                paramEntry.IsNullable = param.IsNullable;
                paramEntry.Size       = param.Size;
                paramEntry.Precision  = ((IDbDataParameter)param).Precision;
                paramEntry.Scale      = ((IDbDataParameter)param).Scale;
                paramEntires.Add(paramEntry);
            }
            entry.Parameters = paramEntires;

            return(entry);
        }
Exemple #2
0
        /// <summary>
        /// 外部定義に設定されている監査ログ対象のテーブルへのクエリかをチェックし、対象の場合はエントリーを作成します。
        /// </summary>
        private void CreateLogEntryIfTarget(DbCommand command)
        {
            var entry = CommandLogEntry.Create(command);

            entry.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds;
            entry.ExecutedDateTime    = DateTimeOffset.Now;
            entries.Add(entry);
        }