VC++之数据库连接Access
2012-06-23 14:59
239 查看
以前的时候用VC写了两种连接Access数据库的方法,为了方便以后查找把这两种方法做一下简单的介绍。Windows平台的数据接口标准有ODBC、OLE DB、ADO和Borland的BDE接口,ODBC(Open DataBase Connectivity)只能用于访问关系型数据库,为了访问非关系型数据微软设计了OLE DB接口并在此基础上推出了ADO(ActiveX Data Objects)。本文介绍的方法是ODBC和ADO。
一、使用ODBC接口,在这里我们使用MFC的CDatabase类,该类是对SQLConnect等ODBC的API的封装。需要包含afxdb.h
BOOL ODBCConnect(CString strDBFile)
{
CString strConnect;
strConnect.Format(_T("ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};UID=sa;PWD=;DBQ=%s"), strDBFile);
CDatabase db;
if(db.Open(NULL, FALSE, FALSE, strConnect))
{
//连接数据库成功
CRecordset rs(&db);
CString strSql;
strSql = _T("select * from info");
//SQL语句
rs.Open(AFX_DB_USE_DEFAULT_TYPE, strSql);
//执行Sql语句(可添加 删除 查询等)
if(rs.IsOpen())
{
CDBVariant variant;
rs.MoveFirst();
while(!rs.IsEOF())
{
//读取记录
rs.GetFieldValue(_T("姓名"), variant);
rs.MoveNext();
}
}
db.Close();
return TRUE;
}
return FALSE;
}
二、使用ADO连接数据库,因为要使用COM,需要初始化(CoInitialize).然后就可以生成接口的对象操作,代码如下:
#import "C:Program Files/Common Files/System/ado/msado15.dll" rename("EOF",
"adoEOF")
//生成C++类,改变EOF函数的名称
using
namespace ADODB;
BOOL ADOConnect(CString strDBFile)
{
_ConnectionPtr pConnection;
if(pConnection.CreateInstance(__uuidof(Connection))
!= S_OK)
{
return FALSE;
}
CString strConnect;
strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"), strDBFile);
if(pConnection->Open(_bstr_t(strConnect),
"",
"", adModeUnknown)
== S_OK)
{
//连接数据库成功
_RecordsetPtr pRecordset;
if(pRecordset.CreateInstance(__uuidof(Recordset))
!= S_OK)
{
pConnection->Close();
return FALSE;
}
CString strSql;
strSql = _T("select * from info");
HRESULT hr = pRecordset->Open(_bstr_t(strSql), _variant_t((IDispatch*)pConnection,
TRUE), adOpenUnspecified, adLockUnspecified, adCmdUnknown);
if(hr
!= S_OK)
{
pConnection->Close();
return FALSE;
}
_variant_t vt;
pRecordset->MoveFirst();
while(!pRecordset->adoEOF)
{
vt = pRecordset->Fields->GetItem("姓名")->Value;
pRecordset->MoveNext();
}
pConnection->Close();
return TRUE;
}
return FALSE;
}
一、使用ODBC接口,在这里我们使用MFC的CDatabase类,该类是对SQLConnect等ODBC的API的封装。需要包含afxdb.h
BOOL ODBCConnect(CString strDBFile)
{
CString strConnect;
strConnect.Format(_T("ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};UID=sa;PWD=;DBQ=%s"), strDBFile);
CDatabase db;
if(db.Open(NULL, FALSE, FALSE, strConnect))
{
//连接数据库成功
CRecordset rs(&db);
CString strSql;
strSql = _T("select * from info");
//SQL语句
rs.Open(AFX_DB_USE_DEFAULT_TYPE, strSql);
//执行Sql语句(可添加 删除 查询等)
if(rs.IsOpen())
{
CDBVariant variant;
rs.MoveFirst();
while(!rs.IsEOF())
{
//读取记录
rs.GetFieldValue(_T("姓名"), variant);
rs.MoveNext();
}
}
db.Close();
return TRUE;
}
return FALSE;
}
二、使用ADO连接数据库,因为要使用COM,需要初始化(CoInitialize).然后就可以生成接口的对象操作,代码如下:
#import "C:Program Files/Common Files/System/ado/msado15.dll" rename("EOF",
"adoEOF")
//生成C++类,改变EOF函数的名称
using
namespace ADODB;
BOOL ADOConnect(CString strDBFile)
{
_ConnectionPtr pConnection;
if(pConnection.CreateInstance(__uuidof(Connection))
!= S_OK)
{
return FALSE;
}
CString strConnect;
strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"), strDBFile);
if(pConnection->Open(_bstr_t(strConnect),
"",
"", adModeUnknown)
== S_OK)
{
//连接数据库成功
_RecordsetPtr pRecordset;
if(pRecordset.CreateInstance(__uuidof(Recordset))
!= S_OK)
{
pConnection->Close();
return FALSE;
}
CString strSql;
strSql = _T("select * from info");
HRESULT hr = pRecordset->Open(_bstr_t(strSql), _variant_t((IDispatch*)pConnection,
TRUE), adOpenUnspecified, adLockUnspecified, adCmdUnknown);
if(hr
!= S_OK)
{
pConnection->Close();
return FALSE;
}
_variant_t vt;
pRecordset->MoveFirst();
while(!pRecordset->adoEOF)
{
vt = pRecordset->Fields->GetItem("姓名")->Value;
pRecordset->MoveNext();
}
pConnection->Close();
return TRUE;
}
return FALSE;
}
相关文章推荐
- VC采用COM技术连接数据库(ACCESS)
- [转]vc连接access 数据库连接之Access数据库连接字符
- 如何获得vc中连接access类型数据库的连接字符串?
- 我在16ASPX下了一个系统是ACCESS和VS2005做的我想把那个连接数据库的'DB_16aspx'的名字改了进不了了可是?
- 【基于VC的ArcEngine开发】1连接数据库
- DX DevExpress XpoProvider 数据库参数连接配置 不是仅仅只可以用access
- C#连接数据库增删改查代码 SQL SERVER/ACCESS 通用类
- ADO.NET 连接数据库字符串小结(Oracle、SqlServer、Access、ODBC)
- asp 连接数据库 Sql 2000 与 Access 的连接方法
- 解决: 数据库连接不上,报java.sql.SQLException:Access denied for user 'username'@'域名' (using password: YES)
- VB6,C#连Sql server,Mysql,sqlite,access等数据库的连接字符串
- VS通过Oracle驱动连接数据库,对图片进行存取操作(Oracle.DataAccess.Client.dll)
- java连接数据库出现的Access denied for user 'é??'@'localhost' (using password: YES)问题:
- vs2012 MFC连接及操作access(2007)数据库(ADO)
- VC++连接SQL Server2005 数据库
- Java JDBC-ODBC 连接 Access 数据库 中文乱码解决
- 使用C#来手动连接 Access 2007数据库
- VC++2010.net连接Access,SQL Server2008的程序例子成功
- VC++连接Access
- VC++下ADO连接ACCESS