通过VB.Net

时间:2019-03-20 09:27:45

标签: vb.net oracle plsql blob

我在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:请求未实现或不合理的转换

任何人都可以帮助我解决此问题吗?

0 个答案:

没有答案
相关问题