精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何實現Windows Mobile下C++訪問SqlCe的封裝

移動開發
這里講述在Windows Mobile和Wince下,Native C++訪問SqlCe的封裝類的實現。希望本文能對大家有所幫助。

在手機下,進行數據庫開發,一般都要使用輕量級數據庫。這里介紹的是如何實現Windows Mobile下C++訪問SqlCe的封裝。

背景

進行Windows Mobile的應用的開發,很多時候需要對數據庫進行訪問,存儲和讀取。可是微軟沒有為Native C++提供象ADO.NET下的封裝,所以我自己封裝了一個SqlCe訪問類。

簡述

本文講述在Windows Mobile和Wince下,Native C++訪問SqlCe的封裝類的實現。由于微軟沒有為C++提供像ADO.NET的封裝,為Native C++訪問SqlCe制造了一定的難度,因此對OleDB訪問SqlCe進行封裝,方便使用SQL語句對SqlCe進行操作。

SqlCe訪問技術概述

ADO.NET

.NET Compact Framework逐漸成為Windows Mobile和Wince的開發的主流,微軟為CF.NET提供了ADO.NET訪問SqlCe,對SqlCe的訪問封裝在System.Data.SqlServerCe下,和其他數據庫(SQL Server, Oracle)訪問基本兼容,但是不支持DbProviderFactory。例如下面的代碼不能通過編譯,因為沒有SqlCeProviderFactory類。

DbProviderFactory factory = SqlCeProviderFactory.Instance;我之前封裝了一個ADO.NET的SqlCe訪問類,可以參考 .NET Compact Framework下SQL CE的使用 和 實現了SqlCeHepler的單元測試類見.NET Compact Framework下的單元測試。

OleDb

在Native的世界,可以通過OleDb來訪問SqlCe。OleDb封裝在sqlceoledb35.dll下,使用OleDb需要安裝一個Cab包如下:

C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\wce500\armv4i\sqlce.repl.ppc.wce5.armv4i.CAB上述路徑根據平臺有所不同。

注意上述sqlceoledb35.dll只是支持SqlCe 3.5,微軟對不同版本的SqlCe的兼容性不是很好,可以參考 SQL Server Express和SQL Server Compact的應用 和 .NET Campact Framework下SQL CE兼容性問題 了解SqlCe的歷史我兼容性問題。

本文后續會重點講述OleDb。

ADO

在Windows Mobile和Wince平臺,微軟官方不支持ADO。但是有一個社區實現,可以參考 A set of ADOCE classes。我沒有試過,所以不好評論。

實現

下面講述如何基于OleDb實現對SqlCe的訪問。

文檔和Samples

微軟提供了在線文檔,可以在 Microsoft SQL Server Compact 3.5 Books Online and Samples下載。上述鏈接只是包含在線文檔,沒有提供例子程序的,所以這個名字有點騙人感情之嫌。雖然提供了在線文檔,但是文檔的質量不高,有些細節沒講,例如調用ICommand::Execute的入口參數就沒有講,我做的時候只能自己試。

雖然上面的鏈接不提供Samples,但是我們還有另外一個方法取得Samples。在

C:\Program Files\Microsoft SQL Server 2005 Mobile Edition\Samples\NorthwindOleDb下可以得到Sample代碼,前提是安裝了Microsoft SQL Server 2005 Mobile Edition。但是要注意不同SqlCe版本實現有所不同,這個代碼要結合上面的Online book修改才行。

基于SQL語句的實現

微軟的例子程序NorthwindOleDb提供了通過OleDb訪問SqlCe的方法,但是不提供對SQL語句的封裝,直接對表的訪問效率比較高,但是也有很大的不便性。因為每個操作都單獨封裝一個函數,每個函數大概至少需要100行代碼,而且有指針等資源的分配,釋放等操作,一旦沒有處理好就發生內存泄漏了。所以我偏向于使用統一的SQL語句接口對SqlCe進行操作,雖然犧牲了點性能,卻提供了方便性。下面是當前版本的封裝類。這個類是基于João Paulo Figueira 的OleDbClientLib3實現的。

基于SQL語句的實現

 

打開關閉

  1. bool Open(const CString& dbPath);  
  2. void Close(); 

上面為打開和關閉SqlCe數據庫鏈接的操作,這里實現為長鏈接,也就是不調用Close()的話,數據庫的Session一直鏈接著,這樣的好處是縮短訪問時間。

新建刪除

  1. bool CreateDatabase(const CString& dbPath);  
  2. bool DeleteDatabase(const CString& dbPath); 

