Inquiridor
Importação de Dados Access para SQLServer 2008 com C#

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
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 -
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
-
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- Sugerido como Resposta AndreAlvesLimaModerator quarta-feira, 14 de março de 2012 20:28