pstream->write(var); //pstream為adodb::_streamptr, var為_variant_t
後需將流stream的位置設為起始位置0,pstream->position=0;
因為write後position是在stream的末尾,這樣當你read流stream的內容時是從末尾讀起,此時讀到的內容就是null
pstream->read(size); //size為需讀取的位元組數
使用流stream時無需考慮是2000還是2005。
以下是**:(偷懶,然後把所以判斷是否出錯的語句都省略了)
coinitialize(null);
adodb::_connectionptr pconnect=null;
pconnect.createinstance(__uuidof(adodb::connection));
_bstr_t strcon="provider=sqloledb;server=10.10.1.54,1433;database=database;uid=test;pwd=test";
pconnect->open(strcon,"","",null);
adodb::_recordset record=null;
record.createinstance(__uuidof(adodb::recordset));
record->open("test",(idispatch *)pconnect,adodb::adopendynamic,adodb::adlockpessimistic,adodb::adcmdunspecified);
safearraybound bounds[1];
int n=20;
bounds[0].celements=n*4; //假設我儲存的資料是浮點數float, n為資料的個數, *4是因為float佔4個位元組, 若是double則*8
bounds[0].llbound=0;
ccomsafearraydarray(bounds,1);
float *data=(float *)darray.m_psa->pvdata;
for(int i=0;i!=n;++i)
data[i]=10.0f;
_variant_t var;
var.vt=vt_array|vt_ui1;
var.parray=darray;
_variant_t varoption(disp_e_paramnotfound,vt_error);
adodb::_streamptr pstream=null;
pstream.createinstance(__uuidof(adodb::stream));
pstream->type=adodb::adtypebinary;
pstream->open(varoption,adodb::admodeunknown,adodb::adopenstreamunspecified,"","");
pstream->write(var);
pstream->position=0;
record->addnew();
record->fields->item["value"]->value=pstream->read(bounds[0].celements);
record->update();
pstream->close();
record->close();
pconnect->close();
ps: 讀取二進位制內容時要獲取其實際大小可用方法
long size=record->fields->item["value"]->actualsize;
二進位制資料
今天的問題是處理。本來想在資料庫中只存儲存路徑的,但是同組的同事說別那樣,還是直接存比較好,雖然不知道為什麼一定要存,但是或許他說的有道理吧,至於為什麼暫時還沒想通。處理二進位制遇到的第乙個問題是讀寫的問題,data open filepath,rb data open filepath,wb 作為...
二進位制相容的那些事
二進位制相容 二進位制相容是針對動態鏈結庫而言的,如果你的源 已經編譯成為可執行檔案了,其中你呼叫了一些動態庫,後來你為這個動態庫進行了更新,並替換掉原來的動態庫了,如果程式在執行時正常執行沒有任何問題,那麼這個庫就是二進位制相容 二進位制邊界正常 源 相容 如果換了庫,但是無法執行,需要重新編譯修...
java 寫二進位制檔案
private void writepointtofile mypoint p file file new file f.getpath p.getapname dat byte bt new byte 64 byte temp str.getbytes for int i 0 i temp.len...