• <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年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統計

            • 隨筆 - 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 隨意門 閱讀(631) 評論(0)  編輯 收藏 引用

            日本精品久久久中文字幕| 久久久久精品国产亚洲AV无码| 韩国三级中文字幕hd久久精品| 久久综合精品国产二区无码| 无码人妻久久一区二区三区蜜桃| 久久精品成人| 久久精品无码午夜福利理论片 | 久久精品中文字幕一区| 久久99热这里只有精品国产| 亚洲精品乱码久久久久久不卡| 久久亚洲中文字幕精品一区| 久久久无码精品亚洲日韩蜜臀浪潮| 伊人色综合九久久天天蜜桃| 2021少妇久久久久久久久久| 久久精品无码免费不卡| 久久精品国产亚洲AV无码偷窥| 久久久久亚洲AV成人网人人软件| 久久久久久亚洲精品无码| 精品人妻久久久久久888| 久久人人爽人人爽人人爽| 久久久久亚洲AV无码专区网站| 欧美牲交A欧牲交aⅴ久久| 久久精品国产免费观看| 亚洲国产精品狼友中文久久久| 久久99精品久久久久久齐齐| 久久无码人妻一区二区三区 | 亚洲欧美另类日本久久国产真实乱对白 | 国内精品久久久久伊人av| 亚洲日本va午夜中文字幕久久 | 97久久超碰成人精品网站| 国产精品久久久久天天影视| .精品久久久麻豆国产精品| 午夜不卡888久久| 成人资源影音先锋久久资源网| 日韩影院久久| 亚洲国产另类久久久精品| 久久香综合精品久久伊人| 日韩精品久久无码人妻中文字幕| 久久精品国产AV一区二区三区| 久久久亚洲AV波多野结衣| 久久久久亚洲av无码专区喷水|