/// <summary> /// Transfere dados do banco de dados atual para um banco de dados de destino. /// Conexão com o banco de destino precisa estar aberta. /// </summary> /// <returns>Número de linhas transferidas.</returns> /// <param name="p_query">Consulta SQL para buscar os dados no banco atual.</param> /// <param name="p_table">Nome da tabela de destino.</param> /// <param name="p_insert">Comando de inserção para inserir cada linha no banco de destino.</param> /// <param name="p_destdatabase">Conexão com o banco de destino.</param> /// <param name="p_log">Log de inserção.</param> /// <param name='p_startrow'>Número da linha inicial.</param> /// <param name='p_endrow'>Número da linha final.</param> /// <param name='p_hasmoredata'>Indica se ainda há mais dados a serem lidos.</param> public override uint Transfer(string p_query, string p_table, Spartacus.Database.Command p_insert, Spartacus.Database.Generic p_destdatabase, ref string p_log, uint p_startrow, uint p_endrow, out bool p_hasmoredata) { uint v_transfered = 0; System.Collections.ArrayList v_rows = new System.Collections.ArrayList(); try { if (this.v_reader == null) { this.v_cmd.CommandText = p_query; this.v_reader = this.v_cmd.ExecuteReader(); this.v_currentrow = 0; } p_hasmoredata = false; while (v_reader.Read()) { p_hasmoredata = true; if (this.v_currentrow >= p_startrow && this.v_currentrow <= p_endrow) { for (int i = 0; i < v_reader.FieldCount; i++) p_insert.SetValue(this.FixColumnName(v_reader.GetName(i)).ToLower(), v_reader[i].ToString()); v_rows.Add(p_insert.GetUpdatedText()); v_transfered++; } this.v_currentrow++; if (this.v_currentrow > p_endrow) break; } if (! p_hasmoredata) { this.v_reader.Close(); this.v_reader = null; } else { try { p_destdatabase.InsertBlock(p_table, v_rows); } catch (Spartacus.Database.Exception e) { p_log += e.v_message + "\n"; } } return v_transfered; } catch (MySql.Data.MySqlClient.MySqlException e) { throw new Spartacus.Database.Exception(e); } }