Вставка значений BLOB-объектов в таблицу через VB.Net - PullRequest
0 голосов
/ 20 марта 2019

У меня есть следующая процедура в 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 имеет тип string и содержит файл .xlsx ("C: \ Projects \ TemplateLoad \ Load \ AALBERTSINDUSTRIESNVORDEUR025 20190319.xlsx")

Длина буфера становится 378367 (Buffer.Length)и sFileName - «AALBERTSINDUSTRIESNVORDEUR025 20190319.xlsx» [отмечено при запуске программы].

При выполнении вышеуказанного кода VB.Net, в строке nRetVal = CInt (.ExecuteScalar) , япоявляется следующая ошибка:

ORA-01460: запрошено невыполненное или необоснованное преобразование

Может кто-нибудь помочь мне решить эту проблему?

...