Ejemplo n.º 1
0
 /// <summary>
 /// DBテーブルを破棄する。
 /// </summary>
 /// <param name="db"></param>
 public void DropDb(Xb.Db.Sqlite db)
 {
     try
     {
         db.Execute($"DROP TABLE {this.TableName}; ");
     }
     catch (Exception)
     {
         throw;
     }
 }
Ejemplo n.º 2
0
 /// <summary>
 /// DB構造・データの検証と補正を行う。
 /// </summary>
 /// <returns></returns>
 public void FormatDb(Xb.Db.Sqlite db)
 {
     try
     {
         this.FormatDbTable(db);
         this.FormatDbInitData(db);
     }
     catch (Exception)
     {
         throw;
     }
 }
Ejemplo n.º 3
0
        private static void CreateDb()
        {
            var tableModels = new AppDbModel[]
            {
                (new UserStore()),
                (new RoleStore()),
            };
            var db = new Xb.Db.Sqlite(DbProvider.DbPath);

            foreach (var model in tableModels)
            {
                model.FormatDb(db);
            }

            db.Dispose();
        }
Ejemplo n.º 4
0
        public static void Init()
        {
            if (DbProvider._initOnce)
            {
                return;
            }
            DbProvider._initOnce = true;

            if (!System.IO.File.Exists(DbProvider.DbPath))
            {
                DbProvider.CreateDb();
            }

            DbProvider._db = new Xb.Db.Sqlite(DbProvider.DbPath);

            DbProvider.DbReady?.Invoke(null, new EventArgs());
        }
Ejemplo n.º 5
0
        /// <summary>
        /// DBテーブル・カラムの構造チェックと補正を行う。
        /// </summary>
        /// <param name="db"></param>
        private void FormatDbTable(Xb.Db.Sqlite db)
        {
            try
            {
                var sql = new System.Text.StringBuilder();

                //1)テーブル存在チェック
                sql.Clear();
                sql.Append($" SELECT name as TABLE_NAME ");
                sql.Append($" FROM sqlite_master ");
                sql.Append($" WHERE type = 'table' ");
                sql.Append($"     AND name = {db.Quote(this.TableName)} ");
                var rtDb = db.Query(sql.ToString());

                if (rtDb.RowCount <= 0)
                {
                    //テーブルが存在しないとき
                    db.Execute(this.GetCreateSql());
                }
                else
                {
                    //テーブルが存在するとき
                    var rtSt     = db.Query($"PRAGMA table_info({db.Quote(this.TableName)}); ");
                    var rowNames = rtSt.Rows.Select(r => r.Get <string>("name"));

                    foreach (var pair in this.DbColumnDefinitions)
                    {
                        if (rowNames.All(n => n != pair.Key))
                        {
                            db.Execute(this.GetAddColumnSql(pair.Key));
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// DBの初期データ存在チェックと補正を行う。
 /// </summary>
 /// <param name="db"></param>
 protected abstract void FormatDbInitData(Xb.Db.Sqlite db);