/// <summary> /// Realiza uma consulta no banco de dados, armazenando os dados de retorno em um <see cref="System.Data.DataTable"/>. /// </summary> /// <param name='p_sql'> /// Código SQL a ser consultado no banco de dados. /// </param> /// <param name='p_tablename'> /// Nome virtual da tabela onde deve ser armazenado o resultado, para fins de cache. /// </param> /// <param name='p_progress'>Evento de progresso da execução da consulta.</param> /// <returns>Retorna uma <see cref="System.Data.DataTable"/> com os dados de retorno da consulta.</returns> public override System.Data.DataTable Query(string p_sql, string p_tablename, Spartacus.Utils.ProgressEventClass p_progress) { System.Data.DataTable v_table = null; System.Data.DataRow v_row; uint v_counter = 0; p_progress.FireEvent(v_counter); if (this.v_con == null) { try { this.v_con = new MySql.Data.MySqlClient.MySqlConnection(this.v_connectionstring); this.v_con.Open(); this.v_cmd = new MySql.Data.MySqlClient.MySqlCommand(p_sql, this.v_con); this.v_reader = this.v_cmd.ExecuteReader(); v_table = new System.Data.DataTable(p_tablename); for (int i = 0; i < v_reader.FieldCount; i++) v_table.Columns.Add(this.FixColumnName(this.v_reader.GetName(i)), typeof(string)); while (this.v_reader.Read()) { v_row = v_table.NewRow(); for (int i = 0; i < this.v_reader.FieldCount; i++) v_row[i] = this.v_reader[i].ToString(); v_table.Rows.Add(v_row); v_counter++; p_progress.FireEvent(v_counter); } return v_table; } catch (MySql.Data.MySqlClient.MySqlException e) { throw new Spartacus.Database.Exception(e); } finally { if (this.v_reader != null) { this.v_reader.Close(); this.v_reader = null; } if (this.v_cmd != null) { this.v_cmd.Dispose(); this.v_cmd = null; } if (this.v_con != null) { this.v_con.Close(); this.v_con = null; } } } else { try { this.v_cmd.CommandText = p_sql; this.v_reader = this.v_cmd.ExecuteReader(); v_table = new System.Data.DataTable(p_tablename); for (int i = 0; i < v_reader.FieldCount; i++) v_table.Columns.Add(this.FixColumnName(this.v_reader.GetName(i)), typeof(string)); while (this.v_reader.Read()) { v_row = v_table.NewRow(); for (int i = 0; i < this.v_reader.FieldCount; i++) v_row[i] = this.v_reader[i].ToString(); v_table.Rows.Add(v_row); v_counter++; p_progress.FireEvent(v_counter); } return v_table; } catch (MySql.Data.MySqlClient.MySqlException e) { throw new Spartacus.Database.Exception(e); } finally { if (this.v_reader != null) { this.v_reader.Close(); this.v_reader = null; } } } }
/// <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_newtable">Nome da nova tabela a ser criada no banco de dados.</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, string p_newtable, Spartacus.Utils.ProgressEventClass p_progress, Spartacus.Utils.ErrorEventClass p_error) { Spartacus.Database.Command v_cmd; Spartacus.Utils.Excel v_excel = null; uint v_transfered = 0; string v_createtable; string v_insert; try { v_excel = new Spartacus.Utils.Excel(); v_excel.Import(p_filename, p_separator, p_delimitator, p_header, p_encoding); v_createtable = "create table " + p_newtable + " ("; for (int k = 0; k < v_excel.v_set.Tables[0].Columns.Count; k++) { if (k < v_excel.v_set.Tables[0].Columns.Count-1) v_createtable += v_excel.v_set.Tables[0].Columns[k].ColumnName.ToLower() + " varchar(4000),"; else v_createtable += v_excel.v_set.Tables[0].Columns[k].ColumnName.ToLower() + " varchar(4000))"; } try { this.Execute(v_createtable); } catch (Spartacus.Database.Exception e) { p_error.FireEvent(v_createtable + "\n" + e.v_message); } v_cmd = new Spartacus.Database.Command(); v_cmd.v_text = "insert into " + p_newtable + " values ("; for (int k = 0; k < v_excel.v_set.Tables[0].Columns.Count; k++) { if (k < v_excel.v_set.Tables[0].Columns.Count-1) v_cmd.v_text += "#" + v_excel.v_set.Tables[0].Columns[k].ColumnName.ToLower() + "#,"; else v_cmd.v_text += "#" + v_excel.v_set.Tables[0].Columns[k].ColumnName.ToLower() + "#)"; v_cmd.AddParameter(v_excel.v_set.Tables[0].Columns[k].ColumnName.ToLower(), Spartacus.Database.Type.QUOTEDSTRING); } 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) v_cmd.SetValue(c.ColumnName, r[c].ToString()); v_insert = v_cmd.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; } } }
/// <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. /// 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_query">Consulta SQL para buscar os dados no banco atual.</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_progress">Evento de progresso.</param> /// <param name="p_error">Evento de erro.</param> public override uint Transfer(string p_query, Spartacus.Database.Command p_insert, Spartacus.Database.Generic p_destdatabase, Spartacus.Utils.ProgressEventClass p_progress, Spartacus.Utils.ErrorEventClass p_error) { uint v_transfered = 0; string v_insert; p_progress.FireEvent(v_transfered); if (this.v_con == null) { try { this.v_con = new MySql.Data.MySqlClient.MySqlConnection(this.v_connectionstring); this.v_con.Open(); this.v_cmd = new MySql.Data.MySqlClient.MySqlCommand(p_query, this.v_con); this.v_reader = this.v_cmd.ExecuteReader(); while (v_reader.Read()) { for (int i = 0; i < v_reader.FieldCount; i++) p_insert.SetValue(this.FixColumnName(v_reader.GetName(i)).ToLower(), v_reader[i].ToString()); v_insert = p_insert.GetUpdatedText(); try { p_destdatabase.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 (MySql.Data.MySqlClient.MySqlException e) { throw new Spartacus.Database.Exception(e); } finally { if (this.v_reader != null) { this.v_reader.Close(); this.v_reader = null; } if (this.v_cmd != null) { this.v_cmd.Dispose(); this.v_cmd = null; } if (this.v_con != null) { this.v_con.Close(); this.v_con = null; } } } else { try { this.v_cmd.CommandText = p_query; this.v_reader = this.v_cmd.ExecuteReader(); while (v_reader.Read()) { for (int i = 0; i < v_reader.FieldCount; i++) p_insert.SetValue(this.FixColumnName(v_reader.GetName(i)).ToLower(), v_reader[i].ToString()); v_insert = p_insert.GetUpdatedText(); try { p_destdatabase.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 (MySql.Data.MySqlClient.MySqlException e) { throw new Spartacus.Database.Exception(e); } finally { if (this.v_reader != null) { this.v_reader.Close(); this.v_reader = null; } } } }
/// <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; } } }
/// <summary> /// Realiza uma consulta no banco de dados, armazenando os dados de retorno em um <see cref="System.Data.DataTable"/>. /// </summary> /// <param name='p_sql'> /// Código SQL a ser consultado no banco de dados. /// </param> /// <param name='p_tablename'> /// Nome virtual da tabela onde deve ser armazenado o resultado, para fins de cache. /// </param> /// <param name='p_progress'>Evento de progresso da execução da consulta.</param> /// <returns>Retorna uma <see cref="System.Data.DataTable"/> com os dados de retorno da consulta.</returns> public override System.Data.DataTable Query(string p_sql, string p_tablename, Spartacus.Utils.ProgressEventClass p_progress) { System.Data.DataTable v_table = null; System.Data.DataRow v_row; uint v_counter = 0; p_progress.FireEvent(v_counter); try { this.v_cmd.CommandText = p_sql; this.v_reader = this.v_cmd.ExecuteReader(); v_table = new System.Data.DataTable(p_tablename); for (int i = 0; i < v_reader.FieldCount; i++) v_table.Columns.Add(this.FixColumnName(this.v_reader.GetName(i)), typeof(string)); while (this.v_reader.Read()) { v_row = v_table.NewRow(); for (int i = 0; i < this.v_reader.FieldCount; i++) v_row[i] = this.v_reader[i].ToString(); v_table.Rows.Add(v_row); v_counter++; p_progress.FireEvent(v_counter); } return v_table; } catch (Mono.Data.Sqlite.SqliteException e) { throw new Spartacus.Database.Exception(e); } }