从C#调用DB2存储过程

wf82jlnq  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(209)

在网上阅读了一篇有趣的文章后:Calling DB2 stored procedures from .NET applications
我想与大家分享最近遇到的一个派生代码问题:

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

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

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

    // assume a DB2Connection 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; 

    // Register input-output and output parameters for the DB2Command
    cmd.Parameters.Add( new DB2Parameter("@NAME", name));       #of string type
    cmd.Parameters.Add( new DB2Parameter("@ADDRESS_LINE", adr)); #of string type
    cmd.Parameters.Add( new DB2Parameter("@REGNUM", reg));  #of string type
    cmd.Parameters.Add( new DB2Parameter("@TRANSA", transa_date)); #of date type (in DB2 table)

    // Call the stored procedure
    Console.WriteLine(" Call stored procedure named " + procName);
    cmd.ExecuteNonQuery();
}

上面的代码既不会在cmd.ExecuteNonQuery()处生成异常,也不会将(预期的)行插入到表中。
因此,希望通过这篇文章了解这种现象背后的原因。

  • 谢谢-谢谢

N.B:正在执行(手动)

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

IDE中得命令确实有效(例如,将行插入到表中).
DB2版本:11.5.6.0.00000.008

0yg35tkg

0yg35tkg1#

我要么删除这行:

DB2Transaction trans = conn.BeginTransaction();

或者,我会在try的末尾添加以下行:

trans.Commit();

至于你会选择哪一个;因为它是一个存储过程,除非存储过程中存在一些内部覆盖问题,需要在存储过程之外启动一个事务,否则我会将其删除。如果您有或计划有多个必须全部成功或全部失败的操作,那么我会保留/提交它。

相关问题