public static void Main(string[] args) { Spartacus.Utils.ProgressEventClass v_progress; Spartacus.Utils.ErrorEventClass v_error; Spartacus.Database.Command v_cmd; Spartacus.Database.Generic database = new Spartacus.Database.Postgresql("192.168.56.2","cotacoes","psotgres","Crc19D98C"); v_progress = new Spartacus.Utils.ProgressEventClass(); v_error = new Spartacus.Utils.ErrorEventClass(); int[] v_exp = { 1, 5, 10, 50, 100, 250, 500, 750, 1000, 2000, 3000 }; System.Diagnostics.Stopwatch v_watch = new System.Diagnostics.Stopwatch(); foreach (int v_bloco in v_exp) { database.v_blocksize = v_bloco; v_watch.Start; database.Open(); database.TransferFromFile( "Caminho Do Arquivo Aqui", ";", "", false, System.Text.Encoding.UTF8, "cotacoes", // tabela existe "(dia,codmoeda,tipomoeda,siglamoeda,taxacompra,taxavenda,parcompra,parvenda)", v_cmd, v_progress, v_error ); database.Close(); v_watch.Stop; Console.WriteLine("Tamanho de bloco = {0}, tempo total = {1}", v_bloco, v_watch.Elapsed); } }
public static void Main(string[] args) { Spartacus.Database.Generic v_database; Spartacus.Utils.ProgressEventClass v_progress; Spartacus.Utils.ErrorEventClass v_error; Spartacus.Database.Command v_cmd; v_database = new Spartacus.Database.Sqlite("../../../databases/cotacoes_tamanhobloco.db"); v_database.v_blocksize = 10000; v_progress = new Spartacus.Utils.ProgressEventClass(); v_progress.ProgressEvent += OnProgress; v_error = new Spartacus.Utils.ErrorEventClass(); v_error.ErrorEvent += OnError; v_cmd = new Spartacus.Database.Command(); v_cmd.v_text = "(#col0#,#col1#,#col2#,#col3#,#col4#,#col5#,#col6#,#col7#)"; v_cmd.AddParameter("col0", Spartacus.Database.Type.STRING); v_cmd.AddParameter("col1", Spartacus.Database.Type.INTEGER); v_cmd.AddParameter("col2", Spartacus.Database.Type.STRING); v_cmd.AddParameter("col3", Spartacus.Database.Type.STRING); v_cmd.AddParameter("col4", Spartacus.Database.Type.REAL); v_cmd.SetLocale("col4", Spartacus.Database.Locale.EUROPEAN); v_cmd.AddParameter("col5", Spartacus.Database.Type.REAL); v_cmd.SetLocale("col5", Spartacus.Database.Locale.EUROPEAN); v_cmd.AddParameter("col6", Spartacus.Database.Type.REAL); v_cmd.SetLocale("col6", Spartacus.Database.Locale.EUROPEAN); v_cmd.AddParameter("col7", Spartacus.Database.Type.REAL); v_cmd.SetLocale("col7", Spartacus.Database.Locale.EUROPEAN); v_database.Open(); v_database.TransferFromFile( args[0], ";", "", false, System.Text.Encoding.UTF8, "cotacoes", // tabela existe "(dia,codmoeda,tipomoeda,siglamoeda,taxacompra,taxavenda,parcompra,parvenda)", v_cmd, v_progress, v_error ); v_database.Close(); // como fazer o experimento de forma automática /* int[] v_exp = { 1, 5, 10, 50, 100, 250, 500, 750, 1000, 2000, 3000 }; System.Diagnostics.Stopwatch v_watch = new System.Diagnostics.Stopwatch(); foreach (int v_bloco in v_exp) { v_database.v_blocksize = v_bloco; v_watch.Start; v_database.Open(); v_database.TransferFromFile( args[0], ";", "", false, System.Text.Encoding.UTF8, "cotacoes", // tabela existe "(dia,codmoeda,tipomoeda,siglamoeda,taxacompra,taxavenda,parcompra,parvenda)", v_cmd, v_progress, v_error ); v_database.Close(); v_watch.Stop; Console.WriteLine("Tamanho de bloco = {0}, tempo total = {1}", v_bloco, v_watch.Elapsed); } */ }
/// <summary> /// Evento de erro de transferência de um arquivo para o banco de dados temporário. /// </summary> private static void OnError(Spartacus.Utils.ErrorEventClass obj, Spartacus.Utils.ErrorEventArgs e) { throw new Spartacus.Database.Exception(e.v_message); }
/// <summary> /// Constrói o banco de dados temporário. /// </summary> /// <param name="p_sql">Texto SQL.</param> private void BuildCache(string p_sql) { Spartacus.Utils.ProgressEventClass v_progress; Spartacus.Utils.ErrorEventClass v_error; Spartacus.Utils.Cryptor v_cryptor; System.IO.FileInfo v_info; long v_totalsize; v_totalsize = 0; foreach (string s in this.ExtractFromString(p_sql, "[", "]")) { if (!s.StartsWith(".")) { v_info = new System.IO.FileInfo(this.v_service + "/" + s); if (v_info.Exists) { if (p_sql.ToLower().Contains("drop table [" + s.ToLower() + "]")) { this.v_tabletodrop = s.ToLower(); } v_totalsize += v_info.Length; this.v_tables.Add(s); } else { if (p_sql.ToLower().Contains("create table [" + s.ToLower() + "]")) { this.v_tables.Add(s.ToLower()); } else { throw new Spartacus.Database.Exception("File '{0}' does not exist and is not going to be created.", s); } } } } if (v_totalsize > this.v_cachethreshold) { v_cryptor = new Spartacus.Utils.Cryptor("spartacus"); this.v_tempdatabase = v_cryptor.RandomString() + ".db"; this.v_database = new Spartacus.Database.Sqlite(this.v_tempdatabase); } else { this.v_tempdatabase = ""; this.v_database = new Spartacus.Database.Memory(); } this.v_database.SetTimeout(-1); this.v_database.SetExecuteSecurity(false); this.v_database.Open(); this.v_database.Execute("PRAGMA synchronous=OFF"); v_progress = new Spartacus.Utils.ProgressEventClass(); v_progress.ProgressEvent += new Spartacus.Utils.ProgressEventClass.ProgressEventHandler(OnProgress); v_error = new Spartacus.Utils.ErrorEventClass(); v_error.ErrorEvent += new Spartacus.Utils.ErrorEventClass.ErrorEventHandler(OnError); foreach (string t in this.v_tables) { v_info = new System.IO.FileInfo(this.v_service + "/" + t); if (v_info.Exists) { this.v_database.TransferFromFile(this.v_service + "/" + t, this.v_separator, this.v_delimiter, this.v_header, this.v_encoding, "[" + t + "]", v_progress, v_error); } } }
/// <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; this.BuildCache(p_query); v_transfered = this.v_database.Transfer(p_query, p_insert, p_destdatabase, p_progress, p_error); this.DestroyCache(); return(v_transfered); }
public static void Main(string[] args) { Spartacus.Database.Generic v_database; Spartacus.Utils.ProgressEventClass v_progress; Spartacus.Utils.ErrorEventClass v_error; Spartacus.Database.Command v_cmd; v_database = new Spartacus.Database.Sqlite("../../../databases/cotacoes.db"); v_progress = new Spartacus.Utils.ProgressEventClass(); v_progress.ProgressEvent += OnProgress; v_error = new Spartacus.Utils.ErrorEventClass(); v_error.ErrorEvent += OnError; // carregando arquivo XLSX para tabela que não existe /*v_database.TransferFromFile( args[0], "cotacoes_excel", v_progress, v_error );*/ // carregando arquivo CSV para tabela que não existe /*v_database.TransferFromFile( args[0], ";", "", false, System.Text.Encoding.UTF8, "cotacoes_tmp", // tabela não existe v_progress, v_error );*/ // carregando arquivo CSV para tabela que existe v_cmd = new Spartacus.Database.Command(); v_cmd.v_text = "(#col0#,#col1#,#col2#,#col3#,#col4#,#col5#,#col6#,#col7#)"; v_cmd.AddParameter("col0", Spartacus.Database.Type.STRING); v_cmd.AddParameter("col1", Spartacus.Database.Type.INTEGER); v_cmd.AddParameter("col2", Spartacus.Database.Type.STRING); v_cmd.AddParameter("col3", Spartacus.Database.Type.STRING); v_cmd.AddParameter("col4", Spartacus.Database.Type.REAL); v_cmd.SetLocale("col4", Spartacus.Database.Locale.EUROPEAN); v_cmd.AddParameter("col5", Spartacus.Database.Type.REAL); v_cmd.SetLocale("col5", Spartacus.Database.Locale.EUROPEAN); v_cmd.AddParameter("col6", Spartacus.Database.Type.REAL); v_cmd.SetLocale("col6", Spartacus.Database.Locale.EUROPEAN); v_cmd.AddParameter("col7", Spartacus.Database.Type.REAL); v_cmd.SetLocale("col7", Spartacus.Database.Locale.EUROPEAN); v_database.TransferFromFile( args[0], ";", "", false, System.Text.Encoding.UTF8, "cotacoes", // tabela existe "(dia,codmoeda,tipomoeda,siglamoeda,taxacompra,taxavenda,parcompra,parvenda)", v_cmd, v_progress, v_error ); // salvando arquivo XLSX com os dados //v_database.TransferToFile("select * from cotacoes", "export_cotacoes.xlsx"); }