Tenho um sistema que roda em 2 máquinas, porém como elas não estão em redes (dificuldades do local) eu fiz com que o banco de dados da segunda possa ser salvo em um pendrive e ser importado para o banco de dados principal. Até ai tudo funcionou. Estou trabalhando com banco de Dados Access 2007 (.accdb)
Porém, em 15 dias foi gerado, ao todo, 12 mil registros. E a importação, linha por linha, de um banco para o outro, está demorando quase meia-hora!!! Imagine quando o banco crescer ainda mais! Está inviável!
O código que usei, à principio, foi este, onde ele preenche um Data Table com o conteúdo a ser importado e depois disso, importa, linha por linha, para o dataset do meu banco:
String conexao ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+@txtCaminho.Text+"; Persist Security Info=False;";String consultasql;
consultasql ="SELECT * from tblAnalises";
OleDbDataAdapter da =newOleDbDataAdapter(consultasql,conexao);
//Cria a dataTableDataTable dt =newDataTable();
da.Fill(dt);
Int32 j =0;Int32 i;
progressBar1.Maximum= dt.Rows.Count;
progressBar1.Value=0;
OLHO_NA_LATADataSet2.tblAnalisesRow linhaNova;
for(i =0; i < dt.Rows.Count; i++){
linhaNova = oLHO_NA_LATADataSet2.tblAnalises.NewtblAnalisesRow();
linhaNova.CodLinha=Convert.ToInt16(dt.Rows[i][1]);
linhaNova.Funcionario=Convert.ToInt32(dt.Rows[i][2]);
linhaNova.CódigoBarras =Convert.ToInt16(dt.Rows[i][3]);
linhaNova.Texto_Legivel=Convert.ToInt16(dt.Rows[i][4]);
linhaNova.LogoMarca=Convert.ToInt16(dt.Rows[i][5]);
linhaNova.CódigoData =Convert.ToInt16(dt.Rows[i][6]);
linhaNova.InteriorFundo=Convert.ToInt16(dt.Rows[i][7]);
linhaNova.MarcasImpressão =Convert.ToInt16(dt.Rows[i][8]);
linhaNova.data_hora =Convert.ToDateTime(dt.Rows[i][9]);
linhaNova.so_data =Convert.ToDateTime(dt.Rows[i][10]);
linhaNova.so_hora =Convert.ToDateTime(dt.Rows[i][11]);//
linhaNova.CódigoBarraLata =Convert.ToString(dt.Rows[i][12]);
progressBar1.Value++;
// lblContagem.Text = i.ToString() + " de " + dt.Rows.Count.ToString() ;
try{
oLHO_NA_LATADataSet2.tblAnalises.Rows.Add(linhaNova);//efetua a adição
this.tblAnalisesTableAdapter1.Update(linhaNova);//atualiza o table adapter}catch(Exception ex){
j++;//atualiza contagem de registros já existentes (j)}
}
oLHO_NA_LATADataSet2.AcceptChanges();
Como eu poderia fazer pra copiar, do Data Table, de uma vez só para o banco?
Eu consegui passar tudo pro Dataset, usando o código abaixo. Porém eu não consigo, uma vez que os dados estão no dataset, não consigo salvá-los efetivamente no banco!!! Vejam:
String conexao ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+@txtCaminho.Text+"; Persist Security Info=False;";String consultasql;
consultasql ="SELECT * from tblAnalises";
OleDbDataAdapter da =newOleDbDataAdapter(consultasql,conexao);
//Cria a dataTableDataTable dt =newDataTable();
da.Fill(dt);
dataGridView1.DataSource= dt;
da.Fill(oLHO_NA_LATADataSet2,"tblAnalises"
oLHO_NA_LATADataSet2.AcceptChanges();
oLHO_NA_LATADataSet2.tblAnalises.AcceptChanges();
Alguém tem alguma sugestão para fazer funcionar o segundo código, ou alguma outra alternativa para fazer o mesmo serviço, com mais eficiência??? Tentei usar SQLBunkCopy, mas não consegui: parece que só funciona em SQL Server.
Agradeço desde já a atenção! Um abraço,
Gabriel.