青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 131, comments - 12, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

現(xiàn)在正做一個(gè)接口,通過不同的連接字符串操作不同的數(shù)據(jù)庫(kù)。要用到mysql數(shù)據(jù)庫(kù),以前沒用過這個(gè)數(shù)據(jù)庫(kù),用access和sql server比較多。通過網(wǎng)上的一些資料和自己的摸索,大致清楚了C++連接mysql的方法。可以通過2種方法實(shí)現(xiàn)。

第一種方法是利用ADO連接,

第二種方法是利用mysql自己的api函數(shù)進(jìn)行連接。

第一種方法可以實(shí)現(xiàn)我當(dāng)前的需求,通過連接不同的字符串來連接不同的數(shù)據(jù)庫(kù)。暫時(shí)只連接了mysql,sqlserver,oracle,access。對(duì)于access,因?yàn)樗鼊?chuàng)建表的SQL語句不太兼容標(biāo)準(zhǔn)SQL語句,需要做一些處理,這里暫時(shí)不說。第二種方法只能針對(duì)于mysql數(shù)據(jù)庫(kù)的連接,不過用這種方法不用安裝MyODBC服務(wù)器程序。

不管用哪種方法,首先需要安裝Mysql數(shù)據(jù)庫(kù),安裝方法請(qǐng)看“mysql安裝及一些注意點(diǎn)”。最好安裝一個(gè)Navicat for mysql,方便操作mysql數(shù)據(jù)庫(kù)。下面分別說下這兩種方法:

(一)通過ADO連接MySql數(shù)據(jù)庫(kù)

1、通過ADO連接MySql數(shù)據(jù)庫(kù),首先得安裝MyODBC服務(wù)器程序。

MyODBC版本要和MySql的版本對(duì)應(yīng)上,否則會(huì)連接不上數(shù)據(jù)庫(kù)。我用的版本分別是mysql-5.1.48-win32.msi和mysql-connector-odbc-5.1.5-win32.msi。

安裝好后,點(diǎn)擊開始菜單->設(shè)置->控制面板->管理工具->數(shù)據(jù)源(ODBC)->用戶DSN->添加->選擇MySQL ODBC 5.1 Driver。如下圖:

然后雙擊MySQL ODBC 5.1 Driver進(jìn)行配置。配置好可以點(diǎn)Test進(jìn)行下測(cè)試(如下圖),如果能連上會(huì)彈出connection successful對(duì)話框。

上圖中的Data Source Name:中的內(nèi)容就是代碼里DSN所對(duì)應(yīng)的值。

例如:"DSN=MySqlODBC;server=localhost;database=test"。

2、配置好后,就可以開始編碼了。

(1)首先導(dǎo)入ADO類型庫(kù)。#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")。您的環(huán)境中msado15.dll不一定在這個(gè)目錄下,請(qǐng)按實(shí)際情況修改。或者把msado15.dll這個(gè)文件拷貝到你的工程目錄下,直接#import "msado15.dll" \ no_namespace \rename ("EOF", "adoEOF")包含進(jìn)來。

(2 )創(chuàng)建Connection對(duì)象并連接數(shù)據(jù)庫(kù)

  1. {   
  2. CoInitialize(NULL);   
  3. m_pConnection.CreateInstance(__uuidof(Connection));   
  4. try 
  5. {  
  6. //設(shè)置連接時(shí)間  
  7. m_pConnection->ConnectionTimeout = 5;  
  8. //打開數(shù)據(jù)庫(kù)連接  
  9. HRESULT hr = m_pConnection->Open("DSN=MySqlODBC;server=localhost;database=test","root","root",adModeUnknown);  
  10. }  
  11. catch(_com_error &e)  
  12. {  
  13. MessageBox(NULL, e.Description(), _T(""), MB_OK);  
  14. return FALSE;  
  15. }   
  16. return TRUE;  
  17. }  

