ado访问access数据库

ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。


_ConnectionPtr接口返回一个记录集或一个空指针;_CommandPtr接口返回一个记录集;_RecordsetPtr是一个记录集对象。


(1)利用Connection对象的Execute方法执行SQL命令


_variant_t RecordsAffected;  


m_pConnection->Execute("CREATE TABLE users(ID INTEGERusername TEXT,old INTEGER,birthday DATETIME)",&RecordsAffected, dCmdText);


(2) 利用Command对象来执行SQL命令




m_pCommand->CommandText = "SELECT * FROM users";


m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);//执行命令,取得记录集


一、配置数据库:


1、我的电脑 右击管理 服务和应用程序 SQLServer 配置管理 服务属性 登录身份内置账户 设为本地系统


2、打开 企业管理器(2005:SQL Server Management Studio) 右键属性 安全性 选择SQL Server和Windows身份验证模式; 安全性 登录名 启用sa登录并设置密码;重启服务器 断开连接 重新连接服务器。


二、数据库基本操作与程序实现


1、建立MFC的基于对话框应用程序


2、引入ADO库文件


使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:


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


3、初始化OLE/COM库环境


ADO库是一组COM动态库,应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。


BOOL CMyAdoTestApp::InitInstance()


{


if(!AfxOleInit()){


AfxMessageBox(“OLE初始化出错!”);


return FALSE;


}


}


4、设计界面,并添加各按钮的响应函数,Listcontrol 属性:样式 查看 报告


5、添加连接数据库 的响应函数代码:


定义变量: _ConnectionPtr pConn;


try


    {


        if (FAILED(pConn.CreateInstance("ADODB.Connection")))


       {


           MessageBox("Create Instance failed!");


           return;


       }


       CString strSRC;


           strSRC="Driver=SQL Server;Server=(local);Database=Student;UID=sa;PWD=sa";


        _bstr_t bstrSRC(strSRC);


       if (FAILED(pConn->Open(bstrSRC,"","",-1)))


       {


           MessageBox("Can not open Database!");


           pConn->Release();


           return;


       }


       MessageBox("Connection database successfully!");


    }


    catch(_com_error e)


    {


       CString errorMsg;


       _bstr_t bstrSource(e.Source());


       _bstr_t bstrDescription(e.Description());


       errorMsg.Format("%s",e.ErrorMessage());


       MessageBox(errorMsg);


    }


6、添加新建表 的响应函数代码:


    CString strSQL="if exists (select name from sys.tables where name='stu') drop table stu;";


    strSQL+="create table stu(id int,name char(10),grade int);";


    _variant_t varSQL(strSQL);


    COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);


    if (FAILED(pConn->Execute(_bstr_t(varSQL),&vtOptional,-1)))


    {


       MessageBox("Can not create table!");


       pConn->Release();


       return;


    }


    MessageBox("create table successfully!");


7、 添加 插入数据 的响应函数代码:


    try


    {


       UpdateData(true);


      


       CString strSQL;


       strSQL.Format("insert into Stu(StuID,StuName,StuAge,StuScore) values (%d,'%s',%d,%d)",m_ID,m_name,m_age,m_score);


       _variant_t varSQL(strSQL);


       COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);


       if (FAILED(pConn->Execute(_bstr_t(varSQL),&vtOptional,-1)))


       {


           MessageBox("Can not insert!");


           pConn->Release();


           return;


       }


       MessageBox("insert recordset successfully!");


    }


    catch(_com_error e)


    {


       CString errorMsg;


       _bstr_t bstrSource(e.Source());


       _bstr_t bstrDescription(e.Description());


       errorMsg.Format("%s",e.ErrorMessage());


       MessageBox(errorMsg);


    }


8、添加 查询 的响应函数代码:


    try


    {


       UpdateData(true);


       m_listctrl.DeleteAllItems();


       while(m_listctrl.DeleteColumn(0));


      


       _RecordsetPtr Rs1; //定义Recordset对象


       CString strSQL;


       strSQL.Format("select * from stu where StuName='%s'",m_name0);


       _variant_t varSQL(strSQL),vID,vname;


       CString strid;


       COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);


       Rs1=pConn->Execute(_bstr_t(varSQL),&vtOptional,-1);


      


       if (FAILED(pConn->Execute(_bstr_t(varSQL),&vtOptional,-1)))


       {


           MessageBox("Can not select!");


           pConn->Release();


           return;


       }


       FieldsPtr fPtrs=Rs1->GetFields();


       for (int i=0;i<fPtrs->GetCount();i++)


       {


           FieldPtr fPtr= fPtrs->GetItem((long)i);


           m_listctrl.InsertColumn(i,fPtr->GetName(),0,60);


       }


       int nCount=0;


       while(!Rs1->adoEOF)


       {


           m_listctrl.InsertItem(nCount,"");


           for (int i=0;i<fPtrs->GetCount();i++)


           {


              m_listctrl.SetItemText(nCount,i,(_bstr_t)Rs1->GetCollect(_variant_t((long)i)));


           }


           nCount++;


           Rs1->MoveNext();


       }


    }


    catch(_com_error e)


    {


       CString errorMsg;


       _bstr_t bstrSource(e.Source());


       _bstr_t bstrDescription(e.Description());


       errorMsg.Format("%s",e.ErrorMessage());


       MessageBox(bstrDescription);


    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值