OLEDB不使用SQL語句直接開啟資料表

2021-08-18 18:20:57 字數 2448 閱讀 4728

一般來說獲取資料庫表的方法是採用類似

select * from table_name
這樣的sql語句。sql語句必然伴隨著資料庫的解釋執行,一般來說效率比較低下,而且使用sql語句時需要資料庫支援icommandtext物件,但是在oledb中它是乙個可選介面,也就是有的資料庫可能不支援,這個時候oledb給我們提供了一種方法讓我們能夠在不使用sql的情況下運算元據庫表物件。

直接開啟表物件需要使用iopenrowset介面。該介面屬於session物件。

宣告乙個dbid結構物件

為結構物件的ekind(物件種類)字段賦值dbkind_name值

為結構物件的uname.pwszname欄位賦值為表名

呼叫iopenrowset介面的openrowset方法,將dbid結構的指標傳入,並讓函式返回結果集物件

iopenrowset介面屬於session,可以在使用createsession時讓其直接開啟這個介面,而且該介面是必須實現的介面,因此不用擔心獲取不到的情況,得到這個介面後就可以直接使用介面的openrowset方法。

openrowset函式原型如下:

hresult openrowset(

iunknown *punkouter,

dbid *ptableid, //開啟表時使用該結構

dbid *pindexid, //開啟索引時使用這個引數

refiid riid, //返回物件的guid

ulong cpropertysets, //給對應返回物件設定的屬性集的個數

dbpropset rgpropertysets, //給對應物件設定的屬性集

iunknown **pprowset); // 返回的介面

從函式定義上來,這種方式還可以用來開啟索引

bool opentable(iopenrowset *piopenrowset, irowset* &pirowset)

; dbid.ekind = dbkind_name;

dbid.uname.pwszname = olestr("aa26");

dbprop dbrowsetprop[4] = ;

dbpropset dbrowsetpropset[1] = ;

//執行直接使用對應介面函式對資料庫進行增刪改操作

dbrowsetprop[0].colid = db_nullid;

dbrowsetprop[0].dwoptions = dbpropoptions_required;

dbrowsetprop[0].dwpropertyid = dbprop_updatability;

dbrowsetprop[0].vvalue.vt = vt_i4;

dbrowsetprop[0].vvalue.intval = dbpropval_up_change | dbpropval_up_delete | dbpropval_up_delete;

//執行在刪改的同時插入資料

dbrowsetprop[1].colid = db_nullid;

dbrowsetprop[1].dwoptions = dbpropoptions_required;

dbrowsetprop[1].dwpropertyid = dbprop_canholdrows;

dbrowsetprop[1].vvalue.vt = vt_bool;

dbrowsetprop[1].vvalue.boolval = variant_true;

//開啟irowsetupdate介面,實現延遲更新

dbrowsetprop[2].colid = db_nullid;

dbrowsetprop[2].dwoptions = dbpropoptions_required;

dbrowsetprop[2].dwpropertyid = dbprop_irowsetupdate;

dbrowsetprop[2].vvalue.vt = vt_bool;

dbrowsetprop[2].vvalue.boolval = variant_true;

dbrowsetpropset[0].cproperties = 3;

dbrowsetpropset[0].guidpropertyset = dbpropset_rowset;

dbrowsetpropset[0].rgproperties = dbrowsetprop;

hresult hres = piopenrowset->openrowset(null, &dbid, null, iid_irowset, 1, dbrowsetpropset, (iunknown**)&pirowset);

return succeeded(hres);

}

詳細的**請參考: 完整**

OLEDB不使用SQL語句直接開啟資料表

一般來說獲取資料庫表的方法是採用類似 select from table name這樣的sql語句。sql語句必然伴隨著資料庫的解釋執行,一般來說效率比較低下,而且使用sql語句時需要資料庫支援icommandtext物件,但是在oledb中它是乙個可選介面,也就是有的資料庫可能不支援,這個時候ol...

WebFocus 中直接使用SQL 語句

engine sqlmss set default connection connection sql sqlmss prepare sqlout for select from nolock where flag y endtable file sqlout print on table hold...

PHP中直接使用sql語句

select from tf user where company id 117 or other company ids like 117,or other company ids like 117,or other company ids like 117 and id 37 and statu...