ADOQuery操作oracle的blob字段有关问题
发布时间:2011-06-28 13:46:06 文章来源:www.iduyao.cn 采编人员:星星草
ADOQuery操作oracle的blob字段问题
我有一表
create table t_blob(id int,type varchar(20),content blob)
在实现图片,文档等数据的存取中遇到了如下问题:
1、blob写入
据查资料,oracle写入blob必须分两步,先插入空的再更新。
String sql= "INSERT INTO T_BLOB VALUES(:ID,:TYPE,EMPTY_BLOB()) ";
ADOQuery1-> Close();
ADOQuery1-> SQL-> Clear();
ADOQuery1-> SQL-> Add(sql);
ADOQuery1-> Parameters-> ParamByName( "ID ")-> Value=1;
ADOQuery1-> Parameters-> ParamByName( "TYPE ")-> Value= "jpg ";
ADOQuery1-> ExecSQL();
ADOQuery1-> Close();
TMemoryStream* ms=new TMemoryStream();
Image1-> Picture-> Graphic-> SaveToStream(ms);
ms-> Seek(0,soFromBeginning);
sql= "Update T_BLOB set CONTENT=:CONTENT where ID=1 ";
ADOQuery1-> SQL-> Clear();
ADOQuery1-> SQL-> Add(sql);
ADOQuery1-> Parameters-> ParamByName( "CONTENT ")-> LoadFromStream(ms,ftBlob);
ADOQuery1-> ExecSQL();
ADOQuery1-> Close();
delete ms;
按照上述方法可以成功执行,但是我通过DBImage控件关联发现图片并没有存入,因为DBImage上没有图片,通过BDE 方式查询得到的stream-> size为0。
不只为何没能插入?
2、读取
我用BDE方式的Query查询含有blob字段记录,执行query-> Open没有问题
但是用ADOQuery执行包含有blob字段的查询就提示 不支持的数据类型,不知何故?
代码如下:
String sql= "select CONTENT from T_BLOB where ID=1 ";
ADOQuery1-> Close();
ADOQuery1-> SQL-> Clear();
ADOQuery1-> SQL-> Add(sql);
ADOQuery1-> Prepared=true;
ADOQuery1-> Open();//执行到这句就提示不支持的数据类型
TStream* ms =new TMemoryStream();
ms=ADOQuery1-> CreateBlobStream(ADOQuery1-> FieldByName( "CONTENT "),bmRead);
if(ms-> Size> 0)
{
Image2-> Picture-> Graphic-> LoadFromStream(ms);
}
ADOQuery1-> Close();
delete ms;
主要是因为我必须用ADO,所以这些问题还必须解决,有哪位高手知道情不吝赐教!
------解决方案--------------------
用TADOTable应该会影响效率吧?
我每次可能只查询一条记录,而且blob的数据很大,一般10MB的数量级
谁有什么好的办法,请出招啊
如果数据量大最好不要用ado
直接用 oci吧 效率高得多
------解决方案--------------------
// insert blob field
TMemoryStream* pMS = new TMemoryStream;
// pMS Load File
....
....
pMS-> Seek(0,soFromBeginning);
// ADOQuery1 SQL TEXT = "insert into imagetab (id,image) values (:id,:image); "
ADOQuery1-> Parameters-> ParamByName( "id ")-> Value = // enter your id
ADOQuery1-> Parameters-> ParamByName( "image ")-> LoadFromStream(pMS, ftBlob);
ADOQuery1-> ExecSQL();
------解决方案--------------------
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
C#项目中如何更改项目保存的文件夹名?
求解。。
------解决方案--------------------
好像需要重构吧,同样求高人解答。
------...
-
C#中让TextBox只能输入数字的问题
我用的如下的代码:
static private Regex r = new Regex("^[0-9]{1,}$ ");
...
-
带数据库的程序打包注意什么?
打的包出错:Error:System.InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的...
-
想学习一下网络程序开发 请给推荐几本书
学习基于http协议的程序开发 比如获取网页 分析网页 模拟网页操作 下载上传文档等知识 ...
-
qq的安装包是用什么工具?
想用.net制作一个想qq一样比较漂亮的安装包。有例子最好
------解决方案--------------------
新建->安...
-
C# 写的windows服务 调用 C++ dll 的问题
我封装了一个dll
用一个普通的winform程序 调用的时候没 问题。
但是放在C#写的服务程...
-
在VS2005中怎么调出 解决方案 那个图标?(图示)求解释~~~
这是我用的VS
这是我在教学视频上看到的VS
------解决方案------------...
-
寻友
有人在自学c#编程吗,可以互相认识一下,以后共同探讨学习中的问题……
------解决方案--------------------
朋友多了,路好走~
...
-
急!急!急!C#代码
怎样将数据库中的数据动态加载到Treeview控件中
------解决方案--------------------
C# code
void CreateTree(T...
-
救急??????????????????
哪位高手帮我一下,在C#中怎么写关于鼠标和键盘监听事件,我的程序就差监听鼠标和键盘是否动,然后定时关机这个功能了,请高手指点,...