1. 程式人生 > >VC++6.0 MFC利用ADO連線到MySQL資料庫

VC++6.0 MFC利用ADO連線到MySQL資料庫

安裝MySQL資料庫,併為其安裝驅動!

兩種連線方式:ODBC連線和非ODBC連線。

一、ODBC方式連結

1、應用程式的stdafx.h標頭檔案中(也可以在其他合適的地方)包含如下語句。

//匯入msado15.dll動態連結庫,不要名稱空間,將EOR改成adoEOR,避免與檔案結尾衝突
#import "C://program files//common files//system//ado//msado15.dll" no_namespace rename ("EOF", "adoEOF")

2、連結資料庫

CoInitialize(NULL); //初始化Com元件
_ConnectionPtr conPtr; //資料庫連結指標(可在標頭檔案中定義)
//對conPtr初始化
//conPtr.CreateInstance("ADODB.Connection"); //Connection用於與資料庫伺服器的連結方法一
conPtr.CreateInstance(__uuidof(Connection)); //Connection用於與資料庫伺服器的連結方法二

try
{
    conPtr->ConnectionTimeout = 5; //設定連線時間
    //MySql為資料來源名 localhost表示本地 root表示使用者名稱 123表示密碼

    //連結方式1,使用這種方式連結時要注意在設定資料來源時一定要選擇一個數據庫(測試成功)
    //conPtr->Open("DSN=MySql;server=localhost;","root","123",adModeUnknown);

    //連結方式2,採用這種方式連結時在建立資料來源時沒有必要選擇一個數據庫(測試成功)
    conPtr->Open("DSN=MySql;server=localhost;database=test;","root","123",adModeUnknown);
}
catch(_com_error e) //捕捉異常
{
    AfxMessageBox(e.ErrorMessage());
}
CoUninitialize(); //釋放com元件(不知是否有必要)

3、訪問資料庫

RecordsetPtr recordPtr;//資料集指標(可在標頭檔案中定義)
//對recordPtr初始化
recordPtr.CreateInstance(__uuidof(Recordset));

try	
{
    //number是int型別的欄位
	m_pRec=m_pCon->Execute("select number from data",NULL,adCmdText);
}
catch (_com_error e)	
{	
	AfxMessageBox(e.Description());	
}
while (!(m_pRec->adoEOF))	
{   //獲取記錄
	CString number=(LPCSTR)(_bstr_t)m_pRec->GetCollect("number");
	AfxMessageBox(number);
	m_pRec->MoveNext();
}
m_pRec->Close();//關閉記錄集
m_pRec.Release();//釋放空間
m_pCon->Close();//關閉連線
m_pCon.Release();//釋放空間

二、非ODBC方式連結。

1、連結資料庫

CoInitialize(NULL); //初始化Com元件
_ConnectionPtr conPtr; //資料庫連結指標
//對conPtr初始化
//conPtr.CreateInstance("ADODB.Connection"); //Connection用於與資料庫伺服器的連結方法一
conPtr.CreateInstance(__uuidof(Connection)); //Connection用於與資料庫伺服器的連結方法二

//MySQL ODBC 5.1 Driver為驅動名稱(取決於我們為MySql安裝的驅動),localhost為伺服器地址,test為資料庫名,root為使用者名稱(MySql預設使用者名稱為root),123為密碼
CString conStr=_T("Driver={ MySQL ODBC 5.1 Driver };Server= localhost;Database=test;");

try
{
    conPtr->ConnectionTimeout = 5; //設定連線時間
    conPtr->Open((_bstr_t)conStr, _T("root"),_T("123"), adModeUnknown);
}
catch(_com_error e) //捕捉異常
{
    AfxMessageBox(e.ErrorMessage());
}
CoUninitialize(); //釋放com元件

2、訪問資料庫

獲取記錄集的方式與ODBC方式相同