Search code examples
oraclevb.netfile-uploadvisual-studio-2019file-conversion

ORA-01460: unimplemented or unreasonable conversion (after conversion of a docx to pdf and uploading to db) VisualBasic (VB)


i'm a junior developer and i started working recently.

They put me on this LEGACY program and asked me to try and resolve this problem. They strictly forbid me of using CLOB.

        Dim fs As Stream = PostedFile.InputStream
        Dim br As New BinaryReader(fs)
        Dim bytes As Byte() = br.ReadBytes(Convert.ToInt32(fs.Length))
        
        pdfComunication = pdfConvert(bytes)
        pdfComunication = bytes


    idOperator = ViewState("idOperator")

'

    Private Function pdfConvert(ByVal document As Byte()) As Byte()
    Dim doc As Byte()
    Using msRtf As MemoryStream = New MemoryStream(document)

        Dim dc As softDocument.DocumentCore = softDocument.DocumentCore.Load(msRtf, New softDocument.DocxLoadOptions())
        Using msDocx As MemoryStream = New MemoryStream()

            dc.Save(msDocx, New softDocument.PdfSaveOptions())
            doc = msDocx.ToArray()
        End Using
    End Using
    Return doc
End Function

'

<WebMethod()>
Public Function InsertComunications(ByVal pIdComunicationType As Integer, ByVal pAwaitingStatus As Integer, ByVal pRequestingUser As String, ByVal pIdSr As String,
                                             ByVal pItem As String, ByVal pText As String, ByVal pCommonSender As String, pPecSender As String, ByVal pDestination As String,
                                             ByVal pPdfComunication As Byte()) As String
    Dim dbConn As New OracleConnection
    Dim cmd As New OracleCommand
    Dim errMsg As String = String.Empty
    dbConn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("DBConn").ToString
    Try
        dbConn.Open()
        cmd.Parameters.Clear()

        cmd.CommandText = ""
        cmd.CommandType = System.Data.CommandType.StoredProcedure
        cmd.Connection = dbConn

        Dim p_IdComunicationType As New System.Data.OracleClient.OracleParameter("p_IdComunicationType ", System.Data.OracleClient.OracleType.Number)
        p_IdComunicationType.Direction = ParameterDirection.Input
        p_IdComunicationType.Value = pIdComunicationType 
        cmd.Parameters.Add(p_IdComunicationType)

        Dim p_AwaitingStatus As New System.Data.OracleClient.OracleParameter("p_AwaitingStatus", System.Data.OracleClient.OracleType.Number)
        p_AwaitingStatus.Direction = ParameterDirection.Input
        p_AwaitingStatus.Value = pAwaitingStatus
        cmd.Parameters.Add(p_AwaitingStatus)

        Dim p_RequestingUser As New System.Data.OracleClient.OracleParameter("p_RequestingUser ", System.Data.OracleClient.OracleType.NVarChar)
        p_RequestingUser.Direction = ParameterDirection.Input
        p_RequestingUser.Value = pRequestingUser
        cmd.Parameters.Add(p_RequestingUser)

        Dim p_IdSr As New System.Data.OracleClient.OracleParameter("p_IdSr", System.Data.OracleClient.OracleType.NVarChar)
        p_IdSr.Direction = ParameterDirection.Input
        p_IdSr.Value = pIdSr
        cmd.Parameters.Add(p_IdSr)

        Dim p_Item As New System.Data.OracleClient.OracleParameter("p_Item", System.Data.OracleClient.OracleType.NVarChar)
        p_Item.Direction = ParameterDirection.Input
        p_Item.Value = pItem 
        cmd.Parameters.Add(p_Item)

        Dim p_Text As New System.Data.OracleClient.OracleParameter("p_Text", System.Data.OracleClient.OracleType.NVarChar)
        p_Text.Direction = ParameterDirection.Input
        p_Text.Value = pText
        cmd.Parameters.Add(p_Text)

        Dim p_CommonSender As New System.Data.OracleClient.OracleParameter("p_CommonSender", System.Data.OracleClient.OracleType.NVarChar)
        p_CommonSender.Direction = ParameterDirection.Input
        p_CommonSender.Value = pCommonSender
        cmd.Parameters.Add(p_CommonSender)

        Dim p_PecSender As New System.Data.OracleClient.OracleParameter("p_PecSender", System.Data.OracleClient.OracleType.NVarChar)
        p_PecSender.Direction = ParameterDirection.Input
        p_PecSender.Value = pPecSender
        cmd.Parameters.Add(p_PecSender)

        Dim p_Destination As New System.Data.OracleClient.OracleParameter("p_Destination", System.Data.OracleClient.OracleType.NVarChar)
        p_Destination.Direction = ParameterDirection.Input
        p_Destination.Value = pDestination
        cmd.Parameters.Add(p_Destination)

        Dim p_PdfComunication As New System.Data.OracleClient.OracleParameter("p_PdfComunication", System.Data.OracleClient.OracleType.Blob)
        p_PdfComunication.Direction = ParameterDirection.InputOutput
        p_PdfComunication.Value = pPdfComunication
        cmd.Parameters.Add(p_PdfComunication)

        cmd.ExecuteNonQuery()





    Finally
        dbConn.Dispose()
        cmd.Dispose()
    End Try

' The problem is that the file size is too big for the blob in the db, which is strange since in other parts of the program that don't do the conversion it takes files way bigger than the ones i'm trying right now...

