oracle中使用oo4o(vc)添加图片

使用oo4o已经是很多年的事情了,前段时间有同事使用这个东西往oracle中添加图片等blob数据,一直找不到方法。经本人测试,找到一个很简单的方法,现记录如下。

过程就是先添加一个空的blob数据,然后再去修改这个blob数据,在oracle的oo4o的workbook中,也采用了这种方式,不过是源代码的blob填充数据没有使用copyFromFile的方法,而是采用数据读写,这相对于日常存照片文件,还是过于繁琐。本段代码直接使用copyFromFile,简单一点。代码总共不超过10行(核心代码)。

#include "stdafx.h"
#include "obound.h"
#include "ORACL.H"

#include 
using namespace std;

//oracle定义了表为xa,两个字段id和vv,其中id为主键,vv为blob类型。
	OStartup();//启动,必须要

	ODatabase x;
//打开数据库
	x.Open("tnsname", "用户名", "密码");
//取得一个结果集,这个结果集没数据,为了添加使用的
	ODynaset os(x,"select id,vv from xa where 1 = 0");//专门使用1=0不查询任何数据
	os.AddNewRecord();
	os.SetFieldValue("id",i);
	OValue ov;
	ov.SetEmpty();
	os.SetFieldValue("vv", ov);
	os.Update();	
	//以上为添加一个图片为空的记录,下面准备添加图片了。

	os.StartEdit();
	OBlob ob;
	os.GetFieldValue("vv", &ob);//读取数据
	ob.CopyFromFile("d:/x.jpg");//将文件写入blob
	os.Update();
	ob.Close();//关闭blob,必须调用,否则在oshutdown之后,会出现内存出错

	os.Close();//关闭记录集
	x.Close();//关闭会话
	OShutdown();

以上代码相当简单,需要注意的是,由于oracle把所有权力都交由了开发者,开发者必须在分配内存之后,关闭内存。否则就会在运行时出现"内存报错"的情况。以上的close方法,一个都不能少,少一个都会报错,需要注意。
以上代码,在vs2005下运行通过

转载请标明出处:i flym
本文地址:https://www.iflym.com/index.php/code/201204200001.html

相关文章:

作者: flym

I am flym,the master of the site:)

发表评论

电子邮件地址不会被公开。 必填项已用*标注