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

            興海北路

            ---男兒仗劍自橫行
            <2009年3月>
            22232425262728
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統計

            • 隨筆 - 85
            • 文章 - 0
            • 評論 - 17
            • 引用 - 0

            常用鏈接

            留言簿(6)

            隨筆分類

            隨筆檔案

            收藏夾

            全是知識啊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            VC使用C API 連接操作MySQL數據庫

            一切盡在代碼中,代碼中也太多了if/else,可以對它進行更好的函數及至類的封裝,規范的處理好異常。

            1. #include <windows.h>
            2. //需要在VC的Options設置一個include路徑指向'%mysql_home%/inlude'目錄   
            3. #include <mysql.h>
            4. //設置一個lib路徑指向'%mysql_home%/lib/opt'目錄 (mysql5.0是個目錄)   
            5. #pragma comment(lib,"libmysql.lib")    
            6. #define host_name "localhost"  //數據庫服務器   
            7. #define db_name "test"         //數據庫名   
            8. #define user_name "root"       //用戶名   
            9. #define password ""            //密碼   
            10. int  main( int  argc, char  * argv[]) {   
            11.     
            12.   char  szSqlText[500] ;   
            13.     
            14.  MYSQL *conn;   
            15.  MYSQL_RES *rs;   
            16.  MYSQL_ROW row;    //注意它的聲明 typedef char **MYSQL_ROW,字符串數組   
            17.   BOOL  bCreate = FALSE;   
            18.     
            19.  conn = mysql_init(NULL);   
            20.   if (conn == NULL)   
            21.  {   
            22.   fprintf(stderr, "mysql_init() failed (probably out of memory)\n" );   
            23.   exit(1);   
            24.  }   
            25.     
            26.   if  (mysql_real_connect(conn,host_name,user_name,password,   
            27.   db_name,MYSQL_PORT,NULL,0) == NULL)   
            28.  {   
            29.    //在MYSQL初始化之后的操作如果有錯誤,可以用mysql_errno(MYSQL*)和   
            30.    //mysql_errer(MYSQL*) 分別獲得出錯代號和描述   
            31.   fprintf(stderr, "mysql_real_connect() failed:\nError %u (%s)\n" ,   
            32.    mysql_errno(conn),mysql_error(conn));   
            33.   exit(1);   
            34.  }   
            35.     
            36.  printf( "connect to db successful.\n" );   
            37.   if  (bCreate) {   
            38.    //第一次運行創建一個表mytable   
            39.   sprintf(szSqlText, "create table mytable(time datetime,s1 char(6),s2 char(11),s3 int,s4 int)" );   
            40.    if  (mysql_query(conn,szSqlText)) {   
            41.    printf( "Can't create table.\n" );   
            42.    mysql_close(conn);   
            43.     return  0;   
            44.   }   
            45.  }   
            46.  sprintf(szSqlText, "insert into mytable values('2000-3-10 21:01:30','Test','MySQLTest',2000,3)" );   
            47.   if  (mysql_query(conn,szSqlText)) {   
            48.   printf( "Insert values error:\nError %u (%s)\n" ,   
            49.    mysql_errno(conn),mysql_error(conn));   
            50.   mysql_close(conn);   
            51.    return  0;   
            52.  }   
            53.   else {   
            54.    //insert/delete/update 語句可用mysql-affected_rows()得到受作用的行   
            55.   printf( "INSERT statement succeeded: %lu rows affected\n" ,   
            56.    (unsigned  long )mysql_affected_rows(conn));   
            57.  }   
            58.     
            59.   //查詢數據   
            60.  sprintf(szSqlText, "select * from mytable" );   
            61.     
            62.   //執行成功則返回零   
            63.   if  (mysql_query(conn,szSqlText) != 0) {   
            64.   mysql_close(conn);   
            65.    return  0;   
            66.  }   
            67.   else  {   
            68.    //立即從服務器返回所有行,存儲到本地,產生結果集,失敗則返回NULL   
            69.   rs = mysql_store_result(conn);   
            70.      
            71.    //結果集是保留在服務器上,fetch_row時才逐行從服務器上取   
            72.    //rs = mysql_use_result(conn);   
            73.    //Get query result.   
            74.    int  count = ( int )mysql_num_rows(rs);   
            75.   printf( "Query: %s.\n%ld records found.\n" ,szSqlText,count);   
            76.    //MYSQL_ROW是一個指向數值數組的指針,row[0],row[1]...row[列數-1]   
            77.    //所有的數據類型都以字符串返回,即使是數字型,要進行串轉換   
            78.    //NULL指針代表數據庫字段的NULL,應經常檢查列是否為NULL   
            79.    while ((row = mysql_fetch_row(rs)) != NULL){   //返回NULL,則說明不再有行   
            80.     for (unsigned  int  i=0; i<mysql_num_fields(rs);i++){   
            81.      if (i>0)   
            82.     fputc('\t',stdout);   
            83.     printf( "%s" ,row[i]!=NULL ? row[i]: "NULL" );   
            84.    }   
            85.    fputc('\n',stdout);   
            86.   }   
            87.    //使用完后,釋放結果集占用內存   
            88.   mysql_free_result(rs);   
            89.  }   
            90.  mysql_close(conn);   
            91.   return  0;   
            92. }   
            93. //最后,注意查詢語句中字符串的轉義 select a from t where a=''1',是要出錯的   
            94. //空字符轉換為'\0',這里的0 是可打印的ASCII 碼0,而不是空。   
            95. //反斜線、單引號和雙引號分別轉換為‘\\’、‘\'’ 和‘\"’   
            96. //你也可以用mysql_escape_string(to_str,from_str,from_len)轉換sql語句   
            輸出結果是:
            connect to db successful.
            INSERT statement succeeded: 1 rows affected
            Query: select * from mytable.
            8 records found.
            2000-03-10 21:01:30     Test    MySQLTest       2000    3
            2000-03-10 21:01:30     Test    MySQLTest       2000    3
            2000-03-10 21:01:30     Test    MySQLTest       2000    3
            2000-03-10 21:01:30     Test    MySQLTest       2000    3
            2000-03-10 21:01:30     Test    MySQLTest       2000    3
            Press any key to continue

            posted on 2008-04-08 14:50 隨意門 閱讀(635) 評論(0)  編輯 收藏 引用

            国产激情久久久久影院老熟女| 精品蜜臀久久久久99网站| 久久国产一片免费观看| 久久精品视频一| 国产精品久久久久久| 无码8090精品久久一区| 久久久国产乱子伦精品作者| 久久一区二区三区免费| 99精品国产综合久久久久五月天 | 午夜精品久久久内射近拍高清| 亚洲欧美日韩久久精品第一区| 99国产欧美久久久精品蜜芽| 亚洲人成无码网站久久99热国产| 久久99国内精品自在现线| 四虎亚洲国产成人久久精品| 91精品国产91久久| 久久国产乱子伦免费精品| 中文字幕无码久久人妻| 久久精品女人天堂AV麻| 国产精品九九九久久九九| 国产色综合久久无码有码| 精品久久久久久久国产潘金莲 | 久久久免费观成人影院| 久久精品国产免费一区| 久久久久亚洲Av无码专| 亚洲中文字幕无码久久2017| 思思久久99热只有频精品66| 久久精品亚洲欧美日韩久久| 亚洲国产精久久久久久久| 国产精品久久一区二区三区| 久久精品国产亚洲av影院| 精品国际久久久久999波多野| 99久久国产精品免费一区二区 | 99久久这里只精品国产免费| 久久久WWW免费人成精品| 久久播电影网| 综合久久精品色| 久久综合亚洲色一区二区三区| 国产精品美女久久福利网站| 久久99热这里只有精品国产| 久久精品国产99久久久|