• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 745
  • Last Modified:

ADODB OraOLEDB.Oracle and NULL value in Prepared Statement

I have an old VB6 app that was converted over to .NET.  Most of the code still uses ADODB.  We have upgraded our Oracle server to 10g which MSDAORA doesn't support without SP2.  

I am finding that inserting a NULL value is causing the .execute to blowup.


                If IsDBNull(sMissing_Item) Or sMissing_Item = Nothing Then
                    gobjaPrm(5).Value = DBNull.Value
                    gobjaPrm(5).Value = vTemp
                End If

So when it NULL value is inserted I get a weird error

System.Runtime.InteropServices.COMException (0x80004005): 
   at ADODB.CommandClass.Execute(Object& RecordsAffected, Object& Parameters, Int32 Options)
   at Correspondence.ClassMassMail.InsertIntoTables_Mass(String& sPath, String& sCocode, String& sComp_Name, String& sSt_of_Dom, Int32& lUse_Code_ID, String& sMissing_Item, String& sCompany_Contact, Int32& sFiling_Period) in C:\Data\VB_NET\CORR.NET\ClassMassMail.vb:line 4140
The program '[2232] Corr.exe' has exited with code 0 (0x0).

The blocks are actually the error.  If you change the code to populate the field with a value instead of a NULL, everything works.

So the question is, is there another way to insert a NULL value with OraOLEDB.Oracle ?
  • 2
1 Solution
bigboy1122Author Commented:
As it turns out it seems to be the parameter itself.  It is being defined as an adVariant (12)

        manPrmTyp(0) = 131 : manPrmTyp(1) = 131 : manPrmTyp(2) = 12
        manPrmTyp(3) = 12   : manPrmTyp(4) = 131
        manPrmTyp(5) = 12   : manPrmTyp(6) = 12

The paarameters that are adNumeric can contain a null value.  The variants are the ones throwing fits.

I could fix teh problem by check the data before hand and if it meets a condition, use a different function with a different insert statement. Or I could just redo this function in ADO.NET.  I am just trying to avoid that.
bigboy1122Author Commented:
I found the solution.  The problem is this

What that is saying is that that index of parameters is going to be an adVariant type. The adVariant type would accept the null but when it got the .execute(), the program would throw an exception which was unicode (in otherwards just squares).

Since the parameters that used 12 were all strings we switched them to 8 which is a adBSTR (Indicates a null-terminated character string)

That seem to fix the problem and all the .execute to run the Insert Statement.
PAQed with points refunded (500)

Community Support Moderator
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now