调用Oracle存储过程时出现的异常情况
写了一个存储过程,其返回一个记录集和一个Number类型的数值,在PL/SQL里调试都能正常返回值和记录集。在ASP.net中用如下方式调用:
OracleParameter[] parms=new OracleParameter[]
{
new OracleParameter("P_Type",OracleType.VarChar),
new OracleParameter("P_QuerySql",OracleType.VarChar),
new OracleParameter("Rating_Return",OracleType.Float),
new OracleParameter("Cables_Return",OracleType.Cursor),
};
parms[0].Value = ProType;
parms[1].Value = SqlStr;
parms[2].Direction = ParameterDirection.Output;
parms[3].Direction = ParameterDirection.Output;
using(OracleDataReader ODr = PLSQLHelper.ExecuteReader(connString,CommandType.StoredProcedure,"YH_SCJK.PG_TRSCABLE.GetCableLoadLine2",parms))
{
if(ODr.Read())
{
RatingVal = ODr.GetFloat(0);
}
ODr.NextResult();
while (ODr.Read())
{
TrsCable NowCable = new TrsCable();
NowCable.BJId = ODr.GetString(0);
NowCable.Name = ODr.GetString(1);
NowCable.SValue = ODr.GetDouble(2);
NowCable.SDate = ODr.GetDateTime(3);
Cables.Add(NowCable);
}
}
按理说Oracle存储过程返回值应该是按参数顺序返回,那么数值类型返回值Rating_Return应该在Cables_Return记录集之前,但是很奇怪,系统会报“RatingVal = ODr.GetFloat(0);”这句格式转换错误,我将获取记录集(即while (ODr.Read())后面的)的放在获取单值的前面,跟踪返回记录集正确,但ODr.NextResult();后,ODr.Read()返回false,无法得到单值……
不知哪里有问题,望各位大侠不吝赐教!