/// <summary> /// 导出全部表结构到WORD文档 /// </summary> /// <param name="filename"></param> public void SetTableSchemaToWord(string filename) { TabStruCollection tsc = new TabStruCollection(); TableSchemaInOut tsio = new TableSchemaInOut(this.m_handler); tsc = tsio.getTabStruAllCollection(); this.ConvertInfoToWord(filename, tsc); }
/// <summary> /// 导出部分表结构到WORD文档 /// </summary> /// <param name="filename"></param> /// <param name="tblnamelist"></param> public void SetTableSchemaSomeToWord(string filename, List <string> tblnamelist) { TabStruCollection tsc = new TabStruCollection(); TableSchemaInOut tsio = new TableSchemaInOut(this.m_handler); tsc = tsio.getTabStruSomeCollection(tblnamelist); this.ConvertInfoToWord(filename, tsc); }
/// <summary> /// 根据表结构文档生成协调此连接下表结构Sql语句 /// </summary> /// <returns></returns> public string GetFixTableStuSqlByFile(IDataBaseHandler handler) { for (int i = 0; i < this.List.Count; i++) { Table tbl = (Table)this.List[i]; List <DataTableColumn> dtcl = tbl.Columns; for (int j = 0; j < dtcl.Count; j++) { DataTableColumn dtc = dtcl[j]; //映射到当前的数据库类型下 handler.DbAdapter.GetSchemaHandler(handler).MapDBType(ref dtc); } } int NotExist = 0; int NotMatch = 0; System.Text.StringBuilder sbSql = new System.Text.StringBuilder(); //要执行的Sql ArrayList tblList = new ArrayList(); //不存在的表信息 ArrayList BuildList = new ArrayList(); //不存在的表名 #region 对比表结构 foreach (Table tbl in this.List) { #region 从数据库表中取得信息 string chetblExist = null; chetblExist = handler.DbAdapter.GetSchemaHandler(handler).GetSqlOfTableInfo(tbl.TableName); object existflag = handler.ExecuteScalar(chetblExist); if (existflag == null || existflag == DBNull.Value || Convert.ToInt32(existflag) == 0) {//表不存在 tblList.Add(tbl); BuildList.Add(tbl.TableName); continue; } //数据库表结构信息 TableSchemaInOut tsio = new TableSchemaInOut(handler); //数据库中的表结构信息 Table dbtbl = tsio.getOneTableStruByTableName(tbl.TableName); MapTableColToDbType(ref dbtbl, handler); //转化到数据库类型 ArrayList difflist = new ArrayList(); //保存字段不一致的字段 ArrayList NoExistlist = new ArrayList(); //保存字段存在的字段 for (int i = 0; i < tbl.Columns.Count; i++) { DataTableColumn field = tbl.Columns[i]; int j = 0; bool IsthisFieldExist = false;//字段是否存在 for (; j < dbtbl.Columns.Count; j++) { if (String.Compare(field.ColumnName, dbtbl.Columns[j].ColumnName, true) == 0) { IsthisFieldExist = true; //添加到不一样的字段 if (field.SimpleType != dbtbl.Columns[j].SimpleType || field.Length != dbtbl.Columns[j].Length) //当字段类型不匹配 { difflist.Add(field); } break; } } //添加到不存在的 if (!IsthisFieldExist) { NoExistlist.Add(field); } } #endregion #region 数据类型改变的字段 NotMatch = difflist.Count; if (difflist.Count > 0) { foreach (DataTableColumn field in difflist) { sbSql.Append(handler.DbAdapter.GetSchemaHandler(handler).GetAlterSqlOfColumnInfo(field)); sbSql.Append(ExecuteSqlFile.SqlSplitChars); } } #endregion #region 新添加的字段 NotExist = NoExistlist.Count; if (NoExistlist.Count > 0) { foreach (DataTableColumn field in NoExistlist) { sbSql.Append(handler.DbAdapter.GetSchemaHandler(handler).GetAlterAddSqlOfColumnInfo(field)); sbSql.Append(ExecuteSqlFile.SqlSplitChars); } } #endregion } #endregion #region 存在的表 if (BuildList.Count > 0) { sbSql.Append(handler.DbAdapter.GetSchemaHandler(handler).GetDbServerScript(tblList)); } #endregion return(sbSql.ToString()); }