0
我已經定製的Oracle數據類型:調用oracle函數從C#
type tClients is record(
id NUMBER,
name VARCHAR2(1000 CHAR),
tax varchar2(30),
IsClient number
);
type tTClients is table of tClients;
和Oracle功能與tTClients的返回值流水線:
function getClients(p_Organization_Name varchar2,
p_Director_Last_Name varchar2,
) return tTClients
pipelined;
我使用ODP.NET和嘗試在C#中的下一個代碼:
using(OracleConnection conOra=new OracleConnection(oraConStr))
{
conOra.Open();
using (OracleCommand cmd = new OracleCommand("MQ_CRM.CC_NEW.getClients",conOra))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("p_Organization_Name", OracleDbType.Varchar2, "мяскин", ParameterDirection.Input));
cmd.Parameters.Add(new OracleParameter("p_Director_Last_Name", OracleDbType.Varchar2,"", ParameterDirection.Input));
//return parameter
OracleParameter p = new OracleParameter();
p.OracleDbType = OracleDbType.RefCursor;
p.UdtTypeName = "MQ_CRM.CC_NEW.tTClients";
p.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(p);
try
{
cmd.ExecuteReader();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
有例外ORA-06550。直接執行這個函數sqlplus工作正常。 我該如何解決這個問題&
THX。現在我這樣做。這個很好的解決方法,但我認爲正確的方式是使用CommandType.StoredProcedure並在執行後獲取返回值。 –