64位win7平臺下,使用C語言通過odbc無法連線MySQL資料庫的問題。
阿新 • • 發佈:2019-02-01
編譯器:vc6.0或vs2012
最近學習資料庫需要使用C語言通過odbc管理資料庫,可是總是出問題,記錄如下:
1. 首先安裝mysql資料庫,這裡不多講。
2. 選擇編譯器,我電腦上的編譯器還是蠻多的,但是從網上查到的資料以及原始碼中需要包含的標頭檔案都是vc特有的,所以只能使用這款編譯器了,後來發現vs也可以(microsoft家族啊...)。
3. 安裝資料庫驅動,根據我的環境我安裝了官網上下載到的64位mysql-odbc驅動,從控制面板成功配置資料來源。
4.
程式碼:
#include <Windows.h> #include "sql.h" #include "sqlext.h"//上面這三個資料庫是必須的 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { RETCODE error; HENV env; HDBC conn; SQLAllocEnv(&env); SQLAllocConnect(env,&conn); SQLConnect(conn, (SQLCHAR *)("SQL32"),SQL_NTS,(SQLCHAR *)("root"),SQL_NTS,(SQLCHAR *)(""),SQL_NTS);//注意這裡使用的強制型別轉換 { char branchname[80]; float balance; long int lenOut1,lenOut2; HSTMT stmt; char *sqlquery = "select branch_name,sum(balance) from account group by branch_name;"; SQLAllocStmt(conn,&stmt); error = SQLExecDirect(stmt,(SQLCHAR *)(sqlquery),SQL_NTS); if(error == SQL_SUCCESS){ SQLBindCol(stmt,1,SQL_C_CHAR,branchname,80,&lenOut1); SQLBindCol(stmt,2,SQL_C_FLOAT,&balance,0,&lenOut2); while(SQLFetch(stmt) == SQL_SUCCESS){ printf(" %s %f\n",branchname,balance); } } SQLFreeStmt(stmt,SQL_DROP); } SQLDisconnect(conn); SQLFreeConnect(conn); SQLFreeEnv(env); system("pause"); return 0; }
然後,老是出錯....
5. 我在每條語句後丟擲異常,發現錯誤始終在SQLConnect部分,無法連線資料庫。但是事實是我的資料來源已經配置好了啊!!!
所以我以為是程式碼或者編譯器的問題,更換...然後我試了java,eclipse(其實都不能用odbc貌似),還用了php,都連線不了資料來源。
6. 轉機來了,我在vs2012中工具裡發現了直接連線資料庫的選項(我真是太不會用這些高階平臺了),連線不上。但是卻說明了不是程式碼的問題,還是在資料來源上。
而且提示是版本有些問題
7. 但是為什麼呢?後來我在微軟的http://support.microsoft.com/kb/942976/zh-cn頁面發現了odbc管理器的問題,
——————————————————————————————————————————————————
64 位版本的 MicrosoftWindows作業系統的系統包括下面的版本Microsoft 開放式資料庫連線(ODBC) (ODBC) 資料來源管理器工具 (Odbcad32.exe):- Odbcad32.exe 檔案的 32 位版本位於%systemdrive%\Windows\SysWoW64 資料夾中。
- Odbcad32.exe 檔案的 64 位版本位於%systemdrive%\Windows\System32 資料夾中。
————————————————————————————————
控制面板的入口是64位版本。
雖然覺得我就應該使用64位的,但還是下載了32位的驅動試一下,用Windows\SysWoW64 下的odbc管理工具設定資料來源後,連線。。。。。。成功了。。。。。。。
但是為什麼啊啊啊啊啊?????????