TransWikia.com

Problemas al ejecutar Procedimiento almacenado dentro de un loop

Stack Overflow en español Asked by Jhon Alexander Jimenez Morales on January 24, 2021

actualmente quiero consumir un procedimiento almacenado que tengo en una base de datos mysql, la aplicacion es .Net core. El procedimiento almacenado necesita unos parametros, el problema esta que cuando intento utilizar este procedimiento desde la aplicacion en un foreach no hace absolutamente nada.

public bool Actualizar(string connectionStringSqlServer)
    {
        //obtener los registros que aun no se han actualizado en la base de datos 
        var result = ObtenerPagos(connectionStringSqlServer);

        if (result.Count != 0)
        {
            string connection = "#################";
            MySqlConnection mysqConexion = new MySqlConnection();
            mysqConexion.ConnectionString = connection;                              
            mysqConexion.Open();
           

            for (int i = 0; i < result.Count; i++ )
            {
                
                Persona resultPersona = ConsumirClienteCredit10Test(int.Parse(result[i].NumeroCedula), connection);

                MySqlCommand comando = new MySqlCommand();                   
                comando.Connection = mysqConexion;

               // comando.Parameters.Clear();
                comando.CommandText = "Pago"; //nombre del procedimiento almacenado
                comando.CommandType = CommandType.StoredProcedure;        
                
                comando.Parameters.Add("@IdCupo", (MySqlDbType)SqlDbType.Int).Value = resultPersona.IdCupo;
                comando.Parameters.Add("@Cedula", (MySqlDbType)SqlDbType.Int).Value = resultPersona.Cedula;
                comando.Parameters.Add("@ValorPresu", (MySqlDbType)SqlDbType.Decimal).Value = resultPersona.ValorMinimo;
                comando.Parameters.Add("@ValorSugerido", (MySqlDbType)SqlDbType.Decimal).Value = resultPersona.ValorProximo;
                comando.Parameters.Add("@ValorTotal", (MySqlDbType)SqlDbType.Decimal).Value = resultPersona.ValorTotal;
                comando.Parameters.Add("@ValorPagado", (MySqlDbType)SqlDbType.Decimal).Value = result[i].Valor;
                comando.Parameters.Add("@CodSucursal", (MySqlDbType)SqlDbType.Int).Value = 998;

                var resultadoPersona = comando.ExecuteNonQuery();
                
            }
            
            mysqConexion.Close();
            Console.WriteLine("Termino procedimiento almacenado");
        }
        else
        {
            Console.WriteLine("No contiene resultados");
        }

            return true;

    }

One Answer

Los resolvi utilizando await en cmd.ExecuteNonQueryAsync();

try
            {
                MySqlConnection mysqConexion = new MySqlConnection();
                mysqConexion.ConnectionString = connectionMysqlcredi10;
                mysqConexion.Open();

                MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = mysqConexion;
                //cmd.CommandText = "InsertarUsuario"; //name stored procedure
                cmd.CommandText = "Pago"; //name stored procedure
                cmd.CommandType = CommandType.StoredProcedure;

                for (int i = 0; i < result.Count; i++)
                {
                    
                        Persona resultClient = InformationClient(int.Parse(result[i].NumeroCedula), connectionMysqlcredi10);

                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("@IdCupo", resultClient.IdCupo);
                        cmd.Parameters.AddWithValue("@Cedula", resultClient.Cedula);
                        cmd.Parameters.AddWithValue("@ValorPresu", resultClient.ValorMinimo);
                        cmd.Parameters.AddWithValue("@ValorSugerido", resultClient.ValorProximo);
                        cmd.Parameters.AddWithValue("@ValorTotal", resultClient.ValorTotal);
                        cmd.Parameters.AddWithValue("@ValorPagado", result[i].Valor);
                        cmd.Parameters.AddWithValue("@CodSucursal", 998);
                        cmd.Parameters["@IdCupo"].Direction = ParameterDirection.Input;
                        cmd.Parameters["@Cedula"].Direction = ParameterDirection.Input;
                        cmd.Parameters["@ValorPresu"].Direction = ParameterDirection.Input;
                        cmd.Parameters["@ValorSugerido"].Direction = ParameterDirection.Input;
                        cmd.Parameters["@ValorTotal"].Direction = ParameterDirection.Input;
                        cmd.Parameters["@ValorPagado"].Direction = ParameterDirection.Input;
                        cmd.Parameters["@CodSucursal"].Direction = ParameterDirection.Input;

                        int rowsAffected = await cmd.ExecuteNonQueryAsync();
                                               
                    
                }

                mysqConexion.Close();
              

            }
            catch (Exception ex)
            {
                Console.WriteLine("Error en: " + ex);

                throw;
            }

Answered by Jhon Alexander Jimenez Morales on January 24, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP