我有一个调用SQLRPGLE程序的存储过程。程序运行正常,因为我已在调试器中验证并按预期发送返回值。而是在查看cmd.Parameters["@ISMATCH"].Value = {}
时返回的内容。我猜我做错了什么。它可能是什么?
存储过程:
CREATE PROCEDURE "MPRLIB"."CHECKHOURS" (EMPLOYEEID DECIMAL(10 , 0),
INOUT ISMATCH CHAR(1))
LANGUAGE RPGLE
PARAMETER STYLE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SPECIFIC CHECKHOURS
NEW SAVEPOINT LEVEL
EXTERNAL NAME 'MPRLIB/MPRLRCHK';
我的方法:
public bool IsValidTimesheet(int id)
{
bool isValid = false;
// Get the data from the iSeries
using (iDB2Connection conn = new iDB2Connection(ConfigurationManager.ConnectionStrings["IbmIConnectionString"].ConnectionString))
{
using (iDB2Command cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "LIB.CHECKHOURS";
cmd.Parameters.Add("@EMPLOYEEID", iDB2DbType.iDB2Decimal).Value = id;
cmd.Parameters.Add("@ISMATCH", iDB2DbType.iDB2Char).Direction = ParameterDirection.Output;
conn.Open();
cmd.ExecuteNonQuery();
isValid = (cmd.Parameters["@ISMATCH"].Value.ToString() == "1") ? true : false;
conn.Close();
}
}
return isValid;
}
我的RPG程序参数:
D CHECKHOURS PR extpgm('CHECKHOURS')
D id 10P 0
D isMatch 1A
答案 0 :(得分:1)
我有一个模糊的回忆,尽管你把它称为OUT参数,它确实应该是一个INOUT parm,因为RPG处理parms的方式。如果将创建过程更改为INOUT并在C#中进行相关更改,会发生什么?
答案 1 :(得分:1)
解决方案应该是
CREATE PROCEDURE "MPRLIB"."CHECKHOURS" (EMPLOYEEID DECIMAL(10 , 0),
INOUT ISMATCH CHAR(1))
LANGUAGE RPGLE
PARAMETER STYLE GENERAL
NOT DETERMINISTIC
MODIFIES SQL DATA
SPECIFIC CHECKHOURS
NEW SAVEPOINT LEVEL
EXTERNAL NAME 'MPRLIB/MPRLRCHK';
答案 2 :(得分:0)
如果将out参数更改为nvarchar(1),然后更改sproc,该怎么办? N型是否对应于iDB2Char类型?