(3)執(zhí)行SQL語句

  1. BOOL CDBManagerSub::ExecuteSQL( _bstr_t bstrSQL )  
  2. {  
  3. // _variant_t RecordsAffected;  
  4. try 
  5. {  
  6. // 是否已經(jīng)連接數(shù)據(jù)庫(kù)  
  7. if(m_pConnection == NULL)  
  8. {  
  9. //重新連接數(shù)據(jù)庫(kù)  
  10. Open(m_dbType, m_strServer, m_strUserName, m_strPasswor, m_strDBName);  
  11. }  
  12. // Connection對(duì)象的Execute方法:(_bstr_t CommandText,   
  13. // VARIANT * RecordsAffected, long Options )   
  14. // 其中CommandText是命令字串,通常是SQL命令。  
  15. // 參數(shù)RecordsAffected是操作完成后所影響的行數(shù),   
  16. // 參數(shù)Options表示CommandText的類型:adCmdText-文本命令;adCmdTable-表名  
  17. // adCmdProc-存儲(chǔ)過程;adCmdUnknown-未知  
  18. _RecordsetPtr hr = m_pConnection->Execute(bstrSQL,NULL,adCmdText);  
  19. return true;  
  20. }  
  21. catch(_com_error e)  
  22. {  
  23. MessageBox(NULL, e.Description(), _T(""), MB_OK);  
  24. return false;  
  25. }  
  26. }  

_bstr_t bstrSQL為輸入的SQL語句,如果返回TRUE,則執(zhí)行成功,返回FLASH則會(huì)報(bào)對(duì)應(yīng)的錯(cuò)誤提示。

例如:下面的創(chuàng)建testTable表的SQL語句:

  1. char* pQuery = "create table if not exists testTable( ID VARCHAR(10), Name VARCHAR(255),Descs VARCHA(255),PRIMARY KEY (ID))";  
  2. ExecuteSQL(pQuery);  

 3、附上mysql數(shù)據(jù)庫(kù)的操作,方便沒有安裝Navicat for mysql的朋友參考。

打開“開始->所有程序->MySQL->MySQL Server 5.0->MySQL Command Line Client.exe”,如果沒有設(shè)置密碼就直接按回車,會(huì)提示服務(wù)器啟動(dòng)成功。

  1. mysql> SHOW DATABASES;//顯示所有的數(shù)據(jù)庫(kù),注意一定要 敲“;”后再按回車  
  2. mysql> CREATE DATABASE mydb;//創(chuàng)建數(shù)據(jù)庫(kù)  
  3. mydbmysql> USE mydb;//選擇你所創(chuàng)建的數(shù)據(jù)庫(kù)  
  4. mydbmysql> SHOW TABLES; //顯示數(shù)據(jù)庫(kù)中的表  
  5. mysql> CREATE TABLE mytable (username VARCHAR(100), visitelist VARCHAR(200),remark VARCHAR(200),PRIMARY KEY (username));//創(chuàng)建一個(gè)表mytable: 用戶名;訪問列表,主鍵為username  
  6. mysql> DESCRIBE mytable;//顯示表的結(jié)構(gòu)

(二)通過MySQL自己的API函數(shù)進(jìn)行連接

1、使用API的方式連接,需要加載mysql的頭文件和lib文件。

在VS2010的附加包含目錄中添加\MySQL\MySQL Server 5.1\include。在安裝MySql的目錄下找。 把libmysql.dll和libmysql.lib文件拷貝到所建的工程目錄下。然后在頭文件里包含以下內(nèi)容:

  1. //mysql所需的頭文件和庫(kù)文件  
  2. #include "winsock.h" 
  3. #include "mysql.h" 
  4. #pragma comment(lib,"libmySQL.lib"

2、進(jìn)行編碼

(1)連接mysql數(shù)據(jù)庫(kù)

頭文件里定義數(shù)據(jù)源指針 MYSQL m_sqlCon;

