BDP

使用Delphi2006.net 编写Webservice
某个项目使用的是Sybase 11 版本,,程序里面用到了Sybase 12版本以上带的OLEDB 驱动,本来这个驱动挺方便的,不需要Sybase客户段就能链接服务端,但是存在问题,
在低版本上的Sybase上面使用,没法更新BLOB字段。没办法只好使用BDP 来更新。
以前没用过BDP,先测试了功能,测试的时候用Oracle来测试,结果用下面的代码更新了半天发现BLOB字段都是空的。
  1. uses Borland.Data.Provider,Borland.Data.Common,System.IO;
  2. procedure TForm2.Button1Click(Sender: TObject);
  3. var
  4.   aBDPConnection : BDPConnection;
  5.   aBDPCommand    : BDPCommand;
  6.   aBDPParameter : BDPParameter;
  7.   aBytes : TBytes;
  8.   aFileStream : TFileStream;
  9. begin
  10.   aBDPConnection := BDPConnection.Create('assembly=Borland.Data.Oracle'
  11.     +', Version=2.5.0.0, Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b;'
  12.     +'vendorclient=oci.dll;pooling=True;grow on demand=True;'
  13.     +'database=DBNAME;username=USERNAME;max pool size=100;'
  14.     +'password=PASSWORD;provider=Oracle');
  15.   aBDPConnection.Open();
  16.   aBDPCommand := BDPCommand.Create('INSERT INTO T_BDPTEST(IDFIELD,ABLOB) VALUES(''1'',:ABLOB)',aBDPConnection);
  17.   
  18.   aFileStream := TFileStream.Create('c:/KFC.doc',fmOpenRead);
  19.   Setlength(aBytes,aFileStream.Size);
  20.   try
  21.     aFileStream.Read(aBytes,aFileStream.Size);
  22.   finally
  23.     aFileStream.Free();
  24.   end;
  25.   aBDPparameter := BDPParameter.Create(':ABLOB'
  26.     ,bdpType.Blob,bdpType.stBinary,Length(aBytes)   );
  27.   aBDPParameter.Value := ABytes;
  28.   aBDPCommand.Parameters.Add(aBDPParameter);
  29.   aBDPCommand.ExecuteNonQuery();
  30.   aBDPCommand.Dispose();
  31.   aBDPConnection.Close();
  32.   aBDPCommand.Dispose();
  33. end;

后来检查了半天,发现,BDP比较土的,不支持命名参数,就是 BDPParameter.Create(':ABLOB',...) 写了ABLOB 也是没用的,BDP不知道你更新哪个字段 必须改为

  aBDPparameter := BDPParameter.Create(':ABLOB'
    ,bdpType.Blob,bdpType.stBinary,Length(aBytes),'ABLOB'    );才行。

 

BDP比Ado.net 方便的地方就是 可以通过DataReader来判断一个列的类型,而在Ado.net 中是无法判断一个列是不是BLOB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值