public static void T_StoreProcMultiResultSet3() { var connStr = GetMySqlConnString(); var conn = new MySqlConnection(connStr); //Console.WriteLine("1"); conn.Open(); PrepareTable1(conn); // Console.WriteLine("2"); { string createStoreProcSql = @"DROP PROCEDURE IF EXISTS multi;"; var cmd = new MySqlCommand(createStoreProcSql, conn); // Console.WriteLine("3"); cmd.ExecuteNonQuery(); } { string createStoreProcSql = @"CREATE PROCEDURE multi() BEGIN SELECT 1011 as A; SELECT 1022 as B; select col_id from test001; END"; //Console.WriteLine("4"); var cmd = new MySqlCommand(createStoreProcSql, conn); cmd.ExecuteNonQuery(); } { // Console.WriteLine("5"); string callProc = "call multi();"; var cmd = new MySqlCommand(callProc, conn); //access to sub table var currentSubTable = MySqlSubTable.Empty; cmd.ExecuteSubTableReader(reader => { if (reader.CurrentSubTable.Header != currentSubTable.Header) { //change main table //some table may split into many sub table } currentSubTable = reader.CurrentSubTable; //on each subtable //create data reader for the subtable while (reader.Read()) { Console.WriteLine(reader.GetInt32(0)); } //last table if (currentSubTable.IsLastTable) { conn.Close(); } }); } }