Ir para conteúdo
Fórum Script Brasil
  • 0

Pesquisa em BD muito lenta


pjava

Pergunta

Sei que a forma mais rápida, é trabalhar diretamente no BD, porem, no meu caso não é possível, então apelei para uma aplicação. Meu caso é o seguinte: Numa dada tabela tenho um campo de tamanho 20 posições. As quatro primeiras forma o que chamamos de operacao, uma sequecencia de zeros, que não tem um tmanho exato(variável) e depois uma sequecencia de dígitos. Isso vai para os bancos q meu cliente trabalha. Acontece, que quando vem de um determinado banco(Itau), eles mandam apenas os últimos digitos apos a sequencia de zeros, em uma planilha que varia: Valores com: 6,7,8,9,10,11,12,13,14 dígitos. O meu cliente é leigo e eu não posso mndar um script para eles, para substring com 6,7,8..14 posições, para eles ficarem executando lá. quando vou lá eu faço isso e cobro por script, o que eles não querem mais. Aí fiz uma aplicação, mas está lenta demais. Veja o código quase completo(ainda falta o código da geração da planilha final) do aplicativo.

private void Execute()

{

string sql = "";

string temp = "";

string caminho = edtPath.Text;

string[] valor;

int tamanho = 0;

string contrato_temp = "";

string campo = "";

MySqlConnection conn = new MySqlConnection();

conn.ConnectionString = ConfigurationManager.ConnectionStrings["conexaoMysql"].ConnectionString;

MySqlConnection conn1 = new MySqlConnection();

conn1.ConnectionString = ConfigurationManager.ConnectionStrings["conexaoMysql"].ConnectionString;

MySqlCommand cmd = new MySqlCommand();

conn.Open();

conn1.Open();

DataTable tbl = new DataTable();

tbl.Columns.Add("Operacao", typeof(string));

tbl.Columns.Add("Contrato", typeof(string));

tbl.Columns.Add("Data de Vencimento", typeof(DateTime));

tbl.Columns.Add("Empresa", typeof(string));

tbl.Columns.Add("Status", typeof(string));

tbl.Columns.Add("Tipo de Envio", typeof(string));

tbl.Columns.Add("Data de Registro", typeof(DateTime));

tbl.Columns.Add("Data de Postagem", typeof(DateTime));

tbl.Columns.Add("Data de Retorno", typeof(DateTime));

sql = "select contrato from temp_baixa_arquivo";

cmd.Connection = conn;

cmd.CommandText = sql;

MySqlDataReader dr = cmd.ExecuteReader();

tamanho = 17999;

int i = 0;

valor = new string[tamanho];

while (dr.Read()& i < tamanho)

{

contrato_temp = dr["contrato"].ToString();

valor = contrato_temp;

i += 1;

}

//while (dr.Read())

for (int j = 0; j < valor.Length; j++ )

{

campo = valor[j].ToString();

sql = "select a.campo027 as 'Operacao',a.contrato, a.campo028 as 'Data_Contrato', 'CLS' " +

",a.dtreg as 'Data_Registro', a.dtreg as 'Data_Postagem',b.dtbaixa as 'Data_Retorno' " +

",b.TPOCO as 'Status',a.tipodocumento as 'Tipo_Envio' " +

"from " +

"baixas b inner join arquivo a on(a.registro = b.registro) " +

"where " +

"a.contrato like '%" + campo + "'" +

" and a.codcli = 60 ";

MySqlCommand cmdTemp = new MySqlCommand();

cmdTemp.Connection = conn1;

cmdTemp.CommandText = sql;

MySqlDataReader drtemp = cmdTemp.ExecuteReader();

while (drtemp.Read())

{

string oper = drtemp["Operacao"].ToString();

string contrat = campo;

string dt_contrat = drtemp["Data_Contrato"].ToString();

string cls = drtemp["CLS"].ToString();

string dt_reg = drtemp["Data_Registro"].ToString();

string dt_post = drtemp["Data_Postagem"].ToString();

string dt_ret = drtemp["Data_Retorno"].ToString();

string status = drtemp["Status"].ToString();

string envio = drtemp["Tipo_Envio"].ToString();

DataRow lin = tbl.NewRow();

lin["Operacao"] = oper;

lin["Contrato"] = contrat;

lin["Data de Vencimento"] = dt_contrat;

lin["Empresa"] = "CLS";

lin["Status"] = status;

lin["Tipo de Envio"] = envio;

lin["Data de Registro"] = dt_reg;

lin["Data de Postagem"] = dt_post;

lin["Data de Retorno"] = dt_ret;

tbl.Rows.Add(lin);

}

drtemp.Dispose();

cmdTemp.Dispose();

}

dr.Dispose();

conn.Close();

} //Fim do Execute

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...