建立數據源:
開始菜單->設置->控制面板->管理工具->數據源(ODBC)->系統DSN->添加->選擇MySQL ODBC 3.51 Driver(我下載的MyODBC版本是3.51)
然後在出現的Connector/ODBC Configure Data Source Name對話框中輸入
Data Source Name---------ADOLinkMySQL //數據源名稱
Server-------------------localhost //數據庫服務器名稱
User---------------------root //用戶名(MySQL默認的用戶名是root)
Password-----------------123456 //密碼(由MySQL root用戶管理)
DataName-----------------adolinkmysql //你剛纔建立的數據庫名稱
輸入以後,點擊Test。如果出現Success;connection was made!表示建立數據源成功,即可 繼續下一步
4,最後應用程序就可以通過ADO來訪問MySQL了。注意在連接數據庫中要用以下代碼來連接
_ConnectionPtr m_pConnection;
m_pConnection->Open("DSN=ADOLinkMySQL;", /*數據源名稱*/
"root", /*用戶*/
"123456",0); /*密碼*/
VC環境下使用mysql API函數訪問MySQL數據庫
1. 安裝MySQL的完整版;(在安裝過程中可以選擇)
2. 將C:\Program Files\MySQL\MySQL Server 5.0\lib\opt目錄下的“libmysql.lib”文件複製到創建的VC工程目錄下;
3. 程序中包括頭文件,連入庫文件:
#include <winsock.h>
#include "C:\Program Files\MySQL\MySQL Server 5.0\include\mysql.h"(數據庫的安裝路徑)
#pragma comment(lib,"libmysql.lib")
4. 程序例子
#include "stdafx.h"
#include <winsock.h>
#include "C:\Program Files\MySQL\MySQL Server 5.0\include\mysql.h"
#pragma comment(lib,"libmysql.lib")
int main(int argc, char* argv[])
{
MYSQL mysql;
MYSQL_RES *result;
MYSQL_ROW row;
mysql_init(&mysql); //初始化mysql結構
if(!mysql_real_connect(&mysql,"MyXp","UserDB","123456","userdata",0,NULL,0))//連接服務器
{
fprintf(stderr,"Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
//////////////////////////////////////////////////////////////////////////
/////////////////////////插入數據/////////////////////////////////////////
if(mysql_query(&mysql,"insert into UserDataTable values('rm','209','209','[email protected]',
'23213','yjiang','26.222.171.2','2010-04-01 10:53:12')"))//進行查詢
{
fprintf(stdout,"mysql_query() insert failed!\n");
}
//////////////////////////////////////////////////////////////////////////
/////////////////////////////// 查詢數據 ///////////////////////////////
if(mysql_query(&mysql,"select * from UserDataTable"))
{
fprintf(stdout,"mysql_query() select failed!\n");
}
result = mysql_store_result(&mysql);//讀取一個到客戶的查詢的全部結果,
//分配一個MYSQL_RES結構,並且把結果放進這個結構中。(獲得結果集)
while (row = mysql_fetch_row(result))//取出結果集中記錄
{
fprintf(stdout,"UserName:%s password: %s Email:%s City:%s \n",row[0],row[1],row[3],row[5]);//輸出這行記錄
}
mysql_free_result(result); //釋放結果集
//////////////////////////////////////////////////////////////////////////
//////////////////////////刪除數據///////////////////////////////////
if(mysql_query(&mysql,"delete from UserDataTable where UserName = 'chz'"))
{
fprintf(stdout,"mysql_query() delete failed!\n");
}
//////////////////////////////////////////////////////////////////////////
/////////////////////////////更新數據/////////////////////////////////////
if(mysql_query(&mysql,"update UserDataTable set PassWord = 'lyj0662',ConPass = 'lyj0662' where UserName = 'lyj'"))
{
fprintf(stdout,"mysql_query() updata failed!\n");
}
mysql_close(&mysql);//釋放連接
return 0;
}
VC ADO鏈接MySql數據庫
ODBC方式鏈接。
1、應用程序的stdafx.h頭文件中(也可以在其他合適的地方)包含如下語句。
#import "C:\\program files\\commonfiles\\system\\ado\\msado15.dll" no_namespacerename ("EOF","adoEOF")
2、鏈接數據庫
CoInitialize(NULL); //初始化Com組件
_ConnectionPtr conPtr; //數據庫鏈接指針
//conPtr.CreateInstance("ADODB.Connection"); //Connection用於與數據庫服務器的鏈接
conPtr.CreateInstance(__uuidof(Connection)); //Connection用於與數據庫服務器的鏈接另一種方式
/******************連接數據庫********************/
try
{
conPtr->ConnectionTimeout = 5; //設置連接時間
// MySqlTest爲數據源名 localhost表示本地root表示用戶名 sa表示密碼
//鏈接方式1,使用這種方式鏈接時要注意在設置數據源時一定要選擇一個數據庫
//conPtr->Open("DSN=MySqlTest;server=localhost;","root","sa",adModeUnknown);///連接MySql數據庫(測試成功)
//鏈接方式2採用這種方式鏈接時在創建數據源時沒有必要選擇一個數據庫 conPtr->Open("DSN=MySqlTest;server=localhost;database=test;","root","sa",adModeUnknown);///連接MySql數據庫(測試成功)
}
catch(_com_error e) //捕捉異常
{
AfxMessageBox(e.ErrorMessage());
}
CoUninitialize(); //釋放com組件//不知是否有必要
3、訪問數據庫
_RecordsetPtr recordPtr;//數據集指針
recordPtr.CreateInstance(__uuidof(Recordset));
CString cmdStr=_T("selectname,stuno from student");//student爲表名 該表中有兩個字段name(字符型)stuno(int型)
try
{
recordPtr->Open(_variant_t(cmdStr),
conPtr.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
while(!(recordPtr->adoEOF))
{//獲取記錄
CStringname=(CString)recordPtr->GetCollect(_variant_t("name")).bstrVal;
intno=recordPtr->GetCollect(_variant_t("stuno")).intVal;
recordPtr->MoveNext();
}
recordPtr->Close();//關閉記錄集
recordPtr.Release();//釋放空間
conPtr->Close();//關閉連接
conPtr.Release();//釋放空間
非ODBC方式鏈接。
鏈接數據庫
CoInitialize(NULL); //初始化Com組件
_ConnectionPtr conPtr; //數據庫鏈接指針
//conPtr.CreateInstance("ADODB.Connection"); //Connection用於與數據庫服務器的鏈接
conPtr.CreateInstance(__uuidof(Connection)); //Connection用於與數據庫服務器的鏈接另一種方式
// MySQL ODBC 5.1 Driver爲驅動名稱(取決於我們爲MySql安裝的驅動),localhost爲服務器地址,test爲數據庫名,root爲用戶名(MySql默認用戶名爲root),sa爲密碼
CStringconStr=_T("Driver={MySQL ODBC 5.1 Driver };Server= localhost;Database=test;");
/******************連接數據庫********************/
try
{
conPtr->ConnectionTimeout = 5; //設置連接時間
conPtr->Open((_bstr_t)conStr, _T("root"),_T("sa"), adModeUnknown);
}
catch(_com_error e) //捕捉異常
{
AfxMessageBox(e.ErrorMessage());
}
CoUninitialize(); //釋放com組件
獲取記錄集
獲取記錄集的方式與ODBC方式相同