/// <summary> /// Transfere dados de um arquivo Excel para o banco de dados atual. /// Conexão com o banco atual precisa estar aberta. /// Não pára a execução se der um problema num comando de inserção específico. /// </summary> /// <returns>Número de linhas transferidas.</returns> /// <param name="p_filename">Nome do arquivo de origem.</param> /// <param name="p_separator">Separador de campos do arquivo CSV.</param> /// <param name="p_delimitator">Delimitador de campos do arquivo CSV.</param> /// <param name="p_header">Se deve considerar a primeira linha como cabeçalho ou não.</param> /// <param name="p_encoding">Codificação para leitura do arquivo CSV.</param> /// <param name="p_insert">Comando de inserção para inserir cada linha no banco de dados atual.</param> /// <param name="p_progress">Evento de progresso.</param> /// <param name="p_error">Evento de erro.</param> public override uint TransferFromFile(string p_filename, char p_separator, char p_delimitator, bool p_header, System.Text.Encoding p_encoding, Spartacus.Database.Command p_insert, Spartacus.Utils.ProgressEventClass p_progress, Spartacus.Utils.ErrorEventClass p_error) { Spartacus.Utils.Excel v_excel = null; uint v_transfered = 0; string v_insert; try { v_excel = new Spartacus.Utils.Excel(); v_excel.Import(p_filename, p_separator, p_delimitator, p_header, p_encoding); foreach (System.Data.DataRow r in v_excel.v_set.Tables[0].Rows) { foreach (System.Data.DataColumn c in v_excel.v_set.Tables[0].Columns) { if (p_insert.Exists(c.ColumnName)) p_insert.SetValue(c.ColumnName, r[c].ToString()); } v_insert = p_insert.GetUpdatedText(); try { this.Execute(v_insert); v_transfered++; p_progress.FireEvent(v_transfered); } catch (Spartacus.Database.Exception e) { p_error.FireEvent(v_insert + "\n" + e.v_message); } } return v_transfered; } catch (Spartacus.Utils.Exception e) { throw new Spartacus.Database.Exception(e); } catch (Spartacus.Database.Exception e) { throw e; } finally { if (v_excel != null) { v_excel.Clear(); v_excel = null; } } }