public const string AuditScriptTemplate = "@using System.Data\r\n@using System.Data.Common\r\n@using System.Data.OleDb\r\n@using System.Data.Odbc\r\n\r\n@{\r\n Audit audit = Model;\r\n var auditSource = Repository.Instance.Sources.FirstOrDefault(i => i.Name.StartsWith("Audit")); \r\n if (auditSource != null) {\r\n var helper = new TaskDatabaseHelper();\r\n var connection = auditSource.Connection.GetOpenConnection();\r\n try {\r\n var command = helper.GetDbCommand(connection);\r\n\r\n //Create audit table if necessary\r\n checkTableCreation(command);\r\n command.CommandText = @"insert into sr_audit(event_date,event_type,event_path,event_detail,event_error,user_name,user_groups,user_session,execution_name,execution_context,execution_view,execution_duration,output_type,output_name,output_information,schedule_name)";\r\n if (command is OleDbCommand || command is OdbcCommand) {\r\n command.CommandText += " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";\r\n }\r\n else {\r\n command.CommandText += " values(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15,@p16)";\r\n }\r\n \r\n var date = DateTime.Now;\r\n date = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second);\r\n int index=1;\r\n addParameter(command, index++, DbType.DateTime, date); //event_date,\r\n addParameter(command, index++, DbType.AnsiString, audit.Type.ToString()); //event_type,\r\n addParameter(command, index++, DbType.AnsiString, audit.Path); //event_path,\r\n addParameter(command, index++, DbType.AnsiString, audit.Detail); //event_detail,\r\n addParameter(command, index++, DbType.AnsiString, audit.Error); //event_error,\r\n addParameter(command, index++, DbType.AnsiString, audit.User != null ? audit.User.Name : null); //user_name,\r\n addParameter(command, index++, DbType.AnsiString, audit.User != null ? audit.User.SecurityGroupsDisplay : null); //user_groups,\r\n addParameter(command, index++, DbType.AnsiString, audit.User != null ? audit.User.SessionID : null); //user_session,\r\n addParameter(command, index++, DbType.AnsiString, audit.Report != null ? audit.Report.ExecutionName : null); //execution_name,\r\n addParameter(command, index++, DbType.AnsiString, audit.Report != null ? audit.Report.ExecutionContext.ToString() : null); //execution_context,\r\n addParameter(command, index++, DbType.AnsiString, audit.Report != null ? audit.Report.ExecutionView.Name : null); //execution_view,\r\n addParameter(command, index++, DbType.Int32, audit.Report != null ? Convert.ToInt32(audit.Report.ExecutionFullDuration.TotalSeconds) : (object) DBNull.Value); //execution_duration,\r\n addParameter(command, index++, DbType.AnsiString, audit.Report != null && audit.Report.OutputToExecute != null ? audit.Report.OutputToExecute.DeviceName : null); //output_type,\r\n addParameter(command, index++, DbType.AnsiString, audit.Report != null && audit.Report.OutputToExecute != null ? audit.Report.OutputToExecute.Name : null);//output_name,\r\n addParameter(command, index++, DbType.AnsiString, audit.Report != null && audit.Report.OutputToExecute != null ? audit.Report.OutputToExecute.Information : null);//output_information,\r\n addParameter(command, index++, DbType.AnsiString, audit.Schedule != null ? audit.Schedule.Name : null);//schedule_name\r\n command.ExecuteNonQuery();\r\n }\r\n finally {\r\n connection.Close();\r\n }\r\n }\r\n\r\n}\r\n\r\n@functions {\r\n void checkTableCreation(DbCommand command)\r\n {\r\n if (Audit.CheckTableCreation)\r\n {\r\n //Check table creation\r\n Audit.CheckTableCreation = false;\r\n try\r\n {\r\n command.CommandText = "select 1 from sr_audit where 1=0";\r\n command.ExecuteNonQuery();\r\n }\r\n catch\r\n {\r\n //Create the table (to be adapted for your database type, e.g. ident identity(1,1), execution_error varchar(max) for SQLServer)\r\n command.CommandText = @"create table sr_audit (\r\n event_date datetime,event_type varchar(255),event_path varchar(255),event_detail varchar(255),event_error varchar(255),user_name varchar(255),user_groups varchar(255),user_session varchar(255),execution_name varchar(255),execution_context varchar(255),execution_view varchar(255),execution_status varchar(255),execution_duration int null,execution_locale varchar(255),execution_error varchar(255),output_type varchar(255),output_name varchar(255),output_information varchar(255),schedule_name varchar(255)\r\n )";\r\n command.ExecuteNonQuery();\r\n }\r\n }\r\n }\r\n\r\n void addParameter(DbCommand command, int index, DbType type, Object value)\r\n {\r\n var parameter = command.CreateParameter();\r\n parameter.ParameterName = "@p" + index.ToString();\r\n parameter.DbType = type;\r\n if (value == null) value = (object) DBNull.Value;\r\n\r\n if (value is string && ((string)value).Length >= 255) parameter.Value = ((string)value).Substring(0, 254);\r\n else parameter.Value = value;\r\n command.Parameters.Add(parameter);\r\n }\r\n}\r\n"