wince上資料庫 sqlce和sqlite

2021-05-23 20:55:02 字數 2478 閱讀 8659

hr   =   cocreateinstance(clsid_sqlserverce_3_0,   0,   clsctx_inproc_server,

iid_idbinitialize,   (void**)&pidbinitialize);

if   (failed(hr))

dbprop[0].dwpropertyid   =   dbprop_init_datasource;

dbprop[0].dwoptions   =   dbpropoptions_required;

dbprop[0].vvalue.vt   =   vt_bstr;

dbprop[0].vvalue.bstrval   =   sysallocstring(l"//db.sdf"); //need   oleaut32.lib

if   (dbprop[0].vvalue.bstrval   ==   null)

dbpropset[0].guidpropertyset   =   dbpropset_dbinit; //#define   dbinitconstants

dbpropset[0].cproperties   =   sizeof(dbprop)   /   sizeof(dbprop[0]);

dbpropset[0].rgproperties   =   dbprop;

hr   =   pidbinitialize-> queryinte***ce(iid_idbproperties,(void**)&pidbproperties);

if   (failed(hr))

hr   =   pidbproperties-> setproperties(sizeof(dbpropset)/sizeof(dbpropset[0]),dbpropset);

if   (failed(hr))

hr   =   pidbinitialize-> initialize();

if   (failed(hr))

hr   =   pidbproperties-> queryinte***ce(iid_idbcreatesession,(void**)&pidbcreatesession);

if   (failed(hr))

hr   =   pidbcreatesession-> createsession(null,iid_iunknown,&piunknown); //need   uuid.lib

if   (failed(hr))

hr   =   piunknown-> queryinte***ce(iid_idbcreatecommand,(void**)&pidbcreatecommand);

if   (failed(hr))

hr   =   pidbcreatecommand-> createcommand(null,iid_icommandtext,(iunknown   **)&picommandtext);

if   (failed(hr))

hr   =   picommandtext-> setcommandtext(dbguid_sql,l"select * from sninfo");  //執行查詢

if   (failed(hr))

hr   =   picommandtext-> execute(null,iid_null,null,null,null);

if   (failed(hr))

記得網上有採用ado的方式操作sqlce,但聽聞ms不再更新,而採用oledb方式,只是比較麻煩一點了,這樣也有助於我們了解一下sqlce的一些介面。

3. 這下我們就可以在evc4裡面操作sqlite資料庫了:

//開啟資料庫

cppsqlite3db db;

//開啟或新建乙個資料庫

db.open(l"//ding.db");

//新建表

db.execdml(l"create table sninfo(id nchar(12), area nvarchar(6), info nvarchar(60),source nchar(6), target nchar(6))");

//查詢

cppsqlite3query q = db.execquery(l"select * from sninfo where area='廣州區'");

cstring strtemp;

while (!q.eof())

q.finalize();

db.close();

4.對sqlite的資料庫操作就介紹到這裡,我目前也就用了這麼多,更多的我也需要學習,在 wince或mobile下用sqlite要注意一點的是,資料庫的路徑中不要含有中文字,否則會開啟失敗,如果非要用中文,那必須得轉成utf-8才行,sqlite內部是通過utf-8來讀取的。

三. 後記

對比了一下sqlce和sqlite在查詢50w記錄時的效能,都可以在2秒鐘之內完成,(一開始我沒建index,查了4分多鐘,暈),一定記得要建索引哦。否則查詢n慢。

wince上資料庫 sqlce和sqlite

hr cocreateinstance clsid sqlserverce 3 0,0,clsctx inproc server,iid idbinitialize,void pidbinitialize if failed hr dbprop 0 dwpropertyid dbprop init ...

sqlce與sqlite資料庫的比較

hr cocreateinstance clsid sqlserverce 3 0,0,clsctx inproc server,iid idbinitialize,void pidbinitialize if failed hr dbprop 0 dwpropertyid dbprop init ...

WinCE資料通訊之SqlCE資料同步篇

sql server ce與sql server之間通過rda合併複製進行資料同步。remote data access rda 主要由三部分組成 sql server ce database engine sql server ce client agent和sql server ce datab...