i am using your driver (v 6.5.8.) in an application via direct mode now for some years with an oracle 10.2.0.1 database on windows 2003 server (32Bit).
In our application we can add external documents into a blob field.
After an upgrade to oracle 12c on a new hardware under oracle linux 7 (64Bit) with charset AL32UTF8 the old BLOB Data will be loaded correct. But when we insert new documents (per example pdf files or images) the data will be stored corrupt in the database blob field. You can see the size of the inserted binary data is increased.
In several positions of the exported corrupted binary stream, blocks ob NULL values are inserted followed by the original data.
It seems to me, a stream buffer, initialized with NULL values will be copied wrong inside the driver.
The current available version also will not work.
Here the code of a simple test program:
Connection Properties:
DriverUnit=DbxDevartOracle
DriverAssemblyLoader=Devart.DbxOda.DriverLoader.TCRDynalinkDriverLoader,Devart.DbxOda.DriverLoader,Version=15.0.0.1,Culture=neutral,PublicKeyToken=09af7300eec23701
MetaDataAssemblyLoader=Devart.DbxOda.DriverLoader.TDBXDevartOracleMetaDataCommandFactory,Devart.DbxOda.DriverLoader,Version=15.0.0.1,Culture=neutral,PublicKeyToken=09af7300eec23701
DriverPackageLoader=TDBXDynalinkDriverLoader,DBXCommonDriver150.bpl
MetaDataPackageLoader=TDBXDevartOracleMetaDataCommandFactory,DbxDevartOracleDriver150.bpl
ProductName=DevartOracle
GetDriverFunc=getSQLDriverORADirect
LibraryName=dbexpoda40.dll
VendorLib=dbexpoda40.dll
MaxBlobSize=-1
LocaleCode=0000
Oracle TransIsolation=ReadCommitted
RoleName=Normal
LongStrings=True
EnableBCD=True
UseQuoteChar=False
CharLength=0
UseUnicode=True
UnicodeEnvironment=False
IPVersion=IPv4
Database=xxx
Password=xxx
User_Name=xxx
Source Code (XE):
Code: Select all
procedure TForm1.Button1Click(Sender: TObject);
var
lFileStream: TFileStream;
SQL: String;
lParams: TParams;
begin
SQLConnection1.Open;
OpenDialog1.Filter:='All Files(*.*)|*.*';
if OpenDialog1.Execute then
begin
lFileStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite);
lFileStream.Seek(0,soFromBeginning);
SQL := 'INSERT INTO TEST_BLOB_DATA(ID,BDATA) VALUES (1, empty_blob()) RETURNING BDATA INTO :ATAPAR';
lParams := TParams.Create();
lParams.Clear;
lParams.CreateParam(ftOraBlob, 'BDATA', ptInput);
lParams.ParamByName('BDATA').DataType := ftOraBlob;
lParams.ParamByName('BDATA').ParamType := ptInput;
lParams.ParamByName('BDATA').LoadFromStream(lFileStream, ftOraBlob);
SQLConnection1.Execute(SQL, lParams);
end;
SQLConnection1.Close;
end;
Claudio