protected override void LoadAllColumns(Database database) { foreach (Table table in database.Tables) { using (var columnsReader = this.Db.QueryDataReader( @"SELECT * FROM user_tab_columns WHERE TABLE_NAME = {0}", table.Name)) { while (columnsReader.Read()) { string columnName = columnsReader["COLUMN_NAME"].ToString(); string sqlType = columnsReader["DATA_TYPE"].ToString().ToLower(); if (sqlType == "number") { var dataScale = columnsReader["DATA_SCALE"].ToString(); if (dataScale == "0") { sqlType = "integer"; } } DbType dbType = OracleDbTypeHelper.ConvertFromOracleTypeString(sqlType); Column column = new Column(columnName, dbType, null, table); column.IsRequired = columnsReader["NULLABLE"].ToString() == "N"; table.Columns.Add(column); } table.SortColumns(); } } }
protected override void LoadAllColumns(Database database) { //用一句 Sql 将所有的表的所有字段都一次性查询出来。 var sql = new StringBuilder( @"SELECT * FROM USER_TAB_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().ToLower(); if (sqlType == "number") { var dataScale = columnsReader["DATA_SCALE"].ToString(); if (dataScale == "0") { sqlType = "integer"; } } DbType dbType = OracleDbTypeHelper.ConvertFromOracleTypeString(sqlType); Column column = new Column(columnName, dbType, null, currentTable); column.IsRequired = columnsReader["NULLABLE"].ToString() == "N"; currentTable.Columns.Add(column); } } }
protected override string ConvertToTypeString(DbType dataType, string length) { return(OracleDbTypeHelper.ConvertToOracleTypeString(dataType, length)); }