ADO寫二進位制資料時的注意事項

2021-06-14 05:45:11 字數 1945 閱讀 2019

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...