1. 程式人生 > >如何在VS2010中連線MySQL和Access資料庫

如何在VS2010中連線MySQL和Access資料庫

1 基本介紹

本文采用ADO來進行資料庫的連線,ADO(ActiveX Data Objects)是ActiveX資料物件的簡稱,是一個訪問資料庫中資料的程式設計介面。利用ADO技術實現資料庫操作主要分為以下步驟:

①引入ADO庫,

②定義連線物件指標和記錄集指標;

③初始化COM庫;

④通過連線物件指標連線資料庫;

⑤通過記錄集指標訪問資料庫;

⑥關閉資料庫連線。

⑦釋放COM環境

本文將以ACCESS資料庫和MySQL資料庫為例,詳細介紹通過ADO進行資料庫訪問的步驟和常見問題。

2 引入ADO庫

這一步在#include語句後面,通過#import語句實現,程式碼固定,對於Win7系統,程式碼如下:

#import "C:\Program Files (x86)\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

3 定義連線物件指標和記錄集指標

連線物件指標用來建立和資料庫的連線;記錄集指標用來執行SQL語句,並對SQL語句返回的資料進行操作,這兩個指標是ADO技術的關鍵,但其定義語句固定,程式碼如下:

	_RecordsetPtr  m_pRecordset;	//定義連線物件指標
	_ConnectionPtr  m_pConnection;  //定義記錄集指標

4 初始化COM元件

在使用COM庫之前,必須對其進行初始化操作,程式碼固定,如下所示:

::CoInitialize(NULL);

5 通過連線物件指標連線資料庫

這一步是ADO操作資料庫的難點,分為兩步進行,第一步是例項化連線物件指標,第二步是通過連線物件指標的Open方法建立與資料庫的連線。

5.1 例項化連線物件指標

例項化連線物件指標有以下兩種方法:

	1)m_pConnection.CreateInstance("ADODB.Connection");
	2)m_pConnection.CreateInstance(__uuidof(Connection));

5.2 建立與資料庫的連線

5.2.1 連線ACCESS資料庫

本文針對的ACCESS資料庫是Win7系統自帶的Microsoft Office Access 2007資料庫,需要特別注意的是因為其版本為32位,因此必須將VS 2010工程的解決方案平臺設定為Win32,否則如果解決方案平臺為x64,採用ADO技術將無法連線ACCESS資料庫。

連線ACCESS資料庫共有一下三種方法:


		1)m_pConnection -> Open("Provider = Microsoft. Jet.OLEDB. 4.0;Data Source=D:\\test.mdb","","",adModeUnknown);
		2)m_pConnection-> Open("Provider=Microsoft. ACE.OLEDB.12.0; Data Source=D:\\test.accdb","","",adModeUnknown);
		3)m_pConnection->Open("DSN=TestAccess;","", "",  adModeUnknown ); //這種方法是用32位ODBC建一個數據源,起名TestAccess

第一種方法採用Jet引擎訪問資料庫,第二種方法採用的是ACE引擎,第二種方法既可以訪問Office2007也可以訪問Office97-2003。本文在D盤下存放了一個名為test的Access資料庫,Access資料庫的2003版本檔案格式字尾為.mdb,2007版本檔案格式字尾為. accdb。

第三種方法採用ODBC技術進行連線,需要注意的是,對於64位的電腦,直接通過控制面板-系統和安全-管理工具-資料來源(ODBC)是無法新增Access資料來源的,因為Access版本是32位,而控制面板-系統和安全-管理工具-資料來源(ODBC)呼叫的是64位的驅動(詳見補充說明),需要通過C:\Windows\systemWOW64\odbcad32.exe建立Access資料來源。

補充說明:

64位win 7作業系統中,ODBC有兩個:

1、C:\Windows\system32\odbcad32.exe——呼叫64位驅動建立資料來源

2、C:\Windows\systemWOW64\odbcad32.exe——呼叫32位驅動建立資料來源

預設控制面板-系統和安全-管理工具-資料來源(ODBC)開啟的是C:\Windows\system32 \odbcad32.exe。

5.2.2 連線MySQL資料庫

本文連線的MySQL資料庫的版本為5.6.15,64位,採用的ODBC為mysql-connector-odbc-5.2.6-winx64。

同樣需要注意的是,由於MySQL資料庫的版本為64位,必須將VS 2010工程的解決方案平臺設定為x64,否則如果解決方案平臺為Win32,將無法連線MySQL資料庫。

連線MySQL資料庫共有一下三種方法:

		1)m_pConnection->Open("DSN=MYSQL-ODBC; server=localhost; database= cntipm;" ,"Hector", "7777", adModeUnknown);  
		2)m_pConnection->Open("DSN=MYSQL-ODBC;server=localhost;","Hector", "7777", adModeUnknown);  
		3)m_pConnection->Open("Driver=MySQL ODBC 5.2 ANSI Driver; DATABASE=cntipm; server=localhost", "Hector", "7777",adModeUnknown);

