vc 连接access数据库(ado)

VC连接数据库的基本步骤如下:
1、增加支持头文件,引用支持组件
    在stdafx.h的所有include后面加入如下代码
#include <icrsint.h>
#include <basetsd.h>
#include <ole2.h>
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace rename("EOF","adoEOF")

注意引用的动态库路径,它跟安装access时选的路径有关,不一定全是上面这个。

2、初始化组件
    有两种方式:般可以用CoInitialize(NULL);来实现,这种方法在结束时要关闭初始化的COM,可以用下面语句CoUnInitialize();来实现。在MFC中还可以采用另一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM的操作,语句如下所示: AfxOleInit();
    在使用组件指针之前初始化,也可以在App::InitInstance()中写入AfxOleInit();
3、实例指针
    三大智能指针,可以直接声明跟初始化:_ConnectionPtr m_pConnection("ADODB.Connection");
                                                                _RecordsetPtr m_pRecordset("ADODB.Recordset");
    1)、_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句
    2)、_RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作。
    3)、CommandPtr智能指针,可以使用_ConnectionPtr或_RecordsetPtr来执行任务,定义输出参数,执行存储过程或SQL语句。 
也可以使用CreateInstance()来初始化:

_CommandPtr		m_pCommand;
m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->ActiveConnection = m_pConnection;  // 将库连接赋于它
m_pCommand->CommandText = "SELECT * FROM DemoTable";  // SQL语句
m_pRecordset = m_pCommand->Execute(NULL, NULL,adCmdText); // 执行SQL语句,返回记录集      

——执行存储过程。执行存储过程的操作和上面执行SQL语句类似,不同点仅是CommandText参数中不再是SQL语句,而是存储过程的名字,如Demo。另一个不同点就是在Execute()中参数由adCmdText(执行SQL语句),改为adCmdStoredProc来执行存储过程。如果存储过程中存在输入、输出参数的话,需要使用到另一个智能指针_ParameterPtr来逐次设置要输入、输出的参数信息


4、打开数据库
在ADO操作中建议语句中要常用try...catch()来捕获错误信息
try                 
{	
	// 打开本地Access库Demo.mdb
	m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown);
        //如果数据库有密码,则为:m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=JyDB.mdb;Jet OLEDB:Database Password = jy_agt&pwd","","",adModeUnknown);注:密码处OLEDB:Database的冒号前后皆不能有空格,不然会连接失败
}
catch(_com_error e)
{
	AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
	return FALSE;
}      

5、打开数据表及操作表中数据
try
{
	m_pRecordset->Open("SELECT * FROM DemoTable",                // 查询DemoTable表中所有字段
			   theApp.m_pConnection.GetInterfacePtr(),	 // 获取库接库的IDispatch指针
			   adOpenDynamic,
			   adLockOptimistic,
			   adCmdText);
}
catch(_com_error *e)
{
	AfxMessageBox(e->ErrorMessage());
}      

获取数据库中的值:
_variant_t  var;
CString testValue = "";
try
{
    if(!m_pRecordSet->BOF)
    {
       m_pRecordSet.MoveFirst();
    }
    else
    {
       AfxMessageBox("表内数据为空.");
    }
//获取第一行ParamType列的数据
   var = m_pRecordSet.GetCollect("ParamType")
   if(var.vt != VT_NULL)
   {
      testValue = (LPCSTR)_bstr_t(var);
   }
}

6、关闭连接

关闭一个库连接。如果连接状态有效,则用Close方法关闭它并赋于它空值。代码如下所示:

if(m_pConnection->State)
        m_pConnection->Close();
m_pConnection= NULL;    //或者用 m_pConnection.Release()也行,但注意不是->
 
7、其他
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值