使用c++和Ado向Oracle資料庫中插入圖片
阿新 • • 發佈:2019-01-22
最近因為專案需要,需要將圖片插入至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); } } }