第一二中方法基本相同,將第一種方法中的“database= cntipm”省略就是第二種方法,cntipm指的是資料庫的名稱,這兩種方法都是通過設定ODBC建立連線的,因為在設定ODBC時指定了資料庫的名稱,因此“database= cntipm”可以省略。

第三種方法是參考網上的方法。

說明:

MYSQL-ODBC指的是本文建立的ODBC資料來源的名稱,Hector是使用者名稱,7777是密碼,MySQLODBC 5.2 ANSI Driver指的是本文所安裝的mysql-connector- odbc-5.2.6-winx64驅動。

6 通過記錄集指標訪問資料庫

這部分程式碼相對固定,具體程式碼如下:

		m_pRecordset.CreateInstance(_uuidof(Recordset));
		m_pRecordset->Open(_bstr_t("SELECT * FROM School"),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

如果想進一步輸出查到的資料,可以進行如下操作:

	while (!m_pRecordset->adoEOF)
	{
		_variant_t NameVal = m_pRecordset->GetCollect("SchoolName");
		//m_pRecordset->PutCollect("Number",77);//設定Number列的每一個數都是77
		string strTemp = (char*)(_bstr_t)NameVal;
		cout<<strTemp.c_str()<<endl;

		m_pRecordset->MoveNext();
	}

7 關閉資料庫連線

	//關閉資料庫連線
	if (m_pRecordset->GetState() == adStateOpen)
	{
		m_pRecordset->Close();
	}
	m_pConnection->Close();
	m_pConnection.Release();

8 釋放COM環境

::CoUninitialize();

9 完整程式碼示範

#include <tchar.h>
#include <iostream>
#import "C:\Program Files (x86)\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

using namespace std;

int main(void)
{
	_RecordsetPtr  m_pRecordset;	//定義連線物件指標
	_ConnectionPtr  m_pConnection;  //定義記錄集指標
	
	::MessageBox(NULL,_T("準備連線資料庫"),_T("提示"),MB_OK|MB_ICONWARNING);

	//COM初始化
	::CoInitialize(NULL);
	m_pConnection.CreateInstance("ADODB.Connection");
	//m_pConnection.CreateInstance(__uuidof(Connection));//Connection用於與資料庫伺服器的連結另一種方式
	try
	{
		//以下兩句程式碼用來連線ACCESS資料庫,前提是配置管理器只能是Win32
		//m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.accdb","","",adModeUnknown);
		//m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\test.accdb","","",adModeUnknown);
		//m_pConnection->Open("DSN=TestAccess;","", "", adModeUnknown);//這種方法是用32位ODBC建一個數據源,起名TestAccess

		//以下三種連線方式均可連線MySQL資料庫,通過ODBC連線,前提是配置管理器只能是x64
		m_pConnection->Open("DSN=MYSQL-ODBC;server=localhost;database=cntipm;","Hector", "7777", adModeUnknown);  
		//m_pConnection->Open("DSN=MYSQL-ODBC;server=localhost;","Hector", "7777", adModeUnknown);  
		//m_pConnection->Open("Driver=MySQL ODBC 5.2 ANSI Driver;DATABASE=cntipm;server=localhost","Hector", "7777",adModeUnknown);
	}
	catch (_com_error e)
	{
		cout << e.Description() << endl;
		::MessageBox(NULL,e.Description(),_T("提示"),MB_OK|MB_ICONWARNING);
		::MessageBox(NULL,_T("資料庫初始化錯誤"),_T("提示"),MB_OK|MB_ICONWARNING);
	}
	//執行SQL語句實現資料物件的操作
	try
	{
		m_pRecordset.CreateInstance(_uuidof(Recordset));
		m_pRecordset->Open(_bstr_t("SELECT * FROM School"),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
	}
	catch (_com_error e)
	{
		::MessageBox(NULL,_T("開啟記錄集錯誤"),_T("提示"),MB_OK|MB_ICONWARNING);
		return 0;
	}
	//讀取資料庫表中的資料
	while (!m_pRecordset->adoEOF)
	{
		_variant_t NameVal = m_pRecordset->GetCollect("SchoolName");
		//m_pRecordset->PutCollect("Number",77);//設定Number列的每一個數都是77
		string strTemp = (char*)(_bstr_t)NameVal;
		cout<<strTemp.c_str()<<endl;

		m_pRecordset->MoveNext();
	}
	//關閉資料庫連線
	if (m_pRecordset->GetState() == adStateOpen)
	{
		m_pRecordset->Close();
	}
	m_pConnection->Close();
	m_pConnection.Release();

	::CoUninitialize();
	
	return 0;
}





相關推薦

如何在VS2010連線MySQLAccess資料庫

1 基本介紹 本文采用ADO來進行資料庫的連線,ADO(ActiveX Data Objects)是ActiveX資料物件的簡稱,是一個訪問資料庫中資料的程式設計介面。利用ADO技術實現資料庫操作主要分為以下步驟: ①引入ADO庫, ②定義連線物件指標和記錄集指標; ③初

在tomcat配置MySQLoracle資料庫連線池的異同

一、在tomcat中配置MySql資料庫連線池 Java程式碼: public Connection conn = null; public Connection getConnection()throws ClassNotFoundException, S

Java通過配置檔案連線MysqlOracle資料庫

配置檔案: db.properties #Mysql parameter mysqldriver=com.mysql.jdbc.Driver mysqlurl=jdbc:mysql://127.0.0.1:3306/database mysqluser=username

關於mybatismysqlOracle資料庫分頁外掛的使用

首先是Oracle資料庫:在mybatis相對應的mapper.xml檔案裡:<sql id="OracleDialectPrefix"> <!-- WARNIN

.net連線MYSQL資料庫及常用操作

需要有一個工具類:using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.Data; using

在 PowerDesigner 連線 MySQL 資料庫

Database--Configure connection...--Connection profiles--add new datasource。配置如下: Database--Connect...--Connect

C#access資料庫連線的一些問題

1。首先要注意資料庫的密碼和使用者密碼是不一樣的。 用絕對路徑的方法連線設定了資料庫密碼的access資料庫的方法如下 OleDbConnection dbconn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;

SpringBoot連線MYSQL資料庫,並使用JPA進行資料庫的相關操作

package example.controller; import example.dao.UserDao; import example.entity.User; import org.springframework.beans.factory.annotation.Autowired; import o

django連線Mysql資料庫相容Python 2.x 與 Python

Python 2.x的官方支援要到2020就截止了,djagon 2.0以上的版本則明確不支援python 2.7版本,需要python 3.5+,而有的專案有的需要相容性,比如要連線Mysql資料庫的

DELPHI分別連線MS SQLSERVER、OracleACCESS資料庫連線字串(備用)

1、DELPHI連線MS SQLSERVER資料庫 ADOConn_ToolDB.Close; ADOConn_ToolDB.ConnectionString:='Provider=SQLOLEDB.1;'+

java連線MySQL資料庫的幾種方式

1.1概念 DBCP(DataBase Connection Pool)資料庫連線池,是java資料庫連線池的一種,由Apache開發,通過資料庫連線池,可以讓程式自動管理資料庫連線的釋放和斷開。 1.2程式碼示例 所需jar包:commons-dbcp2-2.2.1.j

關於python操作mysqlpostgresql資料庫的sql 分頁限制語句sql語法問題

@本人使用django開發一個數據庫的管理模組,主要開發兩種資料庫的管理,遇到了一些坑 Python 使用psycopg2操作postgresql ,使用pymysql連線mysql psycopg2 下載 pip install psycopg2 pymysq

解決win10連線MySQL出現Access denied for user 'root'@'localhost' (using password:YES)

由於之前公司一直再用oracle資料庫,這次專案採用mysql資料庫,然後安裝了MySQL資料庫,使用Navicat可以連的上,使用dos命令列也可以登入,但是在idea程式執行時就是連不上資料庫,出現Access denied for user 'root'@'localhost' (using

zeppelin連線hiveimpala

連線Hive 新建interpreter  default.driver = org.apache.hive.jdbc.HiveDriver default.url = jdbc:hive2://hostname:10000 default.user = zeppelin

windows下自動備份mysqloracle資料庫

rem ******Oracle backup start********  @echo off      forfiles /p "C:\DatabaseBackup\egov\essucap" /m essucap_backup_*.dmp -d -7

在scala連線mysql時出現錯誤:Establishing SSL connection without server's identity verification is not recomm

在Scala中連線mysql時,輸入命令: scala> rebuyDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/dbtaobao", "dbtaobao.rebuy", prop) 出現錯誤如下: Wed No

Qt連線MySQL程式設計及資料庫效能調優(一)

之前整理過一篇Qt下資料庫程式設計基礎 :最近在進行單元測試,所以把遇到的一些問題整理出來,主要是關於資料庫的 1.遠端連線資料庫 連線語句是: mysql -h 192.168.xx.xx(IP地址) -P 3306(埠) -u remoteuser(登入使用

myeclipse 連線 Mysql 遇到的資料庫的錯誤

1--Unknown initial character set index '255' received from server. Initial client character set can be mysql的連線錯誤,在網上查詢到是編碼不匹配的原因, 但是確

Thinkphp5 同時使用MysqlMongoDB資料庫

資料庫連線 https://www.kancloud.cn/manual/thinkphp5_1/353998mongodb連線  https://www.kancloud.cn/manual/thinkphp5_1/354135專案需要Thinkphp5同時使用Mysql和

thinkphp開發總結(二)——同時連線mysql與mongodb資料庫

一、連線mongodb資料庫 連線mongodb我採用的是tp裡的config配置,在Common/Conf/config.php: <?php return array( //資料庫配置資