After error in database insertion through c# I cannot insert remaining lines

Asked

Viewed 65 times

1

Hello,

When executing list in . csv and inserting them in PROC by C# error is given on one of the lines, but I would like that after the error the execution continues, follows part:

Try {

Reader = cmd.Executereader();

Catch(Exception ex)

{

message;

When you’re here I’d like the code to continue...

}

Even in this way is not yet possible, as I can do?

try   {

            string ProcedureInsertPROC = "PROC";
            string ProcedureInsertProdutoPROC = "PROC";
            string ProcedureInsertPracaPROC = "PROC";
            SqlDataReader reader;
            List<string> idsRollback = new List<string>();
            idsRollback.Add("PROC;DEPA;PROD;PRACA");
            string ultimoPROCId = string.Empty;
            string ultimoDepaId = string.Empty;

            using (SqlConnection sqlConn = new SqlConnection(conexao))
            {

                foreach (var PROC in UltimoDictImportadoChange)
                {
                    bool linhaok = true;

                    if (string.IsNullOrEmpty(PROC.valorqualquer) ||
                        string.IsNullOrEmpty(PROC.valorqualquer) ||
                        string.IsNullOrEmpty(PROC.valorqualquer) ||
                        PROC.Peso < 0 ||
                        PROC.valorqualquer < 0 ||
                        PROC.valorqualquer < 0)
                    {
                        linhaok = false;
                    }

                    if (linhaok)
                    {
                        using (SqlCommand cmd = new SqlCommand(ProcedureInsertPROC, sqlConn))
                        {
                            sqlConn.Open();
                            cmd.CommandType = CommandType.StoredProcedure;

                            cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                            cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                            cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                            cmd.Parameters.AddWithValue("@NOME", v);
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.Fabricante, Fabricantes));
                            cmd.Parameters.AddWithValue("@NOME", PROC.Palavra_para_pesquisa);
                            cmd.Parameters.AddWithValue("@NOME", PROC.a;
                            cmd.Parameters.AddWithValue("@NOME", PROC.b);
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.v));
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.prod.valorqualquer));
                            cmd.Parameters.AddWithValue("@NOME", PROC.valorqualquer);
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.Familia,prod.valorqualquer));
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.Tipo, v));
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.Controle, v));
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.Departamento.Value, valorqualquer));
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.valorqualquer, valorqualquer));
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.valorqualquer.Value, valorqualquer));
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.valorqualquer.Value, valorqualquer));
                            cmd.Parameters.AddWithValue("@NOME", CustomStringConvert.ToParameter(PROC.valorqualquer.Value, valorqualquer));

                            reader = cmd.ExecuteReader();

                            while (reader.Read())
                            {
                                ultimoPROCId = reader["PROC"].ToString();
                                ultimoDepaId = reader["DEPARTAMENTO"].ToString();
                                idsRollback.Add(ultimoPROCId + ";" + ultimoDepaId + ";0;0");
                            }

                            sqlConn.Close();
                        }

                        foreach (var prod in PROC.Produtos)
                        {

                            if (string.IsNullOrEmpty(prod.CodExterno) ||
                                prod.Quantidade < 1 ||
                                prod.PorcentagemDesconto < 0)
                            {
                                literalTabelaImportacao.Text = AlertErrorBootstrap("Houve um erro ao inserir os produtos referentes ao PROC com o código externo " + PROC.valorqualquer + "<br />Valide os dados importados no backoffice para evitar duplicidades.");
                                return;
                            }

                            using (SqlCommand cmd = new SqlCommand(ProcedureInsertProdutoPROC, sqlConn))
                            {
                                sqlConn.Open();
                                cmd.CommandType = CommandType.StoredProcedure;

                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cod_externo = prod.CodExterno;
                                reader = cmd.ExecuteReader();

                                while (reader.Read())
                                {
                                    if (reader["PRODUTO_PROC"].ToString().Count() < 3)
                                    {
                                        literalTabelaImportacao.Text = AlertErrorBootstrap("Houve um erro ao inserir os produtos referentes ao PROC com o código externo " + PROC.valorqualquer + "<br />Valide os dados importados no backoffice para evitar duplicidades.");
                                        return;
                                    }
                                    idsRollback.Add(ultimoPROCId + ";NULL;" + reader["PRODUTO_PROC"].ToString() + ";0");
                                }

                                sqlConn.Close();
                            }

                        }

                        catch(exception ex){

                        }

Hugs,

  • Good afternoon @rock.ownar. I don’t know if it would be the best option in terms of performance, but if you want the flow inside the foreach to continue you could put the Try catch inside the foreach, because when the error occurs it will not leave the loop. The way you did, every error will perform the catch that is out of the loop and will not continue even. Note The catch at the end of the answer seems not to be indented correctly, this can give a mess...rs.

4 answers

2

foreach row in xpto
{
   try
   {
       // Executas aqui o código, quando continuar 
       // Quando rebentar ou acabar vai ao próximo
   }
   catch(Exception ex)
   {

   }
}
  • Hi Marcell this only displays the message but does not let me continue.

0

To ensure that an instruction is executed, whether or not an exception is cast/captured in the catch, write her down in a block Finally.

...

try {

    reader = cmd.ExecuteReader();

}
Catch(Exception ex)    
{
    Console.WriteLine(icEx.Message);
}
finally
{
    //Insira aqui o código que você deseja executar, 
    //quer seja ou não lançada uma exceção, exemplo: reader.Close(); 
}

...

0

 foreach (var prod in PROC.Produtos)
                        {

                            if (string.IsNullOrEmpty(prod.CodExterno) ||
                                prod.Quantidade < 1 ||
                                prod.PorcentagemDesconto < 0)
                            {
                                literalTabelaImportacao.Text = AlertErrorBootstrap("Houve um erro ao inserir os produtos referentes ao PROC com o código externo " + PROC.valorqualquer + "<br />Valide os dados importados no backoffice para evitar duplicidades.");
                                return;
                            }

                            using (SqlCommand cmd = new SqlCommand(ProcedureInsertProdutoPROC, sqlConn))
                            {
                                sqlConn.Open();
                                cmd.CommandType = CommandType.StoredProcedure;

                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cmd.Parameters.AddWithValue("@NOME", prod.valorqualquer);
                                cod_externo = prod.CodExterno;
                                reader = cmd.ExecuteReader();

                                while (reader.Read())
                                {
                                    if (reader["PRODUTO_PROC"].ToString().Count() < 3)
                                    {
                                        literalTabelaImportacao.Text = AlertErrorBootstrap("Houve um erro ao inserir os produtos referentes ao PROC com o código externo " + PROC.valorqualquer + "<br />Valide os dados importados no backoffice para evitar duplicidades.");
                                        return;
                                    }
                                    idsRollback.Add(ultimoPROCId + ";NULL;" + reader["PRODUTO_PROC"].ToString() + ";0");
                                }

                                sqlConn.Close();
                            }

                        }

                        catch(exception){
                           continue;
                        }
  • I’ve tried it doesn’t work

0


Personal in the code itself I decided to put only a new select before running the Precedent, so I consulted if the data existed and could continue the Try catch using them even so the code stopped, see that before the post I already used it.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.