使用c++和Ado向Oracle数据库中插入图片

    最近因为项目需要,需要将图片插入至Oracle,现简单总结如下:

    1.引入ado

    

#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","adoEOF")

    2.创建oracle数据库连接,插入图片。

  

//实例化连接对象
	HRESULT hr;
	_ConnectionPtr connPtr;
	hr=connPtr.CreateInstance(__uuidof(Connection));
	if (SUCCEEDED(hr))
	{
		//连接Oracle数据库
		char* con="Provider=OraOLEDB.Oracle.1;Persist Security Info=True;Data Source=192.168.1.22:1521/Server2";
		char* userID="admin";
		char* passWord="123";
		hr=connPtr->Open(con,userID,passWord,NULL);
		if (SUCCEEDED(hr))
		{
			//图片流及图片大小
			int picLength=1000;
			char* picData=new char[picLength];
			
			char* sql="select * from tb_pic where picid='aaa'";
			//实例化命令对象
			_RecordsetPtr rstPtr;
			rstPtr.CreateInstance(__uuidof(Recordset));
			if (rstPtr->Open(sql,connPtr.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText)==S_OK)
			{
				//构造安全数组
				SAFEARRAYBOUND rgsbound[1];
				rgsbound[0].lLbound=0;
				rgsbound[0].cElements=picLength;
				SAFEARRAY *safeArray;
				safeArray=SafeArrayCreate(VT_UI1,1,rgsbound);
				for (long i=0;i<picLength;i++)
				{
					SafeArrayPutElement(safeArray,&i,picData++);
				}
				VARIANT varBlob;
				varBlob.vt=VT_ARRAY|VT_UI1;
				varBlob.parray=safeArray;

				//创建新纪录
				rstPtr->AddNew();
				rstPtr->PutCollect("picid","aaa");
				rstPtr->GetFields()->GetItem("picdata")->AppendChunk(varBlob);
				//插入
				rstPtr->Update();
				SafeArrayDestroy(safeArray);
			}
		}
	}



你可能感兴趣的:(oracle,C++,blob)