在网上阅读了一篇有趣的文章后: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
1条答案
按热度按时间0yg35tkg1#
我要么删除这行:
或者,我会在
try
的末尾添加以下行:至于你会选择哪一个;因为它是一个存储过程,除非存储过程中存在一些内部覆盖问题,需要在存储过程之外启动一个事务,否则我会将其删除。如果您有或计划有多个必须全部成功或全部失败的操作,那么我会保留/提交它。