public static DbQueryResult GetInfo() { using( var conn = new MySqlConnection( connStr ) ) { conn.Open(); var result = new DbQueryResult(); var _tables = result.tables; result.affectedRows = 0; result.schema = cfg.database; var q = new MyQuery( "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = ", MyParameterDataTypes.String ); q[ 0 ].Assign( cfg.database ); var dt = MyUtils.ExecuteDbTable( conn, q.ToSql() ); for( int i = 0; i < dt.rowCount; ++i ) { var dr = dt[ i ]; _tables.Add( new DbTable { name = dr[ "TABLE_NAME" ].ToString(), comment = dr[ "TABLE_COMMENT" ].ToString() } ); } q.Assign( "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ", MyParameterDataTypes.String, " AND TABLE_NAME = ", MyParameterDataTypes.String ); q[ 0 ].Assign( cfg.database ); foreach( var t in _tables ) { q[ 1 ].Assign( t.name ); dt = MyUtils.ExecuteDbTable( conn, q.ToSql() ); for( int i = 0; i < dt.rowCount; ++i ) { var dr = dt[ i ]; var c = new DbColumn { name = (string)dr[ "COLUMN_NAME" ].ToString(), columnIndex = i, dataType = GetDataType( (string)dr[ "DATA_TYPE" ], (string)dr[ "COLUMN_TYPE" ] ), nullable = (string)dr[ "IS_NULLABLE" ] == "YES", comment = (string)dr[ "COLUMN_COMMENT" ], autoIncrement = (string)dr[ "EXTRA" ] == "auto_increment", timestamp = (string)dr[ "DATA_TYPE" ] == "timestamp" && (string)dr[ "COLUMN_DEFAULT" ] == "CURRENT_TIMESTAMP", primaryKey = (string)dr[ "COLUMN_KEY" ] == "PRI", parent = t }; t.AddColumn( c ); } } return result; } }
public static DbQueryResult ExecuteResult( MySqlConnection conn, string sql ) { var rtv = new DbQueryResult(); using( var cmd = new MySqlCommand( sql, conn ) ) { using( var r = cmd.ExecuteReader() ) { rtv.affectedRows = r.RecordsAffected; // 这个值于多段查询来讲看上去是累计的结果 LabBegin: var dt = NewDbTable( r.GetSchemaTable() ); if( dt != null ) { FillDbTable( dt, r ); rtv.tables.Add( dt ); } if( r.NextResult() ) goto LabBegin; } } return rtv; }