【发布时间】:2021-12-12 05:11:43
【问题描述】:
在线阅读一篇有趣的文章后: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() 处生成异常,也不会将(预期的)行插入到表中。
因此,希望通过这篇文章了解这种现象背后的基本原理。
谢谢。
注意:执行(手动)
CALL MYTBLSCHEMA.TEST('test', 'test_address_', 'test_num', 2021-01-01)
IDE 确实可以工作(例如,将行插入表中)。
DB2 版本:11.5.6.0.00000.008
【问题讨论】:
-
DB2Parameter("@ADDRESS_LINE", adr)- 然而参数被命名为@ADDRESS -
@NAME,@ADDRESS_LINE,@REGNUM,@TRANSA指表列(即分别为NAME,ADDRESS_LINE,REGNUM,TRANSA)和@987654355 @ 是从表单中提取并关联到ADDRESS_LINE列的变量。希望有帮助; -
不,
@ADDRESS_LINE将引用您在 SQL 语句中使用的参数,但没有这样的参数,只有一个称为@ADDRESS。 -
我在更正错字后编辑了帖子。希望对您有所帮助。
-
你启动了一个你没有提交的事务?如果我想知道为什么找不到我刚刚插入的数据,那是我开始寻找的第一个地方..
标签: c# .net stored-procedures db2