我在oracle中具有以下过程:
CREATE OR REPLACE PROCEDURE usp_Templates_InsertImage(
p_FileImage blob,
p_FileSize number DEFAULT null,
p_ImageFileName varchar2 DEFAULT null, cur OUT SYS_REFCURSOR)
AS
v_CompanyId nvarchar2(10); v_RecDate date;
BEGIN
select company_id, rec_date into v_CompanyId, v_RecDate
from uvw_Templates_Load_MainRecData;
insert into tblTemplateImages(CompanyID,RecDate,FileImage,FileSize,ImageFileName,CreateUser,CreateDate,LastModifiedUser,LastModifiedDate)
values( v_CompanyId, v_RecDate,to_blob(p_FileImage),p_FileSize,p_ImageFileName,USER,SYSTIMESTAMP,USER,SYSTIMESTAMP );-- returning id into v_id;
open cur for select tblTemplateImages_seq1.currval from dual;
END;
在上面的表 tblTemplateImages 中,列 FileImage 的类型为 Blob 。
要调用该过程并插入值,我已经在VB.Net中编写了以下代码并作了必要的引用:
Try
If Not System.IO.File.Exists(vsFile) Then Exit Try
Dim Buffer As Byte() = System.IO.File.ReadAllBytes(vsFile)
Using conn As OracleConnection = New OracleConnection(_ConnectionString)
Using cmd As OracleCommand = New OracleCommand("usp_Templates_InsertImage", conn)
With cmd
.CommandType = CommandType.StoredProcedure
Dim param1 As OracleParameter = New OracleParameter()
param1.Direction = ParameterDirection.Input
param1.OracleType = OracleType.Blob
param1.ParameterName = "p_FileImage"
param1.Value = Buffer
.Parameters.Add(param1)
Dim param2 As OracleParameter = New OracleParameter()
param2.Direction = ParameterDirection.Input
param2.OracleType = OracleType.Number
param2.ParameterName = "p_FileSize"
param2.Value = Buffer.Length
.Parameters.Add(param2)
Dim sFileName = Right(vsFile, Len(vsFile) - vsFile.LastIndexOf("\") - 1)
Dim param3 As OracleParameter = New OracleParameter()
param3.Direction = ParameterDirection.Input
param3.OracleType = OracleType.VarChar
param3.ParameterName = "p_ImageFileName"
param3.Value = sFileName
.Parameters.Add(param3)
Dim param4 As OracleParameter = New OracleParameter()
param4.Direction = ParameterDirection.Output
param4.OracleType = OracleType.Cursor
param4.ParameterName = "cur"
.Parameters.Add(param4)
conn.Open()
nRetVal = CInt(.ExecuteScalar)
End With
End Using
End Using
Catch ex As Exception
TLS.Log.AddAsync(vsLogEntry:=ex.Message, veLogType:=ApplicationLogger.AppLogger.eLoggerType.Error, vsCodeSource:=SOURCE_CLASS & ".SaveTemplateImage")
End Try
其中 vsFile 是字符串类型,并且包含.xlsx文件(“ C:\ Projects \ TemplateLoad \ Load \ AALBERTSINDUSTRIESNVORDEUR025 20190319.xlsx”)
缓冲区的长度即将达到378367(Buffer.Length) 并且sFileName为“ AALBERTSINDUSTRIESNVORDEUR025 20190319.xlsx”(运行程序时注意)。
在执行上述VB.Net代码时,在行 nRetVal = CInt(.ExecuteScalar)时,出现以下错误:
ORA-01460:请求未实现或不合理的转换
任何人都可以帮助我解决此问题吗?