BDP

本文介绍了一个使用BDP在Oracle数据库中更新BLOB字段的问题及解决方案。作者最初尝试使用命名参数进行更新操作,但发现这种方法并不奏效。最终通过调整参数设置成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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

关于BDP网络的具体定义和原理,在当前提供的引用内容中并未提及。然而,可以推测您可能混淆了某些概念或者名称。以下是基于现有知识以及相关领域背景对“BDP”的解释: ### 可能的含义一:带宽延迟乘积 (Bandwidth Delay Product, BDP) 在网络通信领域,“BDP”通常指代 **带宽延迟乘积**(Bandwidth Delay Product),这是一个衡量网络性能的重要参数。 #### 定义 带宽延迟乘积是指在一个网络连接中,链路的最大吞吐量(即带宽)与往返时间(RTT,Round-Trip Time)之间的乘积[^5]。其计算公式如下: \[ \text{BDP} = \text{带宽} (\text{bps}) \times \text{RTT} (\text{s}) \] #### 原理 1. 在高带宽、高延迟的情况下,发送方需要更多的缓冲区来存储尚未被确认的数据包。 2. 如果窗口大小小于BDP,则无法充分利用链路容量,从而降低传输效率。 3. TCP协议中的滑动窗口机制依赖于BDP的概念来优化数据流控制[^6]。 ```python def calculate_BDP(bandwidth_bps, rtt_seconds): """ 计算带宽延迟乘积(BDP) 参数: bandwidth_bps: 链路带宽(单位 bps) rtt_seconds: 往返时间(单位 秒) 返回: BDP: 带宽延迟乘积(单位 字节) """ return (bandwidth_bps * rtt_seconds) / 8 # 示例 bdp_value = calculate_BDP(10_000_000, 0.1) # 10 Mbps 和 100 ms RTT print(f"BDP: {bdp_value:.2f} Bytes") # 输出结果 ``` --- ### 可能的含义二:其他技术缩写 如果您的问题是针对某种特定的技术或框架名为“BDP”,则可能是某个专用术语或专有名词。例如: - 数据处理平台(Business Data Platform) - 生物数据分析工具(Biological Data Processing) 这些具体实现需进一步提供上下文才能明确说明。 --- ### 结论 目前没有直接证据表明存在一种叫做“BDP网络”的独立技术架构。如果您指的是上述提到的带宽延迟乘积,请参照前述描述;如果是另一种特殊场景下的定义,请提供更多补充资料以便更精准解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值