C#调用Oracle存储过程的问题~
问题是这样的~ 我要执行一个SQL语句来获得一个数据集然后填充DataSet,SQL语句如下:
SELECT
ORDER_HEADER.ORDER_NO,
(SELECT OPERATOR.OPERATOR_NM FROM OPERATOR, ORDER_HEADER WHERE ORDER_HEADER.OPERATOR_ID = OPERATOR.OPERATOR_ID) AS OPERATOR_NM,
ORDER_DETAIL.AMOUNT,
ORDER_DETAIL.KINGAKU
FROM
ORDER_DETAIL,ORDER_HEADER
WHERE
ORDER_HEADER.ORDER_NO = ORDER_DETAIL.ORDER_NO AND ORDER_HEADER.ORDER_NO = 'xxxxx';
这个SQL语句可以在SQL PLUS里执行并得到正确结果,但是在C#里一运行就报错。
ハンドルされていない例外 : System.Data.OleDb.OleDbException: ORA-00972: identifier is too long
代码如下:
OleDbConnection conn = new OleDbConnection(connStr);
OleDbCommand cmd = new OleDbCommand(selectStr,conn);
OleDbDataAdapter ada = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds,"TableName"); // 执行到这里就会报错
所以我想把那个Select语句写成存储过程:
CREATE OR REPLACE PACKAGE User1.GinkouKessan IS
type outList is ref cursor;
PROCEDURE GetOrderInfo(P_ORDER_NO IN VARCHAR2, RESULT OUT outList);
END GinkouKessan;
/
CREATE OR REPLACE PACKAGE BODY User1.GinkouKessan IS
PROCEDURE GetOrderInfo (
P_ORDER_NO IN VARCHAR2,
RESULT OUT outList
) IS
BEGIN
OPEN RESULT
FOR
SELECT
ORDER_HEADER.ORDER_NO,
(SELECT OPERATOR.OPERATOR_NM FROM OPERATOR, ORDER_HEADER WHERE ORDER_HEADER.OPERATOR_ID = OPERATOR.OPERATOR_ID) AS OPERATOR_NM,
ORDER_DETAIL.AMOUNT,
ORDER_DETAIL.KINGAKU
FROM
ORDER_DETAIL,ORDER_HEADER
WHERE
ORDER_HEADER.ORDER_NO = ORDER_DETAIL.ORDER_NO AND ORDER_HEADER.ORDER_NO = '200404080001';
END;
END GinkouKessan;
/
我想用C#调用这个存储过程然后取得返回的数据集,但不知道怎么取得结果,请各位指教!