由于SqlCe是in-process數據庫,物理上表現為就一個文件,可以方便新建和刪除,上述接口就是新建和刪除SqlCe數據庫,新建后自動打開數據庫的Senssion了。

增刪改操作

  1. int  ExecuteNonQuery(const CString& sql); 

把增刪改的語句調用ExecuteNonQuery()執行就可以了。

  1. SqlCeHelper db;HRESULT hr = db.Open(DB_FILE_NAME);  
  2. if(hr < 0){    CString cstr = db.GetErrorsMessage();   
  3.    char* str = new char[cstr.GetLength()+1];      
  4. sprintf(str, "%S", cstr);     
  5.  FAIL(str);      
  6. delete str;}CString sqlStr;for(int i=0; i<max; ++i)  
  7. {    SYSTEMTIME currentTime;    
  8.       GetLocalTime(¤tTime);   
  9.    sqlStr.Format(L"INSERT INTO T1 (F1, F2, F3) VALUES(%d, 'STR%d', '%d-%d-%d %d:%d:%d')",         i, i, currentTime.wYear, currentTime.wMonth, currentTime.wDay, currentTime.wHour, currentTime.wMinute, currentTime.wSecond);    
  10.   hr = db.ExecuteNonQuery(sqlStr);   
  11.    if(hr < 0)     
  12.  {        CString cstr = db.GetErrorsMessage();   
  13.        char* str = new char[cstr.GetLength()+1];   
  14.        sprintf(str, "%S", cstr);      
  15.     FAIL(str);          
  16. delete str;   
  17.    }  
  18. }db.Close(); 

事務處理

  1. void BeginTransaction();  
  2. void CommitTransaction();  
  3. void RollbackTransaction(); 

但是當前版本還沒有事務支持。

查詢操作

其實這么多操作之中查詢操作的實現是最復雜的。

  1. int     ExecuteReader(const CString& sql); 

執行ExecuteReader()會根據select語句初始化一個結果集,和ADO.net的實現不一樣,這個結果集不是直接通過DataSet或者DataReader來返回的,而是保持在內部的IRowset的結構里面。為了方便使用,SqlCeHelper實現了一個只讀,向前的數據讀取方法。

  1. bool IsEndOfRecordSet();void MoveNext();  
  2. void CloseReader();  
  3. int        GetRowInt(const long ordinal);  
  4. double    GetRowDouble(const long ordinal);  
  5. CString    GetRowStr(const long ordinal); 

當調用ExecuteReader()后,可以調用IsEndOfRecordSet()判斷結果集是否為空。MoveNext()為移動到下一條記錄。GetRowInt(), GetRowDouble()和 GetRowStr()為讀取當前記錄的數據。CloseReader()關閉結果集。

  1. SqlCeHelper db;      
  2. HRESULT hr = db.Open(DB_FILE_NAME);    
  3.   if(hr < 0)    {      
  4.     CString cstr = db.GetErrorsMessage();       
  5.    char* str = new char[cstr.GetLength()+1];        sprintf(str, "%S", cstr);     
  6.      FAIL(str);      
  7.     delete str;     
  8.  }        
  9.   CString sqlStr;      
  10. sqlStr.Format(L"SELECT * FROM T1");     
  11.  hr = db.ExecuteReader(sqlStr);      
  12. if(hr < 0)    {         
  13.  CString cstr = db.GetErrorsMessage();       
  14.    char* str = new char[cstr.GetLength()+1];        sprintf(str, "%S", cstr);       
  15.    FAIL(str);       
  16.    delete str;     
  17.  }          
  18. while(!db.IsEndOfRecordSet())     
  19.  {         
  20.  wprintf(L"F1=[%d], F2=[%s], F3=[%s]\n", db.GetRowInt(1), db.GetRowStr(2), db.GetRowStr(3));     
  21.      db.MoveNext();   
  22.    }      
  23. db.CloseReader();    
  24.   db.Close(); 

上面演示整個讀取過程。

Unit Test

項目開發中使用了TDD,關于Unit Test可以參考Wince和Windows Mobile下native C++的單元測試 和 Windows Mobile下使用CppUnitLite輸出測試結果 。

TO-DO-LIST

**Support to open the database with password

**Support to specify the Open Mode

**Support to load Ole Db without COM registry.

**Support Transactions

**Support Parameters

原文標題:Windows Mobile下Native C++訪問SqlCe的封裝

鏈接:http://www.cnblogs.com/procoder/archive/2009/09/09/1562947.html

【編輯推薦】

  1. C++之運算符重載,輸入輸出流詳細介紹
  2. C++、Java與C#的命名規范總結
  3. C++類成員函數的重載、覆蓋與隱藏
  4. Eclipse下C/C++環境搭建
  5. Java與C++語言在作用域上的差異淺析
