/// <summary> /// 加载每个表的所有列 /// </summary> /// <param name="database"></param> protected override void LoadAllColumns(Database database) { foreach (Table table in database.Tables) { using (var columnsReader = this.Db.QueryDataReader(@" SELECT C.COLUMN_NAME, C.IS_NULLABLE, C.DATA_TYPE, C.CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS C WHERE C.TABLE_NAME = {0} ", table.Name)) { while (columnsReader.Read()) { string columnName = columnsReader["COLUMN_NAME"].ToString(); string sqlType = columnsReader["DATA_TYPE"].ToString(); string length = null; var lengthObj = columnsReader["CHARACTER_MAXIMUM_LENGTH"]; if (lengthObj != null && !DBNull.Value.Equals(lengthObj) && lengthObj.ToString() != "-1") { length = lengthObj.ToString(); } DbType dbType = SqlDbTypeHelper.ConvertFromSQLTypeString(sqlType); Column column = new Column(dbType, length, columnName, table); column.IsRequired = string.Compare(columnsReader["IS_NULLABLE"].ToString(), "no", true) == 0; table.Columns.Add(column); } table.SortColumns(); } } this.LoadIsIdentity(database); }
/// <summary> /// 加载每个表的所有列 /// </summary> /// <param name="database"></param> protected override void LoadAllColumns(Database database) { //用一句 Sql 将所有的表的所有字段都一次性查询出来。 var sql = new StringBuilder( @"SELECT TABLE_NAME, COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME IN ("); sql.Append(string.Join(",", database.Tables.Select(t => "'" + t.Name + "'"))); sql.Append(@") ORDER BY TABLE_NAME"); using (var columnsReader = this.Db.QueryDataReader(sql.ToString())) { Table currentTable = null;//当前正在处理的表。(放在循环外,有缓存的作用。) while (columnsReader.Read()) { //找到该列所对应的表。 var tableName = columnsReader["TABLE_NAME"].ToString(); if (currentTable == null || !currentTable.Name.EqualsIgnoreCase(tableName)) { currentTable = database.FindTable(tableName); } string columnName = columnsReader["COLUMN_NAME"].ToString(); string sqlType = columnsReader["DATA_TYPE"].ToString(); //不再读取 Length //string length = null; //var lengthObj = columnsReader["CHARACTER_MAXIMUM_LENGTH"]; //if (lengthObj != null && !DBNull.Value.Equals(lengthObj) && lengthObj.ToString() != "-1") //{ // length = lengthObj.ToString(); //} DbType dbType = SqlDbTypeHelper.ConvertFromSQLTypeString(sqlType); Column column = new Column(columnName, dbType, null, currentTable); column.IsRequired = "NO".EqualsIgnoreCase(columnsReader["IS_NULLABLE"].ToString()); currentTable.Columns.Add(column); } } }
protected override string ConvertToTypeString(DbType dataType, string length) { return(SqlDbTypeHelper.ConvertToSQLTypeString(dataType, length)); }