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
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