/// <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); }
/// <summary> /// 外部定義に設定されている監査ログ対象のテーブルへのクエリかをチェックし、対象の場合はエントリーを作成します。 /// </summary> private void CreateLogEntryIfTarget(DbCommand command) { var entry = CommandLogEntry.Create(command); entry.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds; entry.ExecutedDateTime = DateTimeOffset.Now; entries.Add(entry); }