Пример #1
0
        public static IDbConnection Create(Connection cn)
        {
            IDbConnection output;

            switch (cn.Provider)
            {
            case "sqlserver":
                output = new SqlServerConnectionFactory(cn).GetConnection();
                break;

            case "mysql":
                output = new MySqlConnectionFactory(cn).GetConnection();
                break;

            case "postgresql":
                output = new PostgreSqlConnectionFactory(cn).GetConnection();
                break;

            case "sqlite":
                output = new SqLiteConnectionFactory(cn).GetConnection();
                break;

            case "sqlce":
                output = new SqlCeConnectionFactory(cn).GetConnection();
                break;

            default:
                throw new DataException($"Provider {cn.Provider} is not supported!");
            }
            output.Open();
            return(output);
        }
Пример #2
0
        /// <summary>
        /// Attempts to perform a backup, silently fails and logs exception if something
        /// went wrong.
        /// </summary>
        private void Backup()
        {
            try
            {
                // compute the earliest non-existing filename like "backup_20131017_14_1.sqlite", for the 2nd backup past 14:00 on October 17th.
                var destName = String.Format("{0:yyyyMMdd_HH}", DateTime.Now);
                var filename = "";
                int count = 0;
                do
                {
                    filename = String.Format("db\\backup\\{0}_{1}.sqlite", destName, count);
                    count++;
                } while(File.Exists(filename));

                var destFactory = new SqLiteConnectionFactory
                {
                    ConnectionString = filename,
                };

                using (var dest = (OrmLiteConnection)destFactory.Connect())
                {
                    var destSqlite = (SQLiteConnection)dest.DbConnection;
                    using (var source = (OrmLiteConnection)factory.Connect())
                    {
                        var sourceSqlite = (SQLiteConnection)source.DbConnection;
                        sourceSqlite.BackupDatabase(destSqlite, "main", "main", -1, null, 1000);
                    }
                }
            }
            catch (Exception e)
            {
                logger.ErrorException("Could not backup database", e);
            }
        }
Пример #3
0
        /// <summary>
        /// Schedule the database that `factory` points to for backup every `period` amount of time.
        /// Dispose this object to stop backupping.
        /// </summary>
        public BackupDaemon(SqLiteConnectionFactory factory, TimeSpan period)
        {
            this.factory = factory;
            this.period = period;

            // start loop task and forget about it
            var task = Loop();
        }
