4
In a *loop* que faz
Insert` in an Excel spreadsheet it is mandatory to open and close the connection ?
I analyzed the following, depending on the amount of registration it may take up to 1:30 to do the insert
.
Example: To Procedure returned 4443 lines and took right from 1h48 to do all the
insert
I tried to open the connection before *loop8 and only close as soon as it ends, but this way corrupts the spreadsheet.
The application below executes a Procedure, stores in DataTable
, does the insert
and then download the spreadsheet
Follows code.
private void AtualizarPerformanceEntrega()
{
try
{
DataTable dt = ExportPerformanceEntrega();
string dir = Session.SessionID;
string sFileXLSX = Server.MapPath(dir) + @"\Performance_Entrega_base.xls";
if (File.Exists(sFileXLSX))
{
string strConnXLSX = (@"Provider =Microsoft.ACE.OLEDB.12.0;Data Source= " + sFileXLSX + "; Extended Properties='Excel 12.0 Xml;HDR=YES;ReadOnly=False';");
foreach (DataRow row in dt.Rows)
{
using (OleDbConnection connection = new OleDbConnection(strConnXLSX))
{
string strSQL;
OleDbCommand cmd;
if ((string)row["StatusEntrega"] == "No Prazo" || (string)row["StatusEntrega"] == "Fora do Prazo" || (string)row["StatusEntrega"] == "Antes do Prazo")
{
if (dt.Rows.Count > 0)
{
strSQL = "INSERT INTO [Base Entregue$] " +
" (NFEmpresa,NFNumero,NFSerie,NFCliente,NFPedido,NFCidade,NFUF,Regiao,NFTransp,NomeTransp,DataEmbarque,DataPrevEntrega,DataEntrega,StatusEntrega,DiasAtraso,CodOcorrencia,DescrOcorrencia) " +
" VALUES (@NFEmpresa, @NFNumero, @NFSerie, @NFCliente, @NFPedido, @NFCidade, @NFUF, @Regiao, @NFTransp, @NomeTransp, @DataEmbarque, @DataPrevEntrega, " +
" @DataEntrega, @StatusEntrega, @DiasAtraso, @CodOcorrencia, @DescrOcorrencia)";
cmd = new OleDbCommand(strSQL, connection);
cmd.Parameters.Add(new OleDbParameter("?", row["NFEmpresa"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFNumero"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFSerie"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFCliente"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFPedido"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFCidade"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFUF"]));
cmd.Parameters.Add(new OleDbParameter("?", row["Regiao"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFTransp"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NomeTransp"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DataEmbarque"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DataPrevEntrega"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DataEntrega"]));
cmd.Parameters.Add(new OleDbParameter("?", row["StatusEntrega"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DiasAtraso"]));
cmd.Parameters.Add(new OleDbParameter("?", row["CodOcorrencia"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DescrOcorrencia"]));
//Abrindo a conexão
connection.Open();
//Executando o INSERT
cmd.ExecuteNonQuery();
//Fechando a conexão
connection.Close();
}
}
if ((string)row["StatusEntrega"] == "Não Entregue")
{
if (dt.Rows.Count > 0)
{
strSQL = "INSERT INTO [Base Não Entregue$] " +
" (NFEmpresa,NFNumero,NFSerie,NFCliente,NFPedido,NFCidade,NFUF,Regiao,NFTransp,NomeTransp,DataEmbarque,DataPrevEntrega,DataEntrega,StatusEntrega,DiasAtraso,CodOcorrencia,DescrOcorrencia) " +
" VALUES (@NFEmpresa, @NFNumero, @NFSerie, @NFCliente, @NFPedido, @NFCidade, @NFUF, @Regiao, @NFTransp, @NomeTransp, @DataEmbarque, @DataPrevEntrega, " +
" @DataEntrega, @StatusEntrega, @DiasAtraso, @CodOcorrencia, @DescrOcorrencia)";
cmd = new OleDbCommand(strSQL, connection);
cmd.Parameters.Add(new OleDbParameter("?", row["NFEmpresa"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFNumero"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFSerie"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFCliente"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFPedido"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFCidade"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFUF"]));
cmd.Parameters.Add(new OleDbParameter("?", row["Regiao"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NFTransp"]));
cmd.Parameters.Add(new OleDbParameter("?", row["NomeTransp"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DataEmbarque"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DataPrevEntrega"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DataEntrega"]));
cmd.Parameters.Add(new OleDbParameter("?", row["StatusEntrega"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DiasAtraso"]));
cmd.Parameters.Add(new OleDbParameter("?", row["CodOcorrencia"]));
cmd.Parameters.Add(new OleDbParameter("?", row["DescrOcorrencia"]));
//Abrindo a conexão
connection.Open();
//Executando o INSERT
cmd.ExecuteNonQuery();
//Fechando a conexão
connection.Close();
}
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}