Any suggestions?

'EDIT

       TYPE t_Cursor IS REF CURSOR;

  PROCEDURE GetMailTemplate(Cur_Out OUT t_Cursor);
   
   PROCEDURE 1(p_IdComunicationType      IN NUMBER,  
                               p_AwaitingStatus     IN NUMBER,
                               p_RequestingUser   IN VARCHAR2,
                               p_IdSr            IN VARCHAR2,
                               p_Item           IN VARCHAR2,
                               p_Testo      IN VARCHAR2,
                               p_CommonSender IN VARCHAR2,
                               p_PecSender   IN VARCHAR2,
                               p_Destination IN VARCHAR2,
                               p_PdfComunication    xx.PDF_COMUNICATION%Type
                               );
   
   PROCEDURE 2( p_AwaytingStatus NUMBER, Cur_Out OUT t_Cursor);
   
   PROCEDURE 3(p_IdComunicationType   VARCHAR2,
                                     p_AwaitingStatus  NUMBER);


       

Solution

  • We finally found an answer, we had to put everything inside a TRANSACTION:

    Public Function InsertComunications(ByVal pIdComunicationType As Integer, ByVal pAwaitingStatus As Integer, ByVal pRequestingUser As String, ByVal pIdSr As String,
                                             ByVal pItem As String, ByVal pText As String, ByVal pCommonSender As String, pPecSender As String, ByVal pDestination As String,
                                             ByVal pPdfComunication As Byte()) As String
    Dim dbConn As New OracleConnection
    
    
    **Dim trns as System.Data.OracleClient.OracleTransaction = Nothing**
    
    
    Dim cmd As New OracleCommand
    Dim errMsg As String = String.Empty
    dbConn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("DBConn").ToString
    Try
        dbConn.Open()
        
    
        **trns = dbConn.BeginTransaction**
        **cmd.Transaction = trns**
    
    
        cmd.Parameters.Clear()
    
        cmd.CommandText = ""
        cmd.CommandType = System.Data.CommandType.StoredProcedure
        cmd.Connection = dbConn
    
        Dim p_IdComunicationType As New System.Data.OracleClient.OracleParameter("p_IdComunicationType ", System.Data.OracleClient.OracleType.Number)
        p_IdComunicationType.Direction = ParameterDirection.Input
        p_IdComunicationType.Value = pIdComunicationType 
        cmd.Parameters.Add(p_IdComunicationType)
    
        Dim p_AwaitingStatus As New System.Data.OracleClient.OracleParameter("p_AwaitingStatus", System.Data.OracleClient.OracleType.Number)
        p_AwaitingStatus.Direction = ParameterDirection.Input
        p_AwaitingStatus.Value = pAwaitingStatus
        cmd.Parameters.Add(p_AwaitingStatus)
    
        Dim p_RequestingUser As New System.Data.OracleClient.OracleParameter("p_RequestingUser ", System.Data.OracleClient.OracleType.NVarChar)
        p_RequestingUser.Direction = ParameterDirection.Input
        p_RequestingUser.Value = pRequestingUser
        cmd.Parameters.Add(p_RequestingUser)
    
        Dim p_IdSr As New System.Data.OracleClient.OracleParameter("p_IdSr", System.Data.OracleClient.OracleType.NVarChar)
        p_IdSr.Direction = ParameterDirection.Input
        p_IdSr.Value = pIdSr
        cmd.Parameters.Add(p_IdSr)
    
        Dim p_Item As New System.Data.OracleClient.OracleParameter("p_Item", System.Data.OracleClient.OracleType.NVarChar)
        p_Item.Direction = ParameterDirection.Input
        p_Item.Value = pItem 
        cmd.Parameters.Add(p_Item)
    
        Dim p_Text As New System.Data.OracleClient.OracleParameter("p_Text", System.Data.OracleClient.OracleType.NVarChar)
        p_Text.Direction = ParameterDirection.Input
        p_Text.Value = pText
        cmd.Parameters.Add(p_Text)
    
        Dim p_CommonSender As New System.Data.OracleClient.OracleParameter("p_CommonSender", System.Data.OracleClient.OracleType.NVarChar)
        p_CommonSender.Direction = ParameterDirection.Input
        p_CommonSender.Value = pCommonSender
        cmd.Parameters.Add(p_CommonSender)
    
        Dim p_PecSender As New System.Data.OracleClient.OracleParameter("p_PecSender", System.Data.OracleClient.OracleType.NVarChar)
        p_PecSender.Direction = ParameterDirection.Input
        p_PecSender.Value = pPecSender
        cmd.Parameters.Add(p_PecSender)
    
        Dim p_Destination As New System.Data.OracleClient.OracleParameter("p_Destination", System.Data.OracleClient.OracleType.NVarChar)
        p_Destination.Direction = ParameterDirection.Input
        p_Destination.Value = pDestination
        cmd.Parameters.Add(p_Destination)
    
        Dim p_PdfComunication As New System.Data.OracleClient.OracleParameter("p_PdfComunication", System.Data.OracleClient.OracleType.Blob)
        p_PdfComunication.Direction = ParameterDirection.InputOutput
        p_PdfComunication.Value = pPdfComunication
        cmd.Parameters.Add(p_PdfComunication)
    
        cmd.ExecuteNonQuery()
    
    
        **trns.Commit()**
    
    
    Finally
        dbConn.Dispose()
        cmd.Dispose()
    End Try