責任編輯:彭凡 來源: 博客園
相關推薦

2009-09-25 11:04:07

C++動態加載DLL

2024-01-18 11:22:41

C++Windows開發

2010-01-13 18:44:03

C++編譯

2010-01-13 14:18:52

Windows Emb

2010-01-25 13:43:09

C++算術編碼

2010-01-22 14:28:24

使用C++

2010-01-26 15:51:06

C++變量

2010-01-26 11:06:50

C++開發

2015-07-07 11:03:15

Java C++JavaCPP

2009-02-19 15:40:00

Linux不同網段訪問

2024-05-06 11:19:20

內存池計算機編程

2010-01-19 09:19:02

C++封裝

2011-08-25 10:37:15

leveldb的訪問封C#客戶端源碼

2011-08-25 10:13:32

對leveldb的訪問LLServer編譯安

2021-09-13 09:21:51

InjectorWindows內存注入

2025-10-20 04:22:00

2010-01-19 10:04:30

C++類

2010-01-18 10:01:48

C++中訪問控制

2009-06-05 14:54:09

EclipseC++環境搭建

2009-04-10 08:58:47

Windows Mob微軟移動OS
點贊
收藏

51CTO技術棧公眾號

波多野结衣亚洲色图| 国产精品久久久久久久av福利| 神马午夜电影一区二区三区在线观看| 日韩视频一区| 亚洲一二三在线| 午夜不卡福利视频| 免费成人在线电影| 日本一区二区高清| 亚洲精品日韩av| 中国一级特黄毛片| 午夜精品毛片| 亚洲精品av在线播放| 国产偷人视频免费| 久久综合网导航| 91网站黄www| 成人精品一区二区三区电影免费 | 综合久久给合久久狠狠狠97色| 91久久大香伊蕉在人线| 探花视频在线观看| 一区二区电影| 亚洲视频欧美视频| 国产sm在线观看| 日韩高清在线| 亚洲国产视频直播| 亚洲欧美日韩另类精品一区二区三区 | 黄色av电影在线观看| 成人免费视频视频在线观看免费| 国产精品99久久久久久久久久久久 | 亚洲欧美日韩综合aⅴ视频| 精品欧美国产一区二区三区不卡| 国产精品爽爽久久久久久| 美女黄网久久| 97视频在线观看播放| 99自拍视频在线| 精品欧美激情在线观看| 亚洲激情视频在线播放| 极品人妻一区二区| 亚州精品国产| 欧美性videosxxxxx| 99在线精品免费视频| 日本无删减在线| 亚洲精品老司机| 在线观看日韩片| 91吃瓜网在线观看| 国产女人18毛片水真多成人如厕| 国产在线精品一区二区三区》| 国产免费av电影| 韩国午夜理伦三级不卡影院| 国产激情视频一区| 国产第一页在线观看| 先锋a资源在线看亚洲| 午夜精品久久久久久99热| 欧美成人国产精品高潮| 午夜国产一区二区| 色爱av美腿丝袜综合粉嫩av| 欧美亚洲色综久久精品国产| 欧美日韩xxxx| 国产亚洲精品一区二555| 欧美无人区码suv| 国产91精品入| 亚洲精品国产综合久久| 欧美大片免费播放器| 日本一区福利在线| 日韩国产精品视频| 特级西西人体wwwww| 亚洲va久久久噜噜噜久久| 日韩国产在线看| 日韩中文字幕电影| 国产成人短视频在线观看| 亚洲天堂精品在线| 青青青视频在线播放| 久久婷婷蜜乳一本欲蜜臀| 精品久久久91| 久久精品波多野结衣| 在线观看的日韩av| 国产69久久精品成人看| 久操视频在线免费观看| 免费在线欧美视频| 91老司机在线| 人妻无码中文字幕免费视频蜜桃| av一区二区三区黑人| 久久久久无码国产精品一区| 黄色毛片在线看| 中文字幕中文字幕一区| 激情五月五月婷婷| 国产精品电影| 欧美影视一区在线| www.日本久久| 秋霞在线一区| 在线观看免费高清视频97| 亚洲波多野结衣| 亚洲激情午夜| 国产精品久久久久久久久久| 国产情侣在线播放| 99久久久无码国产精品| 日韩亚洲视频在线| av文字幕在线观看| 欧美日韩加勒比精品一区| 天堂av在线网站| 91成人短视频| 亚洲最新在线视频| 久草国产在线视频| 青椒成人免费视频| 91九色对白| аⅴ资源新版在线天堂| 亚洲天堂免费看| 国产亚洲综合视频| 九色精品蝌蚪| 亚洲午夜精品久久久久久性色 | 欧美性高潮在线| 一个色综合久久| 欧美人妖视频| 久久久精品欧美| 69国产精品视频免费观看| 激情综合五月天| 欧美极品一区二区| 日本无删减在线| 欧美丰满美乳xxx高潮www| 国产老熟女伦老熟妇露脸| 99精品美女| 日韩免费观看视频| 好男人在线视频www| 国产精品久久久久久福利一牛影视 | 久久久久久青草| 亚洲精品国产视频| xxx国产在线观看| 色哟哟精品丝袜一区二区| 欧美久久精品一级黑人c片| 国产精品51麻豆cm传媒| 99久久精品免费| 免费人成在线观看视频播放| 久久青草视频| 亚洲日韩欧美视频| 国产一级做a爱片久久毛片a| 成人一区在线观看| 26uuu成人| 久久精品嫩草影院| 国产一区二区三区视频在线观看 | 欧美日韩一区在线| 中文字幕一二三四区| 亚洲二区免费| 国产精品国产三级欧美二区| 色婷婷av在线| 日韩欧美黄色影院| 中文字幕av播放| 精品一区二区三区香蕉蜜桃| 日韩电影天堂视频一区二区| 黄色综合网址| 亚洲区一区二区| 特级毛片www| wwwwxxxxx欧美| 日韩avxxx| 一个色免费成人影院| 97国产精品视频人人做人人爱| 亚洲黄色在线免费观看| 亚洲码国产岛国毛片在线| 中文字幕亚洲影院| 91精品国产乱码久久久久久| 成人免费网站在线观看| 免费观看在线黄色网| 制服视频三区第一页精品| 国产精品丝袜一区二区| 久久99精品视频| 亚洲成年人专区| 欧美专区一区| 欧美精品久久久久久久免费观看| 亚洲精品一区二区三区新线路| 亚洲自拍与偷拍| 色婷婷免费视频| 久久精品二区三区| 日韩欧美亚洲区| 韩国精品视频在线观看| 久久精品中文字幕电影| 国产xxxx在线观看| 亚洲午夜电影在线| 在线免费观看日韩av| 免费在线观看不卡| 日韩 欧美 自拍| julia中文字幕一区二区99在线| 高清一区二区三区日本久| 亚洲av激情无码专区在线播放| 色综合欧美在线视频区| 国产精品久久久久久成人| 韩国精品一区二区| av日韩一区二区三区| 久久精品色播| 国产精品一区二区3区| 国产理论在线观看| 亚洲精品乱码久久久久久金桔影视| www.日韩一区| 亚洲激情自拍偷拍| 国产白嫩美女无套久久| 蜜臀99久久精品久久久久久软件| 日本道在线视频| 亚洲三级精品| 91色视频在线导航| 欧洲一区精品| 久久久黄色av| 免费黄网站在线观看| 欧美一区二区三区在线观看视频| 91浏览器在线观看| 国产精品伦理一区二区| 日本黄色录像片| 久久国产麻豆精品| 成熟了的熟妇毛茸茸| 91精品国产自产拍在线观看蜜| 久久99精品久久久久久青青日本| 亚洲人成777| 26uuu亚洲伊人春色| 永久av在线| 精品亚洲一区二区| av男人天堂av| 欧美日韩另类一区| 国产精品999在线观看| 一二三四区精品视频| 美国美女黄色片| 91视频国产资源| www日本在线观看| 久久精品国产精品亚洲精品| 欧美黄网站在线观看| 欧美日韩一视频区二区| 亚洲7777| 精品国产91乱码一区二区三区四区 | 国产亚洲一区字幕| 逼特逼视频在线观看| 精品一区二区在线观看| 四季av一区二区| 久久99伊人| 国精产品一区一区三区视频| 一区二区电影在线观看| 在线电影看在线一区二区三区| 免费黄色成人| 久久国产精品-国产精品| 97色成人综合网站| 91成人免费在线观看| 爱情电影网av一区二区| 国产日本欧美一区二区三区在线| 欧美精品日日操| 4444欧美成人kkkk| 丁香花在线电影| 久久全国免费视频| 密臀av在线| 色综合天天综合网国产成人网 | 在线观看av免费观看| 蜜臀av性久久久久蜜臀aⅴ | 亚洲欧洲在线播放| 性感美女一级片| 日韩精品一二三四区| 婷婷在线观看视频| 亚洲国产91精品在线观看| 粉嫩小泬无遮挡久久久久久| 日韩午夜中文字幕| www.国产三级| 精品国产乱码91久久久久久网站| www.激情五月| 精品国产麻豆免费人成网站| 黄色美女一级片| 亚洲精品wwwww| 欧洲毛片在线| 中文字幕视频一区二区在线有码| 成年人在线视频免费观看| 中文字幕欧美专区| 黄av在线播放| 国内精品久久久| 精品91久久| 国产精品美女www爽爽爽视频| 国产成人福利夜色影视| 国产日韩av高清| 日本精品在线播放| 国产二区一区| 亚洲丁香日韩| 亚洲精品国产系列| 一区二区三区毛片免费| 国产一区二区三区乱码| 蜜桃视频一区| 亚洲娇小娇小娇小| 国产剧情一区在线| 亚洲天堂资源在线| 久久精品网站免费观看| av黄色免费在线观看| 亚洲精品国产无天堂网2021| 97人人澡人人爽人人模亚洲| 色女孩综合影院| 国产精品老熟女视频一区二区| 欧美xfplay| 久香视频在线观看| 欧美成人免费va影院高清| av中文资源在线资源免费观看| 国产成人精品电影久久久| 国产剧情一区二区在线观看| 国产精品一区二| 日韩不卡一区| 成人免费毛片在线观看| 日韩高清国产一区在线| 尤物网站在线看| 91麻豆6部合集magnet| 熟女少妇a性色生活片毛片| 亚洲国产人成综合网站| 国产九色91回来了| 亚洲成色www8888| 在线看av的网址| 91av国产在线| 国产视频一区二| 欧美精品一区二区三区久久| 91精品精品| 亚洲视频在线a| 成人av在线一区二区| 国产又粗又长又硬| 疯狂做受xxxx欧美肥白少妇| 国产理论视频在线观看| 亚洲女人天堂视频| 青草视频在线免费直播 | 中日韩在线观看视频| 精品国产青草久久久久福利| av在线天堂| 538国产精品一区二区在线| 蜜桃精品视频| 一本久久a久久精品vr综合| 亚洲一区成人| 日韩成人av影院| 亚洲色图一区二区三区| 欧美性猛交xxxx乱大交hd| 亚洲国产成人av在线| 国产视频在线播放| 国产精品电影一区| 欧美重口另类| 国产精品久久久久9999爆乳| 老司机一区二区| 无码少妇精品一区二区免费动态| 香蕉加勒比综合久久| 成人av无码一区二区三区| 久久久国产视频| 久久久久久一区二区三区四区别墅| 欧美三级华人主播| 亚洲看片免费| www国产视频| 亚洲国产wwwccc36天堂| 精品欧美一区二区精品少妇| 麻豆乱码国产一区二区三区| 欧美视频免费看| 亚洲高清视频一区二区| 爽好久久久欧美精品| 一本色道久久综合亚洲精品图片| 香港成人在线视频| 农村少妇久久久久久久| 久久久免费精品| 国产福利一区二区精品秒拍| 国产一级不卡视频| 国产69精品久久久久毛片| 久久激情免费视频| 精品久久久久久久人人人人传媒| 欧洲在线视频| 国产精品夜夜夜一区二区三区尤| 亚洲精选国产| 国产免费看av| 91激情五月电影| 9i精品一二三区| 91精品国产综合久久久久久蜜臀 | 国产日韩欧美麻豆| 久久久久久在线观看| 亚洲人高潮女人毛茸茸| 亚洲精品一区三区三区在线观看| 亚洲欧美久久234| 久久99精品视频| 久久久久久久久久久久久久免费看| 欧美一级高清片| 96av在线| 天堂社区 天堂综合网 天堂资源最新版 | 久久久九九九九| www.久久视频| 丝袜亚洲另类欧美重口| 久久99成人| 欧美三级在线观看视频| 国产欧美一二三区| 91久久久久国产一区二区| 欧美成人在线影院| 国内精品偷拍| 天天碰免费视频| 亚洲黄网站在线观看| 性感美女视频一二三| 国产精品久久久久久亚洲调教| 亚洲精品tv久久久久久久久久| 精品人妻在线视频| 色婷婷av一区二区三区之一色屋| 午夜毛片在线| 国产精品一区二区三区免费| 可以看av的网站久久看| 国产精品白丝喷水在线观看| 欧美tk—视频vk| 日韩精品免费观看视频| 国产一二三四区在线观看| 91麻豆免费在线观看| 91精品视频免费在线观看| 国内精品视频一区| 成人a'v在线播放| 亚洲女则毛耸耸bbw| 欧美色图第一页| 色戒汤唯在线观看| 免费成人进口网站| 国产农村妇女精品|