/// <summary> /// 检查对应的字段是否存在,不存在则创建 /// </summary> /// <param name="db"></param> internal static string CheckColumnExists(Type type, AbsDBExtend db) { string result = ""; var dbAdapter = db._DBAdapter; List <Attribute.FieldInnerAttribute> columns = GetColumns(type, db); string tableName = TypeCache.GetTableName(type, db.dbContext); foreach (Attribute.FieldInnerAttribute item in columns) { var sb = new StringBuilder(); //string sql = dbAdapter.GetSelectTop(item.MapingName, "from " + dbAdapter.KeyWordFormat(tableName), "", 1); dbAdapter.GetSelectTop(sb, item.MapingName, b => { b.Append(" from " + dbAdapter.KeyWordFormat(tableName)); }, "", 1); var sql = sb.ToString(); try { db.Execute(sql); } catch (Exception ero)//出错,按没有字段算 { result += CreateColumn(db, item); } } return(result); }
/// <summary> /// 指定格式化更新[基本方法] /// </summary> /// <param name="sql"></param> /// <param name="parame"></param> /// <param name="types"></param> /// <returns></returns> protected int ExecuteWithFormat(string sql, ParameCollection parame, params Type[] types) { AbsDBExtend db = DBExtend; foreach (var p in parame) { db.AddParam(p.Key, p.Value); } return(db.Execute(sql, types)); }
/// <summary> /// 创建列 /// </summary> /// <param name="db"></param> /// <param name="item"></param> /// <returns></returns> internal static string CreateColumn(AbsDBExtend db, Attribute.FieldInnerAttribute item) { var dbAdapter = db._DBAdapter; string result = ""; if (string.IsNullOrEmpty(item.ColumnType)) { throw new Exception("ColumnType is null"); } string str = dbAdapter.GetCreateColumnScript(item); string indexScript = ""; if (item.FieldIndexType != Attribute.FieldIndexType.无) { indexScript = dbAdapter.GetColumnIndexScript(item); } try { db.Execute(str); if (!string.IsNullOrEmpty(indexScript)) { db.Execute(indexScript); } result = string.Format("创建字段:{0} {1} {2}\r\n", item.TableName, item.MemberName, item.PropertyType); var model = System.Activator.CreateInstance(item.ModelType) as IModel; try { model.OnColumnCreated(item.MemberName); } catch (Exception ero) { result = string.Format("添加字段:{0} {1},升级数据时发生错误:{2}\r\n", item.TableName, item.MemberName, ero.Message); } EventLog.Log(result, "", false); } catch (Exception ero) { //EventLog.Log("创建字段时发生错误:" + ero.Message); result = string.Format("创建字段:{0} {1}发生错误:{2}\r\n", item.TableName, item.MemberName, ero.Message); } return(result); }
/// <summary> /// 创建表 /// 会检查表是否存在,如果存在则检查字段 /// 创建失败则抛出异常 /// 表存在返回失败 /// </summary> /// <param name="type"></param> /// <param name="db"></param> /// <param name="message"></param> /// <returns></returns> public static bool CreateTable(Type type, AbsDBExtend db, out string message) { var dbAdapter = db._DBAdapter; message = ""; //TypeCache.SetDBAdapterCache(GetType(),dbAdapter); string tableName = TypeCache.GetTableName(type, db.dbContext); var sb = new StringBuilder(); dbAdapter.GetSelectTop(sb, "0", b => { b.Append(" from " + dbAdapter.KeyWordFormat(tableName)); }, "", 1); var sql = sb.ToString(); bool needCreate = false; try { //检查表是否存在 db.Execute(sql); //return false;// 返回结果时不会检查字段 } catch { needCreate = true; } if (needCreate) { List <string> list = new List <string>(); try { List <Attribute.FieldInnerAttribute> columns = GetColumns(type, db); dbAdapter.CreateTable(db.dbContext, columns, tableName); message = string.Format("创建表:{0}\r\n", tableName); CheckIndexExists(type, db); //return true; } catch (Exception ero) { message = "创建表时发生错误 类型{0} {1}\r\n"; message = string.Format(message, type, ero.Message); throw new Exception(message); //return false; } //EventLog.Log(message, "", false); } else { message = CheckColumnExists(type, db); } return(true); }
/// <summary> /// 检查索引 /// </summary> /// <param name="type"></param> /// <param name="db"></param> /// <param name="removeId"></param> public static void CheckIndexExists(Type type, AbsDBExtend db, bool removeId = false) { var list = GetIndexScript(type, db, removeId); foreach (var item in list) { try { db.Execute(item); } catch (Exception ero)//出错, { EventLog.Log(string.Format("创建索引失败:{0}\r\n{1}", ero.Message, item)); } } }
/// <summary> /// 检查索引 /// </summary> /// <param name="db"></param> /// <returns></returns> internal static void CheckIndexExists(Type type, AbsDBExtend db) { var list = GetIndexScript(type, db); foreach (var item in list) { try { db.Execute(item); } catch (Exception ero)//出错, { CoreHelper.EventLog.Log(string.Format("创建索引失败:{0}\r\n{1}", ero.Message, item)); } } }
/// <summary> /// 创建表 /// 会检查表是否存在,如果存在则检查字段 /// 创建失败则抛出异常 /// 表存在返回失败 /// </summary> /// <param name="db"></param> /// <param name="message"></param> /// <returns></returns> internal static bool CreateTable(Type type, AbsDBExtend db, out string message) { var dbAdapter = db._DBAdapter; message = ""; //TypeCache.SetDBAdapterCache(GetType(),dbAdapter); string tableName = TypeCache.GetTableName(type, db.dbContext); string sql = dbAdapter.GetSelectTop("0", "from " + dbAdapter.KeyWordFormat(tableName), "", 1); bool needCreate = false; try { //检查表是否存在 db.Execute(sql); return(false); } catch { needCreate = true; } if (needCreate) { List <string> list = new List <string>(); try { List <Attribute.FieldAttribute> columns = GetColumns(type, dbAdapter); dbAdapter.CreateTable(columns, tableName); message = string.Format("创建表:{0}\r\n", tableName); CheckIndexExists(type, db); //return true; } catch (Exception ero) { message = "创建表时发生错误 类型{0} {1}\r\n"; message = string.Format(message, type, ero.Message); throw new CRLException(message); //return false; } //CoreHelper.EventLog.Log(message, "", false); } else { message = CheckColumnExists(type, db); } return(true); }
/// <summary> /// 检查对应的字段是否存在,不存在则创建 /// </summary> /// <param name="db"></param> internal static string CheckColumnExists(Type type, AbsDBExtend db) { string result = ""; var dbAdapter = db._DBAdapter; List <Attribute.FieldAttribute> columns = GetColumns(type, dbAdapter); string tableName = TypeCache.GetTableName(type, db.dbContext); foreach (Attribute.FieldAttribute item in columns) { string sql = dbAdapter.GetSelectTop(item.MapingName, "from " + dbAdapter.KeyWordFormat(tableName), "", 1); try { db.Execute(sql); } catch//出错,按没有字段算 { result += CreateColumn(db, item); } } return(result); }