【发布时间】:2018-05-03 08:04:43
【问题描述】:
我有一个存储过程,它通过游标运行选择查询并返回游标(原始选择查询更复杂,我已将其缩短)。
CREATE OR REPLACE PROCEDURE GETASSIGNEDROLES(IN V_USER_ID INTEGER) SPECIFIC GETASSIGNEDROLES DYNAMIC RESULT SETS 1 LANGUAGE SQL NOT DETERMINISTIC EXTERNAL ACTION READS SQL DATA CALLED ON NULL INPUT INHERIT SPECIAL REGISTERS
BEGIN
DECLARE TEMP_CURSOR CURSOR WITH HOLD WITH RETURN TO CLIENT FOR
SELECT DISTINCT ROLE_ID, ROLE_NAME FROM ROLE ORDER BY ROLE_NAME FOR READ ONLY WITH UR;
IF V_USER_ID IS NOT NULL AND V_USER_ID > 0 THEN
OPEN TEMP_CURSOR;
END IF;
END;
现在,我找不到任何示例来说明如何从返回游标的存储过程中获取值。我相信它与仅包含 select 语句的所有其他存储过程相同吗?
另外,我的数据库是 DB2,所以语法有点不同。到目前为止,在看了几个关于 SO 的问题后,我得到了以下代码。但是我使用Datatable并在CMD中传递参数并没有发现任何问题,这是正确的吗?
DataTable DT = new DataTable();
using (var connection = new DB2Connection(ConnectionString))
{
//connection.Open(); //open/close connection will be done implicitely by the DataAdapter.
using (DB2Command cmd = connection.CreateCommand())
{
cmd.CommandText = "GETASSIGNEDROLES";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new DB2Parameter(DataBaseObjects.ParamVUserID, DB2Type.Integer)).Value = userDo.User_ID;
//cmd.CommandTimeout = CommandTimeout; //wait time before terminating the attempt to execute a command and generating an error in secs
using (var da = new DB2DataAdapter(cmd))
{
da.Fill(DT);
}
DT.TableName = TableName;
return DT;
}
}
【问题讨论】:
-
P.S.这是我第一次问问题,请放轻松。我是新来的。另外,为什么互联网上的 DB2 这么少。一切都是为了SQLServer,很少有与DB2相关的文章。文档没有关于它们的示例。
标签: c# stored-procedures datatable parameters db2