es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamar a un procedimiento almacenado de DB2 desde C#.

Después de leer un artículo interesante en línea: Llamando a procedimientos almacenados de DB2 desde aplicaciones .NET

Me gustaría compartir un problema que se encontró recientemente con un código derivado:

DateTime transa_date = DateTime.ParseExact(trandate, "yyyy-MM-dd", CultureInfo.InvariantCulture);

DB2Connection conn = new DB2Connection(MyDb2ConnectionString);
conn.Open();

try
{
    // MyDb2Connection.Open();
    // conn.Open();

    // supongamos que hay una DB2Connection llamada conn
    DB2Transaction trans = conn.BeginTransaction();
    cmd = conn.CreateCommand();

    procName = "MYTBLSCHEMA.TEST";
    procCall = "CALL MYTBLSCHEMA.TEST(@NAME, @ADDRESS_LINE, @REGNUM, @TRANSA)";

    cmd.Transaction = trans;
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.CommandText = procCall;

    // Registrar parámetros de entrada-salida y salida para el DB2Command
    cmd.Parameters.Add(new DB2Parameter("@NAME", name));       #de tipo string
    cmd.Parameters.Add(new DB2Parameter("@ADDRESS_LINE", adr)); #del tipo string
    cmd.Parameters.Add(new DB2Parameter("@REGNUM", reg));  #de tipo string
    cmd.Parameters.Add(new DB2Parameter("@TRANSA", transa_date)); #de tipo fecha (en la tabla DB2)

    // Llamar al procedimiento almacenado
    Console.WriteLine("Llamando al procedimiento almacenado llamado " + procName);
    cmd.ExecuteNonQuery();
}

El código anterior no genera una excepción en cmd.ExecuteNonQuery() ni inserta la fila (esperada) en la tabla.

Por lo tanto, espero comprender a través de esta publicación la lógica subyacente de dicho fenómeno.

Gracias.

N.B: Ejecutar (manualmente)

CALL MYTBLSCHEMA.TEST('test', 'test_address_', 'test_num', 2021-01-01)

desde el IDE funciona (por ejemplo, inserta la fila en la tabla).

Versión de DB2: 11.5.6.0.00000.008

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Problema al llamar a procedimientos almacenados de DB2 desde aplicaciones .NET

    El código anterior intenta llamar a un procedimiento almacenado llamado MYTBLSCHEMA.TEST utilizando las clases DB2Connection y DB2Transaction en una aplicación .NET. El procedimiento almacenado toma cuatro parámetros: @NAME, @ADDRESS_LINE, @REGNUM y @TRANSA, siendo @TRANSA de tipo fecha.

    Sin embargo, el código no inserta la fila esperada en la tabla ni genera ninguna excepción en cmd.ExecuteNonQuery().

    El autor original intentó ejecutar la misma llamada al procedimiento almacenado manualmente desde el IDE, lo cual funcionó correctamente e insertó la fila en la tabla.

    La razón detrás de este problema no está clara y el autor espera comprender la lógica que subyace a este fenómeno.

    La versión de DB2 utilizada en este caso es 11.5.6.0.00000.008.

    Artículo de referencia: Llamada a procedimientos almacenados de DB2 desde aplicaciones .NET

Comments are closed.