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

            興海北路

            ---男兒仗劍自橫行
            <2008年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            統計

            • 隨筆 - 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)  編輯 收藏 引用

            欧美粉嫩小泬久久久久久久| 久久精品国产清自在天天线| 久久中文骚妇内射| 一本色综合网久久| 热99re久久国超精品首页| 99久久精品无码一区二区毛片 | 麻豆亚洲AV永久无码精品久久| 国产69精品久久久久9999APGF| 久久久亚洲欧洲日产国码aⅴ| 久久久噜噜噜久久| 亚洲精品无码久久久久久| 91精品久久久久久无码| 久久夜色精品国产噜噜亚洲a| 69国产成人综合久久精品| 人人狠狠综合88综合久久| 亚洲狠狠综合久久| 亚洲欧美日韩中文久久 | 日韩va亚洲va欧美va久久| 久久婷婷国产综合精品| 久久强奷乱码老熟女| 国产一区二区三区久久精品| 精品国产99久久久久久麻豆 | 久久精品亚洲男人的天堂| 国内精品久久久久影院优| 亚洲愉拍99热成人精品热久久| 久久精品成人免费网站| 久久天天躁狠狠躁夜夜网站| 欧美亚洲国产精品久久久久| 久久国产午夜精品一区二区三区| 国内精品久久久久影院一蜜桃| 久久人人爽人人爽人人av东京热| 久久亚洲视频| 久久影视国产亚洲| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产国产成人精品久久| 久久精品a亚洲国产v高清不卡| 7777久久久国产精品消防器材| 99久久无色码中文字幕人妻| 精品国产乱码久久久久软件| 亚洲精品午夜国产VA久久成人| 777午夜精品久久av蜜臀|