ODBC連線MySQL資料庫操作例項
以下展示的一段程式,完成利用ODBC對MySQL資料庫操作功能,我的編譯環境時VC6,程式碼中有詳細的解釋,如果事先完成ODBC資料來源的設定工作,那麼只要對程式碼稍作修改即可使用:
#include<stdlib.h>
#include<stdio.h>
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
#include<Sqltypes.h>
#include<iostream.h>
int main()
{
/*Step 1 定義控制代碼和變數 */
SQLHENV hEnv;
SQLHDBC hConnect;
SQLHSTMT hStmt;
SQLRETURN r;
// 分配環境控制代碼
r = SQLAllocHandle ( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
if ( r != SQL_SUCCESS )
{
cout << "SQLAllocHandle error!" << endl ;
exit(1);
}
// 設定環境控制代碼
r = SQLSetEnvAttr ( hEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0 );
if ( r != SQL_SUCCESS )
{
cout << "SQLSetEnvAttr error!" << endl ;
exit(1);
}
// 分配連線控制代碼
r = SQLAllocHandle ( SQL_HANDLE_DBC, hEnv, &hConnect);
if ( r != SQL_SUCCESS )
{
cout << "SQLAllocHandle error!" << endl ;
exit(1);
}
/*之上的程式程式碼讀者直接貼上即可,無限修改;至於具體語句或函式的功能,沒有必要深入瞭解,
只要清楚每一步的作用(註釋給出)即可*/
/* 連線ODBC資料庫,主要函式中第二個引數test為操作的資料來源的名稱;第四個引數是操作資料庫的使用者名稱
第六個引數是操作資料庫的密碼*/
r = SQLConnect ( hConnect, (SQLCHAR*) "test", SQL_NTS, (SQLCHAR*) "yuanbohx",
SQL_NTS, (SQLCHAR*) "xiaohuanxiong60", SQL_NTS);
if ( r!=SQL_SUCCESS && r!=SQL_SUCCESS_WITH_INFO )
{
cout << "SQLConnect error!" << endl;
exit (1);
}
char SQLString[200] ; //用於儲存SQL語句
// 分配語句控制代碼
r = SQLAllocHandle ( SQL_HANDLE_STMT, hConnect, &hStmt);
if ( r != SQL_SUCCESS )
{
cout << "SQLAllocHandle error!" << endl ;
exit(1);
}
// 執行SQL查詢(第二個引數即你想執行的SQL語句)
strcpy ( SQLString, "select * from test");
r = SQLExecDirect( hStmt, (SQLCHAR *)SQLString, SQL_NTS);
if ( r != SQL_SUCCESS )
{
cout << "SQLExecDirect error!" << endl ;
exit(1);
}
// 繫結資料並輸出
SQLCHAR authorName[20] ;
SQLCHAR bookID[20] ;
SQLINTEGER auName = SQL_NTS; //函式SQLGetData中會用到
SQLINTEGER bID = SQL_NTS;
while(1)
{
r = SQLFetch(hStmt); //資料庫遊標,當對某一行表項操作成功後,遊標下移一位
if(r == SQL_ERROR || r == SQL_SUCCESS_WITH_INFO)
{
cout << "SQLFetch error!" << endl ;
exit(1);
}
/*SQLGetData用於檢索結果集資料,其中使用者可修改的引數為:引數2表示取第幾列的資料;引數3表示資料型別SQL_C_X,
X為具體的資料型別,如CHAR、INT等;引數4是存放資料的變數;引數5指向的緩衝區的最大大小,
如果引數4是二進位制或字串,則引數5必須大於0;引數6事先要定義(名字可以引數4相關聯),然後其值賦為SQL_NTS
*/
if ( r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO)
{
SQLGetData(hStmt,1,SQL_C_CHAR,authorName,20,&auName);
SQLGetData(hStmt,2,SQL_C_CHAR,bookID,20,&bID);
printf("%s\t%s\n" , bookID , authorName);
}
else
break ;
}
return 0;
}