none
Importação de Dados Access para SQLServer 2008 com C# RRS feed

  • Pergunta

  • Bom dia a todos!

    Estou migrando o sistema de um cliente onde a base de dados do sistema legado é ACCESS. Existe uma tabela que é do contas a receber onde são armazenados os títulos a receber que no select que eu preciso está em torno e 1 milhão e 700 mil registros.

    A grande questão é que eu criei um programa em C# que conecta neste banco ACCESS e executa o select e joga estes dados em um DataTable, feito isto eu faço a leitura deste DataTable e carrego os parâmetros para executar o insert no SQLSERVER.

    Segue uma parte do código:

    foreach (DataRow row in dsDados.Tables[0].Rows)
    {
                        cmd.Parameters.Add("@CLIEN", SqlDbType.Char, 14, "CLIEN").Value = row["Cod_Cli"].ToString().PadLeft(14, '0');
                        cmd.Parameters.Add("@DTEMI", SqlDbType.DateTime, 8, "DTEMI").Value = DateTime.Now.ToString();
                        cmd.Parameters.Add("@DTVEN", SqlDbType.DateTime, 8, "DTVEN").Value = String.IsNullOrEmpty(row["Vencimento"].ToString()) ? "1900-01-01 00:00:00.000" : row["Vencimento"].ToString();
                        cmd.Parameters.Add("@DTPRO", SqlDbType.DateTime, 8, "DTPRO").Value = String.IsNullOrEmpty(row["Vencimento"].ToString()) ? "1900-01-01 00:00:00.000" : row["Vencimento"].ToString();
                        cmd.Parameters.Add("@DTPDV", SqlDbType.DateTime, 8, "DTPDV").Value = "1900-01-01 00:00:00.000";
    
    	cmd.ExecuteNonQuery();
    	cmd.Connection.Close();
    }

    Eu gostaria muito de usar EF mas não tive autorização para o mesmo então estou tendo que fazer tudo na mão.

    Minha dúvida é de como melhorar a performance pois o volume é muito grande, se eu estou jogando estes dados em um DataTable logo estes valores estão em memória e de fato prejudica a performance de vários fatores (máquina, banco, leitura etc...). Existe alguma técnica ou melhor forma para executar esta função???

    Obs.: Não estou usando nenhuma ferramenta de migração pois eu faço diversos cálculos e tratamento de dados para jogar eles no meu banco de dados.

    Abraço a todos!

    Léo


    Leonardo Jacques da Silva Desenvolvedor .net


    • Editado Leosul quinta-feira, 1 de março de 2012 14:12 Detalhe
    quinta-feira, 1 de março de 2012 14:10

Todas as Respostas

  • Bom dia.

    Voce pode fazer a leitura, coloque em um arquivo texto(com os dados validados e calculos), faca a leitura do arquivo texto e jogue os dados no Sql Server.

    Existe ferramentas que fazem este trabalho - SqlServer Integration Services(uma delas)


    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
    Blog .Net Descomplicado

    sexta-feira, 2 de março de 2012 14:06
  • Olá Edson, obrigado pela resposta.

    Eu gostaria de ir um pouco mais além nesta discussão pois minha dúvida é em usar a melhor programação para ganhar o máximo de desempenho. Neste caso estou limitado a usar somente C# para tudo. A leitura e gravação registro a registro vai comprometer muito o meu desempenho. Será que existem outras possibilidades, técnicas ou api's?

    Léo


    Leonardo Jacques da Silva Desenvolvedor .net

    sexta-feira, 2 de março de 2012 14:53
  • Boa tarde,

    minha opniao..se quer performance

    gere os arquivos para um txt e use o Bulk insert do sql server:

    http://msdn.microsoft.com/pt-br/library/ms175915.aspx

    é apenas minha opniao..pode ter outras!


    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
    Blog .Net Descomplicado

    sexta-feira, 2 de março de 2012 16:38