예제 #1
0
        public static void CreateLogTableIfNotExists(DatabaseTarget dbTarget
                                                     , string strConnectionString)
        {
            StringBuilder              sb = new StringBuilder();
            InstallationContext        installationContext = new InstallationContext();
            SqlConnectionStringBuilder builder             = new SqlConnectionStringBuilder
            {
                ConnectionString = strConnectionString
            };
            string strDatabase = builder.InitialCatalog;

            sb.AppendLine("IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' " +
                          "AND  TABLE_NAME = 'ApplicationLogs')");
            sb.AppendLine("RETURN");
            sb.AppendLine("");
            sb.AppendLine("CREATE TABLE [dbo].[ApplicationLogs](");
            sb.AppendLine("[Id] [int] IDENTITY NOT NULL,");
            sb.AppendLine("[RegisteredDate] [DATETIME] NOT NULL,");
            sb.AppendLine("[Message] [nvarchar](max) NULL,");
            sb.AppendLine(" CONSTRAINT [PK_ApplicationLogs] PRIMARY KEY CLUSTERED ");
            sb.AppendLine("(");
            sb.AppendLine("[Id] ASC");
            sb.AppendLine(")WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON" +
                          ", ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]");
            sb.AppendLine(") ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]");

            DatabaseCommandInfo createTableCommand = new DatabaseCommandInfo
            {
                Text        = sb.ToString(),
                CommandType = System.Data.CommandType.Text
            };

            dbTarget.InstallDdlCommands.Add(createTableCommand);
            // we can now connect to the target DB
            dbTarget.InstallConnectionString = strConnectionString;
            // create the table if it does not exist
            dbTarget.Install(installationContext);
        }
예제 #2
0
파일: Logging.cs 프로젝트: zicar123/NLog
        private void Configure(string strConnectionString)
        {
            var sb = new StringBuilder();
            var installationContext = new InstallationContext();

            var builder = new SqlConnectionStringBuilder {
                ConnectionString = strConnectionString
            };
            var strDatabase = builder.InitialCatalog;

            var targetDb   = new DatabaseTarget();
            var targetFile = new FileTarget();


            //Target properties
            targetDb.Name             = "DriveDB";
            targetDb.ConnectionString = strConnectionString;

            targetFile.FileName     = "${specialfolder:folder=LocalApplicationData}/Logs/log ${shortdate}.log"; //  C:\Users\Zicar\AppData\Local\Logs
            targetFile.Layout       = "${longdate} | ${uppercase:${level}} | ${logger} | ${message} | ${exception:format=tostring}";
            targetFile.KeepFileOpen = false;
            targetFile.Encoding     = Encoding.UTF8;



            targetDb.Parameters.Add(new DatabaseParameterInfo {
                Name = "@Date", Layout = string.Format("${{longdate}}")
            });
            targetDb.Parameters.Add(new DatabaseParameterInfo {
                Name = "@Level", Layout = string.Format("${{level}}")
            });
            targetDb.Parameters.Add(new DatabaseParameterInfo {
                Name = "@Logger", Layout = string.Format("${{logger}}")
            });
            targetDb.Parameters.Add(new DatabaseParameterInfo {
                Name = "@Message", Layout = string.Format("${{message}}")
            });

            targetDb.CommandText = "INSERT INTO LogEntries(Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message);";

            //Config object
            var config = LogManager.Configuration ?? new LoggingConfiguration();

            config.AddTarget(targetDb.Name, targetDb);

            //Rules
            var dbRule = new LoggingRule("*", LogLevel.Debug, targetDb);

            config.LoggingRules.Add(dbRule);
            var fileRule = new LoggingRule("*", LogLevel.Debug, targetFile);

            config.LoggingRules.Add(fileRule);

            LogManager.Configuration = config;

            var builder2 = new SqlConnectionStringBuilder
            {
                ConnectionString = strConnectionString,
                InitialCatalog   = "master"
            };

            targetDb.InstallConnectionString = builder2.ConnectionString;

            sb.AppendLine(string.Format("IF NOT EXISTS (SELECT name FROM master.sys.databases WHERE name = N'{0}')", strDatabase));
            sb.AppendLine(string.Format("CREATE DATABASE {0}", strDatabase));

            var createDbCommand = new DatabaseCommandInfo
            {
                Text        = sb.ToString(),
                CommandType = System.Data.CommandType.Text
            };

            targetDb.InstallDdlCommands.Add(createDbCommand);

            // create the database if it does not exist
            targetDb.Install(installationContext);

            targetDb.InstallDdlCommands.Clear();
            sb.Clear();
            sb.AppendLine("IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND  TABLE_NAME = 'LogEntries')");
            sb.AppendLine("RETURN");
            sb.AppendLine("");
            sb.AppendLine("CREATE TABLE [dbo].[LogEntries](");
            sb.AppendLine("[LogId] [int] IDENTITY(1,1) NOT NULL,");
            sb.AppendLine("[Date] [nvarchar](max) NULL,");
            sb.AppendLine("[Level] [nvarchar](max) NULL,");
            sb.AppendLine("[Logger] [nvarchar](max) NULL,");
            sb.AppendLine("[Message] [nvarchar](max) NULL,");
            sb.AppendLine(" CONSTRAINT [PK_Logs] PRIMARY KEY CLUSTERED ");
            sb.AppendLine("(");
            sb.AppendLine("[LogId] ASC");
            sb.AppendLine(")WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]");
            sb.AppendLine(") ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]");

            var createTableCommand = new DatabaseCommandInfo
            {
                Text        = sb.ToString(),
                CommandType = System.Data.CommandType.Text
            };

            targetDb.InstallDdlCommands.Add(createTableCommand);

            targetDb.InstallConnectionString = strConnectionString;

            // create the table if it does not exist
            targetDb.Install(installationContext);
        }