/// <summary> /// DBテーブルを破棄する。 /// </summary> /// <param name="db"></param> public void DropDb(Xb.Db.Sqlite db) { try { db.Execute($"DROP TABLE {this.TableName}; "); } catch (Exception) { throw; } }
/// <summary> /// DB構造・データの検証と補正を行う。 /// </summary> /// <returns></returns> public void FormatDb(Xb.Db.Sqlite db) { try { this.FormatDbTable(db); this.FormatDbInitData(db); } catch (Exception) { throw; } }
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(); }
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()); }
/// <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; } }
/// <summary> /// DBの初期データ存在チェックと補正を行う。 /// </summary> /// <param name="db"></param> protected abstract void FormatDbInitData(Xb.Db.Sqlite db);