//連接MySql數(shù)據(jù)庫(kù)

  1. try 
  2. {  
  3. mysql_init(&m_sqlCon);  
  4. // localhost:服務(wù)器 root為賬號(hào)密碼 test為數(shù)據(jù)庫(kù)名 3306為端口  
  5. if(!mysql_real_connect(&m_sqlCon, "localhost","root","root","test",3306,NULL,0))  
  6. {  
  7. AfxMessageBox(_T("數(shù)據(jù)庫(kù)連接失敗!"));  
  8. return FALSE;  
  9. }   
  10. return TRUE;  
  11. }  
  12. catch (...)  
  13. {  
  14. return FALSE;  

(2)關(guān)閉數(shù)據(jù)庫(kù)

  1. mysql_close(&m_sqlCon); 

(3)創(chuàng)建表

  1. char* pQuery = "create table if not exists DS_Building( ID VARCHAR(10),Name VARCHAR(255),Descs VARCHAR(255),PRIMARY KEY (ID))"   
  2. if(mysql_real_query(&m_sqlCon,pQuery,(UINT)strlen(pQuery))!=0)  
  3. {   
  4. const char* pCh = mysql_error(&m_sqlCon);  
  5. return FALSE;  

附MySQL的API接口:

  1. mysql_affected_rows() 返回被最新的UPDATEDELETEINSERT查詢影響的行數(shù)。  
  2. mysql_close() 關(guān)閉一個(gè)服務(wù)器連接。  
  3. mysql_connect() 連接一個(gè)MySQL服務(wù)器。該函數(shù)不推薦;使用mysql_real_connect()代替。  
  4. mysql_change_user() 改變?cè)谝粋€(gè)打開的連接上的用戶和數(shù)據(jù)庫(kù)。  
  5. mysql_create_db() 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。該函數(shù)不推薦;而使用SQL命令CREATE DATABASE。  
  6. mysql_data_seek() 在一個(gè)查詢結(jié)果集合中搜尋一任意行。  
  7. mysql_debug() 用給定字符串做一個(gè)DBUG_PUSH。  
  8. mysql_drop_db() 拋棄一個(gè)數(shù)據(jù)庫(kù)。該函數(shù)不推薦;而使用SQL命令DROP DATABASE。  
  9. mysql_dump_debug_info() 讓服務(wù)器將調(diào)試信息寫入日志文件。  
  10. mysql_eof() 確定是否已經(jīng)讀到一個(gè)結(jié)果集合的最后一行。這功能被反對(duì); mysql_errno()或mysql_error()可以相反被使用。  
  11. mysql_errno() 返回最近被調(diào)用的MySQL函數(shù)的出錯(cuò)編號(hào)。  
  12. mysql_error() 返回最近被調(diào)用的MySQL函數(shù)的出錯(cuò)消息。  
  13. mysql_escape_string() 用在SQL語句中的字符串的轉(zhuǎn)義特殊字符。  
  14. mysql_fetch_field() 返回下一個(gè)表字段的類型。  
  15. mysql_fetch_field_direct () 返回一個(gè)表字段的類型,給出一個(gè)字段編號(hào)。  
  16. mysql_fetch_fields() 返回一個(gè)所有字段結(jié)構(gòu)的數(shù)組。  
  17. mysql_fetch_lengths() 返回當(dāng)前行中所有列的長(zhǎng)度。  
  18. mysql_fetch_row() 從結(jié)果集合中取得下一行。  
  19. mysql_field_seek() 把列光標(biāo)放在一個(gè)指定的列上。  
  20. mysql_field_count() 返回最近查詢的結(jié)果列的數(shù)量。  
  21. mysql_field_tell() 返回用于最后一個(gè)mysql_fetch_field()的字段光標(biāo)的位置。  
  22. mysql_free_result() 釋放一個(gè)結(jié)果集合使用的內(nèi)存。  
  23. mysql_get_client_info() 返回客戶版本信息。  
  24. mysql_get_host_info() 返回一個(gè)描述連接的字符串。  
  25. mysql_get_proto_info() 返回連接使用的協(xié)議版本。  
  26. mysql_get_server_info() 返回服務(wù)器版本號(hào)。  
  27. mysql_info() 返回關(guān)于最近執(zhí)行得查詢的信息。  
  28. mysql_init() 獲得或初始化一個(gè)MYSQL結(jié)構(gòu)。  
  29. mysql_insert_id() 返回有前一個(gè)查詢?yōu)橐粋€(gè)AUTO_INCREMENT列生成的ID。  
  30. mysql_kill() 殺死一個(gè)給定的線程。  
  31. mysql_list_dbs() 返回匹配一個(gè)簡(jiǎn)單的正則表達(dá)式的數(shù)據(jù)庫(kù)名。  
  32. mysql_list_fields() 返回匹配一個(gè)簡(jiǎn)單的正則表達(dá)式的列名。  
  33. mysql_list_processes() 返回當(dāng)前服務(wù)器線程的一張表。  
  34. mysql_list_tables() 返回匹配一個(gè)簡(jiǎn)單的正則表達(dá)式的表名。  
  35. mysql_num_fields() 返回一個(gè)結(jié)果集合重的列的數(shù)量。  
  36. mysql_num_rows() 返回一個(gè)結(jié)果集合中的行的數(shù)量。  
  37. mysql_options() 設(shè)置對(duì)mysql_connect()的連接選項(xiàng)。  
  38. mysql_ping() 檢查對(duì)服務(wù)器的連接是否正在工作,必要時(shí)重新連接。  
  39. mysql_query() 執(zhí)行指定為一個(gè)空結(jié)尾的字符串的SQL查詢。  
  40. mysql_real_connect() 連接一個(gè)MySQL服務(wù)器。  
  41. mysql_real_query() 執(zhí)行指定為帶計(jì)數(shù)的字符串的SQL查詢。  
  42. mysql_reload() 告訴服務(wù)器重裝授權(quán)表。  
  43. mysql_row_seek() 搜索在結(jié)果集合中的行,使用從mysql_row_tell()返回的值。  
  44. mysql_row_tell() 返回行光標(biāo)位置。  
  45. mysql_select_db() 連接一個(gè)數(shù)據(jù)庫(kù)。  
  46. mysql_shutdown() 關(guān)掉數(shù)據(jù)庫(kù)服務(wù)器。  
  47. mysql_stat() 返回作為字符串的服務(wù)器狀態(tài)。  
  48. mysql_store_result() 檢索一個(gè)完整的結(jié)果集合給客戶。  
  49. mysql_thread_id() 返回當(dāng)前線程的ID。  
  50. mysql_use_result() 初始化一個(gè)一行一行地結(jié)果集合的檢索。

