我想打電話給在C#C#OraOLEDB存儲過程OUT參數
過程只有一個OUT參數,由OraOLEDB提供一個簡單的存儲過程。這不起作用。
DataTable dt爲空之後那部分調用reader.GetSchemaTable()
。
有趣的是,如果我將REF CURSOR TYPE作爲輸出參數與其他存儲過程一起使用,我可以使其工作。這個過程沒有問題。它可以在sqlplus中調用。我讀過,我不需要(實際上不必)手動綁定REF CURSOR TYPE
。
問題是如何通過C#中的OraOLEDB調用具有非遊標類型輸出參數的存儲過程。
請給我一些建議。當您返回一個指針
的Oracle 11g,64位Windows 7 Link1 Link2
try
{
string connStr = "Provider=OraOLEDB.Oracle.1;User ID=scott;Password=tiger;Data Source=//localhost:1521/orcl;OLEDB.NET=1;PLSQLRSet=1;";
conn = new OleDbConnection(connStr);
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
OleDbParameter param = cmd.CreateParameter();
param.ParameterName = "O_ENAME";
param.Direction = ParameterDirection.Output;
param.OleDbType = OleDbType.Char;
param.Size = 15;
cmd.Parameters.Clear();
cmd.Parameters.Add(param);
cmd.CommandType = CommandType.Text;
cmd.CommandText = "{CALL SCOTT.EMPINFO(?)}";
OleDbDataReader reader = cmd.ExecuteReader();
DataTable dt = reader.GetSchemaTable();
}
存儲過程EMPINFO
CREATE OR REPLACE PROCEDURE
EMPINFO(O_ENAME OUT VARCHAR2)
IS
BEGIN
SELECT ENAME
INTO O_ENAME
FROM EMP
WHERE EMPNO=7369;
END;
/
我不熟悉Oracle,但對於SQL服務器,我會使用'ExecuteNonQuery()',然後從'param.Value'中讀取值。也許這在這種情況下也適用。 – Dirk
非常感謝Dirk!你是對的!! :D – Song