1. 程式人生 > >64位win7平臺下,使用C語言通過odbc無法連線MySQL資料庫的問題。

64位win7平臺下,使用C語言通過odbc無法連線MySQL資料庫的問題。

編譯器: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管理工具設定資料來源後,連線。。。。。。成功了。。。。。。。

但是為什麼啊啊啊啊啊?????????