Feedback

# re: C++連接mysql數(shù)據(jù)庫(kù)的兩種方法  回復(fù)  更多評(píng)論   

2012-11-12 19:51 by eryar
Good!
Mark!

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品福利电影| 亚洲免费成人| 欧美大成色www永久网站婷| 亚洲欧美精品| 亚洲免费视频一区二区| 亚洲午夜激情网页| 亚洲欧美成人在线| 性做久久久久久久免费看| 亚洲欧美激情诱惑| 久久久久久久波多野高潮日日| 欧美在线观看视频在线| 久久久五月婷婷| 欧美精品入口| 国产日本欧美一区二区三区| 国产综合网站| 一本色道久久综合| 久久国内精品视频| 欧美电影免费观看高清| 亚洲免费播放| 久久久91精品国产一区二区精品| 免播放器亚洲| 国产精品自在线| 亚洲第一区在线观看| 一区二区三区四区国产精品| 午夜精品久久久久99热蜜桃导演| 久久久夜精品| 一本高清dvd不卡在线观看| 午夜精品久久久久久久男人的天堂| 久久久无码精品亚洲日韩按摩| 欧美视频一区二区三区…| 国产视频精品网| 中日韩高清电影网| 欧美sm视频| 亚洲欧美国产高清va在线播| 免费久久精品视频| 国产日韩亚洲欧美| 中文一区在线| 亚洲大胆人体视频| 一区二区三区色| 欧美成人69av| 18成人免费观看视频| 欧美一级理论片| 日韩午夜免费| 欧美精品播放| 亚洲国产精品专区久久| 久久九九精品| 亚洲自拍偷拍视频| 欧美视频手机在线| 99精品国产在热久久下载| 国产区亚洲区欧美区| 你懂的国产精品永久在线| 国产日韩在线视频| 亚洲一区视频在线观看视频| 欧美成人免费全部观看天天性色| 亚洲欧美影院| 国产精品乱子乱xxxx| 一区电影在线观看| 亚洲靠逼com| 欧美另类一区| 夜夜嗨av色综合久久久综合网| 欧美第一黄网免费网站| 卡通动漫国产精品| 亚洲高清不卡| 亚洲大片av| 欧美日韩成人激情| 一区二区三区久久精品| 亚洲精选在线观看| 欧美日韩视频在线一区二区 | 久久乐国产精品| 国产欧美精品| 久久riav二区三区| 性色一区二区三区| 一区二区三区在线免费观看| 久久亚洲私人国产精品va| 久久精品青青大伊人av| 国模大胆一区二区三区| 噜噜噜噜噜久久久久久91 | 亚洲精品精选| 欧美天堂在线观看| 午夜国产精品视频免费体验区| 国产精品99久久久久久久vr | 欧美成人福利视频| 欧美国产日韩一区二区| 亚洲图片在线观看| 亚洲欧美精品在线| 一色屋精品视频在线看| 亚洲激情在线观看视频免费| 欧美日韩在线直播| 欧美一区二区在线看| 久久亚洲影音av资源网| 一本色道久久综合一区| 新67194成人永久网站| 亚洲国产成人精品久久| 亚洲肉体裸体xxxx137| 国产欧美精品在线播放| 欧美福利在线| 国产精品日韩欧美大师| 玖玖精品视频| 欧美日韩在线观看视频| 久久国产精品黑丝| 欧美va天堂va视频va在线| 亚洲欧美日韩在线综合| 老司机一区二区| 欧美一级大片在线观看| 欧美一区二区三区免费观看视频 | 国产精品久久久久高潮| 久久久国产一区二区| 欧美va亚洲va日韩∨a综合色| 亚洲影院免费观看| 久久免费精品日本久久中文字幕| 日韩午夜在线播放| 欧美综合国产| 亚洲一区一卡| 欧美gay视频激情| 久久精品人人做人人综合| 欧美精品久久久久久久久久| 久久精品一区四区| 欧美视频网站| 亚洲区中文字幕| 一区在线影院| 午夜精品久久久久| 亚洲深夜福利| 欧美国产第二页| 欧美mv日韩mv国产网站app| 国产精品一区二区在线| 亚洲美女中文字幕| 日韩午夜在线观看视频| 老牛嫩草一区二区三区日本| 欧美有码在线观看视频| 欧美午夜精品久久久久久人妖 | 亚洲一二三区精品| av成人毛片| 欧美激情精品久久久久久免费印度| 久久久噜噜噜久久久| 国产精品亚洲一区| 亚洲视频在线看| 亚洲免费在线视频| 欧美日韩国产色视频| 亚洲激情影院| 9人人澡人人爽人人精品| 欧美国产日韩二区| 亚洲精品美女| 国产精品99久久不卡二区| 欧美精品国产| 日韩午夜激情| 亚洲欧洲av一区二区| 国产精品一区2区| 亚洲欧美一区二区三区久久| 久久国产精品99国产精| 国产欧美精品一区二区色综合 | 一二三区精品| 午夜亚洲性色福利视频| 国产精品日本| 欧美在线一级va免费观看| 久久午夜色播影院免费高清| 极品日韩久久| 欧美大片免费久久精品三p | 免播放器亚洲一区| 亚洲区一区二区三区| 欧美精品亚洲一区二区在线播放| 亚洲激情综合| 久久综合给合久久狠狠狠97色69| 国产精品一区视频| 欧美一区二区大片| 麻豆av一区二区三区久久| 亚洲国产成人一区| 欧美日韩天堂| 久久久久综合| 在线亚洲国产精品网站| 久久久精品久久久久| 亚洲福利免费| 国产精品成人免费| 久久亚洲高清| 一区二区三区偷拍| 美女网站在线免费欧美精品| 亚洲精品中文字幕有码专区| 国产精品美女主播在线观看纯欲| 久久久久欧美精品| 中日韩午夜理伦电影免费| 免费久久精品视频| 亚洲免费一在线| 亚洲国产另类久久精品| 国产精品久久久久国产a级| 久久久另类综合| 亚洲午夜激情网页| 亚洲黄页一区| 美腿丝袜亚洲色图| 午夜视黄欧洲亚洲| 亚洲精品资源| 在线精品国产欧美| 国产精品毛片va一区二区三区| 另类图片综合电影| 小处雏高清一区二区三区| aaa亚洲精品一二三区| 欧美xxx在线观看| 久久精品一二三| 欧美亚洲一区在线| 夜夜嗨av色一区二区不卡| 91久久精品国产91性色tv| 国产亚洲精品aa|