using System; using System.Collections.Generic; using System.Data.SQLite; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OTSModelSharp.DTLBase { public class CSQLiteTable: IDBTableBase { //表结构 private TableModel table; /// /// 初始换 /// /// 数据库地址 /// 表结构 public CSQLiteTable() { table = new TableModel(); } public CSQLiteTable(string tableName) { table = new TableModel(); table.TableName = tableName; } public CSQLiteTable(TableModel t) { table = t; } public TableModel GetTableInfo() { return table; } public void AddColumn(ColumnDefine col) { table.columns.Add(col); } public int GetColumnCount() { return table.columns.Count; } public string GetTableName() { return table.TableName; } public void SetTableName(string a_sTableName) { table.TableName = a_sTableName; } public string GetColumnName(int a_nColId) { return table.columns[a_nColId].ColumName; } public string GetColumnFullName(int a_nColId) { return table.TableName+"."+ table.columns[a_nColId].ColumName; } public string GetColumnNames(bool a_bWithPrimary = true) { StringBuilder builder = new StringBuilder(); int ind = 0; foreach (var item in table.columns) { ++ind; if (!a_bWithPrimary&&item.IsPrimarykey) { continue; } builder.Append(item.ColumName); if (ind == table.columns.Count) { builder.Append(""); } else { builder.Append(","); } } return builder.ToString(); } public string GetColumnFullNames(bool a_bWithPrimary = true) { StringBuilder builder = new StringBuilder(); int ind = 0; foreach (var item in table.columns) { ++ind; if (!a_bWithPrimary && item.IsPrimarykey) { continue; } builder.Append(table.TableName + "." + item.ColumName); if (ind == table.columns.Count) { builder.Append(""); } else { builder.Append(","); } } return builder.ToString(); } public ColumnType GetColumnType(int a_nColId) { return table.columns[a_nColId].ColumType; } public string GetCreateTableCommandString() { StringBuilder builder = new StringBuilder(); builder.Append("CREATE TABLE IF NOT EXISTS " + table.TableName + "("); int ind = 0; foreach (var item in table.columns) { builder.Append(item.ColumName + " " + item.ColumType.GetName() + " " + (item.IsPrimarykey ? "PRIMARY KEY" : "")); if (++ind == table.columns.Count) { builder.Append(")"); } else { builder.Append(","); } } return builder.ToString(); } public string GetDeleteTableCommandString() { string queryString = "drop table " + table.TableName; return queryString; } public string GetRemoveAllRowsCommandString() { string queryString = "DELETE FROM " + table.TableName; return queryString; } public string GetInsertCommandFormatString(bool a_bWithPrimary = false) { StringBuilder builder = new StringBuilder(); builder.Append("INSERT INTO " + table.TableName + "("); int ind = 0; foreach (var item in table.columns) { ++ind; if (!a_bWithPrimary && item.IsPrimarykey) { continue; } builder.Append(item.ColumName); if (ind == table.columns.Count) { builder.Append(")"); } else { builder.Append(","); } } ind = 0; builder.Append(" VALUES ("); foreach (var item in table.columns) { ++ind; if (!a_bWithPrimary && item.IsPrimarykey) { continue; } builder.Append(item.ColumType.GetFormat(ind-1)); if (ind == table.columns.Count) { builder.Append(")"); } else { builder.Append(","); } } return builder.ToString(); } public KeyValuePair GetInsertCommand(bool a_bWithPrimary = false) { StringBuilder builder = new StringBuilder(); List paras = new List(); builder.Append("INSERT INTO " + table.TableName + "("); int ind = 0; foreach (var item in table.columns) { ++ind; if (!a_bWithPrimary && item.IsPrimarykey) { continue; } builder.Append(item.ColumName); if (ind == table.columns.Count) { builder.Append(")"); } else { builder.Append(","); } } ind = 0; builder.Append(" VALUES ("); foreach (var item in table.columns) { ++ind; paras.Add(new SQLiteParameter(item.ColumName)); if (!a_bWithPrimary && item.IsPrimarykey) { continue; } builder.Append("@" + item.ColumName); if (ind == table.columns.Count) { builder.Append(")"); } else { builder.Append(","); } } return new KeyValuePair( builder.ToString(),paras.ToArray()); } public string GetInsertCommandFormatString(List a_colIndexes) { StringBuilder builder = new StringBuilder(); builder.Append("INSERT INTO " + table.TableName + "("); int ind = 0; foreach (var item in a_colIndexes) { builder.Append(table.columns[item].ColumName); if (++ind == a_colIndexes.Count) { builder.Append(")"); } else { builder.Append(","); } } ind = 0; builder.Append(" VALUES "); foreach (var item in a_colIndexes) { builder.Append(table.columns[item].ColumType.GetFormat(ind)); if (++ind == a_colIndexes.Count) { builder.Append(")"); } else { builder.Append(","); } } return builder.ToString(); } public string GetUpdateCommandFormatString(List a_updateColIndexes, int a_nConditionColIndex) { StringBuilder builder = new StringBuilder(); builder.Append("UPDATE " + table.TableName + " SET "); int ind = 0; foreach (var item in a_updateColIndexes) { builder.Append(table.columns[item].ColumName+"="+ table.columns[(int)item].ColumType.GetFormat(ind)); if (++ind == a_updateColIndexes.Count) { builder.Append(" WHERE "+ table.columns[a_nConditionColIndex].ColumName+"="+ table.columns[a_nConditionColIndex].ColumType.GetFormat(ind)); } else { builder.Append(","); } } return builder.ToString(); } public KeyValuePair GetUpdateCommand(List a_updateColIndexes, int a_nConditionColIndex) { throw new NotImplementedException(); } } }