更新时间:2023-02-14 19:13:30
前段时间有类似的问题,我使用以下解决方案:
Some time ago a had similar problem and I use this solution:
创建PL/SQL函数:
Create a PL/SQL Function:
FUNCTION GetBlob(pCOMPANY_EMPID_FOLIO IN NUMBER) RETURN SYS_REFCURSOR IS
res SYS_REFCURSOR;
BEGIN
OPEN res FOR
SELECT XML_AND_PDF_ZIP
FROM CF2
WHERE COMPANY_EMPID_FOLIO = pCOMPANY_EMPID_FOLIO;
RETURN res;
END GetBlob;
并这样称呼它:
OracleCommand cmd = new OracleCommand("BEGIN res := GetBlob(:primaryKey); END;"), ora.Connection);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("res", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
cmd.Parameters.Add("primaryKey", OracleDbType.Int32, ParameterDirection.Input).Value = sFolio;
cmd.InitialLOBFetchSize = 16384;
using (OracleDataReader dr = cmd.ExecuteReader() ) {
dr.Read();
OracleBlob blob = dr.GetOracleBlob(0);
MemoryStream ms = new MemoryStream(blob.Value);
dr.Close();
}
注意,我的应用程序使用ODP.NET非托管驱动程序.也许您的问题是由于托管驱动程序中的错误所致.
Note, my application uses the ODP.NET Unmanaged Driver. Perhaps your issue is due to a bug in the Managed Driver.