Microsoft KB Archive/201236

= FIX: AppendChunk Truncates Data Using OLE DB Provider for Oracle =

Article ID: 201236

Article Last Modified on 9/22/2005

-

APPLIES TO


 * Microsoft OLE DB Provider for Oracle Server 1.0
 * Microsoft ActiveX Data Objects 1.5
 * Microsoft ActiveX Data Objects 2.0
 * Microsoft ActiveX Data Objects 2.1 Service Pack 2
 * Microsoft ActiveX Data Objects 2.5

-



This article was previously published under Q201236



SYMPTOMS
When trying to store large texts or images into an Oracle database using the OLE DB provider for Oracle, the data is truncated.



RESOLUTION
A supported fix that corrects this problem is now available from Microsoft, but it has not been fully regression tested and should be applied only to systems experiencing this specific problem. If you are not severely affected by this specific problem, Microsoft recommends that you wait for the next Microsoft Data Access Components service pack that contains this fix.

To resolve this problem immediately, contact Microsoft Product Support Services to obtain the fix. For a complete list of Microsoft Product Support Services phone numbers and information on support costs, please go to the following address on the World Wide Web:

http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

The English version of this fix should have the following file attributes or later:   Date       Version      Size    File Name     Platform --  12/07/99   2.12.4807.0  184KB   Msdaora.dll   All



STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.



Steps to Reproduce Behavior
 

 Create a Standard EXE project in Visual Basic. Form1 is created by default. Go to the Project/References menu and add a reference to Microsoft ActiveX Data Objects 2.0 Library. Add three CommandButtons to the default form.  Add the following code in the code window of the form. You will have to modify the connection string to connect to your Oracle server: Option Explicit ' Connection String Const cnstr = "Provider=MSDAORA;Data Source=Ora8.world;User" & _ " ID=demo;Password=demo;" Dim sqlstr As String

Private Sub Command1_Click Dim rs As New ADODB.Recordset Dim cn As New ADODB.Connection ' Don't throw an error in case the table does not exist On Error Resume Next sqlstr = "Create Table BlobTable (MYID Numeric Primary Key," & _       " TXTFLD Long)" cn.Open cnstr ' Drop the table if it already exists cn.Execute "Drop table Blobtable" cn.Execute sqlstr cn.Close Set cn = Nothing End Sub

Private Sub Command2_Click Dim rs As New ADODB.Recordset Dim cn As New ADODB.Connection Dim i As Integer sqlstr = "Select MYID,TXTFLD from Blobtable where MYID=1" cn.CursorLocation = adUseClient cn.Open cnstr With rs          .ActiveConnection = cn           .CursorType = adOpenStatic .LockType = adLockOptimistic .Open sqlstr End With If rs.EOF Then rs.AddNew rs("MYID") = 1 rs.Update rs.Requery End If       For i = 1 To 1000 'Store a 1 MB string; smaller strings may seem to work. rs.Fields("TXTFLD").AppendChunk String(1024, "x") Next i       rs.Update rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub

Private Sub Command3_Click Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset sqlstr = "Select MYID,TXTFLD from Blobtable where MYID=1" cn.CursorLocation = adUseClient cn.Open cnstr With rs          .ActiveConnection = cn           .CursorType = adOpenStatic .LockType = adLockOptimistic .Open sqlstr End With ' Print the actual size of the string stored in the database Debug.Print rs.Fields("TXTFLD").ActualSize rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub

Private Sub Form_Load Command1.Caption = "Create Table" Command2.Caption = "Insert Data" Command3.Caption = "Retrieve Actual Size" End Sub </li> Click the CommandButton with the caption "Create Table" to create the test table.</li> Click the CommandButton with the caption "Insert Data" to insert the data.</li> Click the CommandButton with the caption "Retrieve Actual Size" to retrieve the actual size of the text field. You will see a incorrect value printed in the Immediate window.</li></ol>

<div class="references_section">