/// <summary> /// Advances the data reader to the next result, when reading the results of batch SQL statements. /// </summary> /// <returns></returns> public bool NextResult() { if (!isOpen) { throw new MySqlException("Invalid attempt to NextResult when reader is closed."); } // clear any rows that have not been read from the last rowset if (currentResult != null) { currentResult.Consume(); } // tell our command to continue execution of the SQL batch until it its // another resultset try { CommandResult nextResult = command.GetNextResultSet(this); if (nextResult != null) { currentResult = nextResult; } else { // if there was no more resultsets, then signal done canRead = false; return(false); } readCount = 0; schemaTable = null; // When executing query statements, the result byte that is returned // from MySql is the column count. That is why we reference the LastResult // property here to dimension our field array connection.SetState(ConnectionState.Fetching); // load in our field defs and set our internal variables so we know // what we can do (canRead, hasRows) canRead = hasRows = currentResult.Load(); fields = currentResult.Fields; return(true); } catch (Exception ex) { if (ex is MySqlException && !(ex as MySqlException).IsFatal) { connection.SetState(ConnectionState.Open); } else { connection.Terminate(); } throw; } finally { if (connection.State != ConnectionState.Closed && connection.State != ConnectionState.Open) { connection.SetState(ConnectionState.Open); } } }