我们有一个驻留在oracle 10.2数据库中的oracle存储过程。存储的程序包含特定的输入和输出参数。我们正在尝试创建一个asp.net web应用程序来执行存储过程,并将来自输出参数的结果绑定到一个gridview中。但没有运气。使用asp.net调用oracle存储过程。 Visual Studio 2005
这是我迄今所做
Oracle.DataAccess.dll
我与Oracle开发工具Visual Studio已安装了Oracle数据访问组件(ODAC),并用它来调用oracle存储过程。
**这是我得到**
ORA-06550错误:第1行,第7列:
PLS-00306:错号码或类型的呼叫参数 'CALC_NUMBERVOTES'
ORA-06550 :第1行,第7列:
PLS-00306:错误数量或类型的呼叫参数 'CALC_NUMBERVOTES'
ORA-06550:第1行,第7列:
PLS-00306:错误的号码或类型的参数来电 'CALC_NUMBERVOTES'
ORA-06550:第1行,第7列:
PLS-00306 :错误的数量或类型的呼叫参数 'CALC_NUMBERVOTES'
ORA-06550:第1行,第7列:
PL/SQL:语句被忽略
任何帮助非常感谢。
oralce的存储过程代码
PROCEDURE calc_numbervotes (
i_Office IN ELECTIONRESULTS.office%TYPE,
o_candidate OUT tblcandidate ,
o_party OUT tblparty,
o_votes OUT tblvotes,
o_percAll OUT tblpercAll)
IS
/***************Find Number of candidate per office and party******************/
CURSOR c1 is
SELECT distinct candidate, party,sum(votes) totalvotes
FROM ELECTIONRESULTS
WHERE candidate not in ('Registered Voters')
AND office = i_office
AND Precinct <> ' '
GROUP BY candidate,party
ORDER BY sum(votes) desc;
/****************** Find total county votes per candidate *********************/
CURSOR c2 is
SELECT sum(votes) from ELECTIONRESULTS
WHERE candidate !='Registered Voters'
AND office = i_Office
AND Precinct <> ' ';
recCount NUMBER DEFAULT 0;
totvotesall NUMBER;
totvotescandidateprec NUMBER;
BEGIN
OPEN c2;
FETCH c2 into totvotesall;
CLOSE c2;
************************************************************/
FOR rec in c1 LOOP
recCount:= recCount + 1;
o_candidate(recCount):= rec.candidate;
o_party(recCount) := rec.party;
o_votes(recCount) := rec.totalvotes;
if rec.totalvotes = 0 then
o_percAll(recCount) := 0;
else
o_percAll(recCount) := round((rec.totalvotes/totvotesall)*100,2);
end if;
END LOOP;
END calc_numbervotes;
asp.net代码
Dim constr As String = "data source=ds;user id=uid;password=pwd;"
Dim orclCon As OracleConnection
orclCon = New OracleConnection(constr)
Dim objCmd As OracleCommand = New OracleCommand()
objCmd.Connection = orclCon
objCmd.CommandText = "pkg_calc_votes.calc_numbervotes"
objCmd.CommandType = CommandType.StoredProcedure
objCmd.Parameters.Add(New OracleParameter("i_office", OracleDbType.NVarchar2, 255)).Value = "U.S. CONGRESS 05"
objCmd.Parameters.Add(New OracleParameter("o_party", OracleDbType.NVarchar2, 10)).Direction = ParameterDirection.Output
objCmd.Parameters.Add(New OracleParameter("o_candidate", OracleDbType.NVarchar2, 255)).Direction = ParameterDirection.Output
objCmd.Parameters.Add(New OracleParameter("o_votes", OracleDbType.Decimal, 10)).Direction = ParameterDirection.Output
objCmd.Parameters.Add(New OracleParameter("o_percAll", OracleDbType.Double, 10)).Direction = ParameterDirection.Output
orclCon.Open()
Dim orclDtRdr As OracleDataReader = Nothing
orclDtRdr = objCmd.ExecuteReader()
gvCursor.DataSource() = orclDtRdr
gvCursor.DataBind()
orclDtRdr.Close()
orclCon.Close()
所存储proceder从表中选择数据库中的所有数据,除了一个值,其中_o_percAll_。该参数正在sp中进行计算。
谢谢 教育暨青年局
你的参数类型似乎并不匹配: NVARCHAR2 <> tblCandidate – 2010-08-05 20:27:22
为什么需要在存储过程的输出参数?为什么不返回单个结果集? – 2010-08-05 20:36:50