Asp.net 无法从oracle中的游标获取数据
我试图使用asp.net从oracle数据库获取数据,但当数据出现在表中时,游标中没有任何输出: 我正在使用以下存储过程:Asp.net 无法从oracle中的游标获取数据,asp.net,oracle,plsql,oracle11g,Asp.net,Oracle,Plsql,Oracle11g,我试图使用asp.net从oracle数据库获取数据,但当数据出现在表中时,游标中没有任何输出: 我正在使用以下存储过程: CREATE OR REPLACE PROCEDURE branch_details ( startIndex in int ,pageSize in int ,isSearch in int ,byName in int ,dataDetail in varchar2 , p_cursor out sys_refcursor) AS
CREATE OR REPLACE PROCEDURE branch_details
( startIndex in int
,pageSize in int
,isSearch in int
,byName in int
,dataDetail in varchar2
, p_cursor out sys_refcursor)
AS
BEGIN
IF isSearch=1 THEN
IF byName=1 THEN
OPEN p_cursor FOR
SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY branch_id)
AS MyRows
, branch_id, branch_name
, branch_location, bm_name, bm_contact
, bm_email, is_active, max_ua
, (SELECT COUNT(branch_id)
FROM branch_info
WHERE branch_name LIKE
'%'|| dataDetail||'%')
AS RowNumber
FROM branch_info
WHERE branch_name LIKE '%'|| dataDetail||'%')
WHERE MyRows BETWEEN startIndex
AND startIndex+pageSize-1;
ELSE
OPEN p_cursor FOR
SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY branch_id)
AS MyRows
, branch_id, branch_name, branch_location
, bm_name, bm_contact, bm_email, is_active
, max_ua
, (SELECT COUNT(branch_id)
FROM branch_info
WHERE branch_id LIKE
'%'|| dataDetail||'%')
As RowNumber
FROM branch_info
WHERE branch_id LIKE '%'|| dataDetail||'%')
WHERE MyRows BETWEEN startIndex
AND startIndex+pageSize-1;
END IF;
ELSE
OPEN p_cursor FOR
SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY branch_id)
AS MyRows
, branch_id, branch_name, branch_location
, bm_name, bm_contact, bm_email
, is_active, max_ua
, (SELECT COUNT(branch_id)
FROM branch_info) AS RowNumber
FROM branch_info)
WHERE MyRows BETWEEN startIndex
AND startIndex+pageSize-1;
END IF;
END;
并使用以下asp.net代码:
List<Paramarray> param = new List<Paramarray>();
param.Add(new Paramarray("@dataDetail", data));
param.Add(new Paramarray("@byName", id?"0":"1"));
param.Add(new Paramarray("@isSearch", isSearch?"1":"0"));
param.Add(new Paramarray("@startIndex", startIndex==1?startIndex.ToString():Convert.ToString(((startIndex-1)*pageSize)+1)));
param.Add(new Paramarray("@pageSize", pageSize.ToString()));
_command.Connection = _connection;
_command.CommandType = CommandType.StoredProcedure;
_command.CommandText = "branch_details";
foreach (Paramarray _param in param)
{
_parameter = new OracleParameter(_param.name,_param.value);
_command.Parameters.Add(_parameter);
}
_command.Parameters.Add("@p_cursor", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
if (_connection.State != ConnectionState.Open) _connection.Open();
_dataReader = _command.ExecuteReader();
dt.Load(_dataReader);
if (_connection.State == ConnectionState.Open) _connection.Close();
List param=new List();
参数Add(新的参数数组(“@dataDetail”,data));
param.Add(新的Paramarray(“@byName”,id?“0”:“1”);
参数添加(新的参数数组(“@isSearch”,isSearch?”1:“0”);
param.Add(新的Paramarray(“@startIndex”,startIndex==1?startIndex.ToString():Convert.ToString(((startIndex-1)*pageSize)+1));
Add(新的Paramarray(“@pageSize”,pageSize.ToString());
_command.Connection=\u Connection;
_command.CommandType=CommandType.storedProcess;
_command.CommandText=“分支机构详细信息”;
foreach(Paramarray _paramin param)
{
_参数=新的OracleParameter(_param.name,_param.value);
_command.Parameters.Add(_参数);
}
_command.Parameters.Add(“@p_cursor”,OracleDbType.RefCursor).Direction=ParameterDirection.Output;
如果(_connection.State!=ConnectionState.Open)_connection.Open();
_dataReader=_command.ExecuteReader();
dt.负载(_数据读取器);
如果(_connection.State==ConnectionState.Open)_connection.Close();
我为另一个过程编写的代码运行良好,并提供了输出
如果我的程序或其他地方出错,请帮助我。我无法找出问题所在。我敢打赌你的程序是错误的。您的asp.net代码看起来很好,在没有更多信息的情况下,我觉得光标只是没有返回任何数据
您是否对该过程进行了单元测试,甚至只是对游标查询进行了单元测试?您的ASP代码似乎正在调用一个名为
log\u details
的过程。您发布了branch\u details
过程的实现,该过程采用了不同的参数集。@很抱歉上传不正确,请检查我更新的问题。您知道如果在DB中执行该过程,该过程是否返回结果吗?确定执行此过程时,isSearch
参数等于1吗调用?@BobJarvis no isSearch参数为0,这将使代码进入else条件。