Пример #4
0
 public AuctionServiceOptions(IConfiguration configuration)
 {
     ConnectionString  = configuration.GetConnectionString("auctionsDB");
     ConnectionFactory = new SqLiteConnectionFactory();
 }
        public void SqlLite_Integration()
        {
            var builder = new ContainerBuilder();

            builder.RegisterModule(new RootModule(@"Files\Shorthand.xml"));
            var container = builder.Build();

            // CORRECT DATA AND INITIAL LOAD
            using (var cn = new SqlServerConnectionFactory(InputConnection).GetConnection()) {
                cn.Open();
                Assert.AreEqual(2, cn.Execute(@"
                    UPDATE [Order Details] SET UnitPrice = 14.40, Quantity = 42 WHERE OrderId = 10253 AND ProductId = 39;
                    UPDATE Orders SET CustomerID = 'CHOPS', Freight = 22.98 WHERE OrderId = 10254;
                "));
            }

            var root     = ResolveRoot(container, TestFile, true);
            var response = new PipelineAction(root).Execute();

            Assert.AreEqual(200, response.Code);
            Assert.AreEqual(string.Empty, response.Content);

            using (var cn = new SqLiteConnectionFactory(OutputConnection).GetConnection()) {
                cn.Open();
                Assert.AreEqual(2155, cn.ExecuteScalar <int>("SELECT COUNT(*) FROM NorthWindStar;"));
                Assert.AreEqual(2155, cn.ExecuteScalar <int>("SELECT Inserts FROM NorthWindControl WHERE Entity = 'Order Details' AND BatchId = 1 LIMIT 1;"));
            }

            // FIRST DELTA, NO CHANGES
            root     = ResolveRoot(container, TestFile, false);
            response = new PipelineAction(root).Execute();

            Assert.AreEqual(200, response.Code);
            Assert.AreEqual(string.Empty, response.Content);

            using (var cn = new SqLiteConnectionFactory(OutputConnection).GetConnection()) {
                cn.Open();
                Assert.AreEqual(2155, cn.ExecuteScalar <int>("SELECT COUNT(*) FROM NorthWindStar;"));
                Assert.AreEqual(0, cn.ExecuteScalar <int>("SELECT Inserts+Updates+Deletes FROM NorthWindControl WHERE Entity = 'Order Details' AND BatchId = 9 LIMIT 1;"));
            }


            // CHANGE 2 FIELDS IN 1 RECORD IN MASTER TABLE THAT WILL CAUSE CALCULATED FIELD TO BE UPDATED TOO
            using (var cn = new SqlServerConnectionFactory(InputConnection).GetConnection()) {
                cn.Open();
                const string sql = @"UPDATE [Order Details] SET UnitPrice = 15, Quantity = 40 WHERE OrderId = 10253 AND ProductId = 39;";
                Assert.AreEqual(1, cn.Execute(sql));
            }

            root     = ResolveRoot(container, TestFile, false);
            response = new PipelineAction(root).Execute();

            Assert.AreEqual(200, response.Code);
            Assert.AreEqual(string.Empty, response.Content);

            using (var cn = new SqLiteConnectionFactory(OutputConnection).GetConnection()) {
                cn.Open();
                Assert.AreEqual(1, cn.ExecuteScalar <int>("SELECT Updates FROM NorthWindControl WHERE Entity = 'Order Details' AND BatchId = 17 LIMIT 1;"));
                Assert.AreEqual(15.0, cn.ExecuteScalar <decimal>("SELECT OrderDetailsUnitPrice FROM NorthWindStar WHERE OrderDetailsOrderId= 10253 AND OrderDetailsProductId = 39;"));
                Assert.AreEqual(40, cn.ExecuteScalar <int>("SELECT OrderDetailsQuantity FROM NorthWindStar WHERE OrderDetailsOrderId= 10253 AND OrderDetailsProductId = 39;"));
                Assert.AreEqual(15.0 * 40, cn.ExecuteScalar <int>("SELECT OrderDetailsExtendedPrice FROM NorthWindStar WHERE OrderDetailsOrderId= 10253 AND OrderDetailsProductId = 39;"));
            }

            // CHANGE 1 RECORD'S CUSTOMERID AND FREIGHT ON ORDERS TABLE
            using (var cn = new SqlServerConnectionFactory(InputConnection).GetConnection()) {
                cn.Open();
                Assert.AreEqual(1, cn.Execute("UPDATE Orders SET CustomerID = 'VICTE', Freight = 20.11 WHERE OrderId = 10254;"));
            }

            root     = ResolveRoot(container, TestFile, false);
            response = new PipelineAction(root).Execute();

            Assert.AreEqual(200, response.Code);
            Assert.AreEqual(string.Empty, response.Content);

            using (var cn = new SqLiteConnectionFactory(OutputConnection).GetConnection()) {
                cn.Open();
                Assert.AreEqual(1, cn.ExecuteScalar <int>("SELECT Updates FROM NorthWindControl WHERE Entity = 'Orders' AND BatchId = 26;"));
                Assert.AreEqual("VICTE", cn.ExecuteScalar <string>("SELECT OrdersCustomerId FROM NorthWindStar WHERE OrderDetailsOrderId= 10254;"));
                Assert.AreEqual(20.11, cn.ExecuteScalar <decimal>("SELECT OrdersFreight FROM NorthWindStar WHERE OrderDetailsOrderId= 10254;"));
            }
        }
 public UsersRepository(SqLiteConnectionFactory factory)
 {
     ConnectionFactory = factory;
     EnsureTablesExist();
 }
Пример #7
0
 public StatisticServiceOptions(IConfiguration configuration)
 {
     ConnectionString  = configuration.GetConnectionString("statisticDB");
     ConnectionFactory = new SqLiteConnectionFactory();
 }