MFC+Access数据库(ADO数据库编程)
2016-04-05 13:17
603 查看
最近项目需要使用到数据库,项目本身使用的是MFC。于是选择了简单的Access数据,本文将介绍本人如何在MFC使用的Access数据库。顺带提一句,本文使用的系统为win8.1,64位,编译环境为VS2010和office2010,如出现连接问题,可以看看Access的位数与系统位数是否一致。
本文是在ADO(Microsoft Active Data Objects)接口下对数据库进行操作的。ADO封装了OLEDB所提供的接口,用户能通过OLEDB访问和操作数据库服务器中的数据。ADO易于使用,速度快,广泛应用于关系数据库、非关系数据库、电子邮件、文件系统等。
本文使用的是使用ADO对象的方法连接数据库,ADO对象包含连接(Connection)、命令(Command)、记录集(Recordset)、参数(Parameter)等对象。
连接对象用于连接数据源,以及处理一些命令和事物。在使用ADO访问数据库之前,必须先创建一个Connection对象,然后通过它打开与数据库的连接。
命令对象用于执行传递给数据源的命令。
记录集对象可操作来自数据源的数据,通过Recordset对象可对几乎所有的数据进行操作。所有的Recordset对象均使用记录(行)和字段(列)进行构造。
参数对象代表参数或基于参数化的Command对象的参数信息。需要进行的操作在这些命令中只定义一次,但可以使用参数改变命令的细节。
1. 新建数据库
本文使用ADOX来新建数据库。ADOX是核心ADO对象的扩展库。它提供的附加对象可用于创建、修改和删除模式对象,如表和过程。使用ADOX需要添加引用
创建数据库时检查该数据库是否已经存在,如果该数据库已经存在,则return。
介绍一个检查文件路径是否存在的API函数,PathFileExists()。注意添加头文件
ADOX属于COM对象,需要对COM进行初始化。
创建access数据库:
新建一个Catalog对象,然后调用它的Create方法就可以了。Catalog是 ADOX
的一个对象,它包含描述数据源模式目录的集合。
注意:用try...catch组合捕捉错误
2. 连接数据库
连接数据库时,需要使用Connection对象的Open方法打开与数据源的连接。使用ADO时需要引用支持ADO组件的类型库:
3. 在数据库中新建表(有时间待续)
4. 获取记录集数据
5. 遍历记录集
6. 向记录集中添加数据(在最后一行添加数据)
7. 修改记录集数据
8. 删除记录集数据
9. 查询记录集中数据
本文是在ADO(Microsoft Active Data Objects)接口下对数据库进行操作的。ADO封装了OLEDB所提供的接口,用户能通过OLEDB访问和操作数据库服务器中的数据。ADO易于使用,速度快,广泛应用于关系数据库、非关系数据库、电子邮件、文件系统等。
本文使用的是使用ADO对象的方法连接数据库,ADO对象包含连接(Connection)、命令(Command)、记录集(Recordset)、参数(Parameter)等对象。
连接对象用于连接数据源,以及处理一些命令和事物。在使用ADO访问数据库之前,必须先创建一个Connection对象,然后通过它打开与数据库的连接。
命令对象用于执行传递给数据源的命令。
记录集对象可操作来自数据源的数据,通过Recordset对象可对几乎所有的数据进行操作。所有的Recordset对象均使用记录(行)和字段(列)进行构造。
参数对象代表参数或基于参数化的Command对象的参数信息。需要进行的操作在这些命令中只定义一次,但可以使用参数改变命令的细节。
1. 新建数据库
本文使用ADOX来新建数据库。ADOX是核心ADO对象的扩展库。它提供的附加对象可用于创建、修改和删除模式对象,如表和过程。使用ADOX需要添加引用
#import "C:/Program Files/Common Files/system/ado/msadox.dll" rename_namespace("ADOX")
创建数据库时检查该数据库是否已经存在,如果该数据库已经存在,则return。
介绍一个检查文件路径是否存在的API函数,PathFileExists()。注意添加头文件
//使用API函数PathFileExists()检查路径文件是否存在 #include "Shlwapi.h" #pragma comment(lib,"shlwapi.lib")
CString m_AccessName; m_AccessName = "..\\users.accdb";//Access数据库路径及名字 if(PathFileExists(m_AccessName)) { return TRUE; }
ADOX属于COM对象,需要对COM进行初始化。
if(!AfxOleInit())//这就是MFC初始化COM库 { AfxMessageBox(_T("OLE初始化出错!")); }
创建access数据库:
新建一个Catalog对象,然后调用它的Create方法就可以了。Catalog是 ADOX
的一个对象,它包含描述数据源模式目录的集合。
注意:用try...catch组合捕捉错误
ADOX::_CatalogPtr m_pCatalog = NULL;//Microsoft.ACE.OLEDB.12.0 CString DBName="Provider=Microsoft.JET.OLEDB.4.0; Data source=";//Microsoft.JET.OLEDB.4.0 DBName=DBName+m_AccessName; try { m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog)); m_pCatalog->Create(_bstr_t((LPCTSTR)DBName)); } catch(_com_error &e) { AfxMessageBox(e.ErrorMessage()); return TRUE; }
2. 连接数据库
连接数据库时,需要使用Connection对象的Open方法打开与数据源的连接。使用ADO时需要引用支持ADO组件的类型库:
#import "C:/Program Files/Common Files/System/ado/msado15.dll" rename_namespace("ado20") rename("EOF","adoEOF") rename("BOF","adoBOF") using namespace ado20;在头文件中为类添加成员变量
//添加一个指向Connection对象的指针 _ConnectionPtr m_pConnection;//智能指针,无需释放 //添加一个指向Recordset对象的指针 _RecordsetPtr m_pRecordset;初始化ADO Connection Recordset对象
HRESULT hr; try { hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象 hr = m_pRecordset.CreateInstance("ADODB.Recordset"); if(SUCCEEDED(hr)) { // CString temp1="Provider=Microsoft.Jet.OLEDB.3.51;Data Source="; //temp1=temp1+str; CString temp2="Provider=Microsoft.JET.OLEDB.4.0;Data Source="; temp2=temp2+m_AccessName; /* _bstr_t strConnect=temp1;*/ hr = m_pConnection->Open(_bstr_t(temp2),"","",adModeUnknown);///连接数据库hr=m_pConnection->Open(_T("连接字符串"),_T("用户名"),_T("密码"),0); } } catch(_com_error e)///捕捉异常 { CString errormessage; errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage()); AfxMessageBox(errormessage);///显示错误信息 }关闭记录集和连接
void ExitConnect() { //关闭记录集和连接 if(m_pRecordset != NULL) m_pRecordset->Close(); m_pConnection->Close(); }
3. 在数据库中新建表(有时间待续)
4. 获取记录集数据
5. 遍历记录集
6. 向记录集中添加数据(在最后一行添加数据)
7. 修改记录集数据
8. 删除记录集数据
9. 查询记录集中数据
相关文章推荐
- WCF遇到Oracle问题
- mysql dblink
- NoSQL数据库介绍(4)
- 一篇让Java程序猿随时可以翻看的Oracle总结
- 数据库行转列及逗号分隔转行
- mac下忘记mysql密码, 重新设置mysql密码
- SQL 两张结构一样的表合并查询 .
- Oracle导出远程数据库再导入本地数据库-命令方式
- ubuntu更新mongodb
- Oracle普通表转时间类型自动分区表
- django之异常错误2(Error was: No module named sqlite3.base)
- redis使用(java web项目 + redis jar)
- mysql中防止sql注入
- redis在windows7 64安装教程
- EF+Mysql+DDD框架搭建(一)——code first准备
- Redis学习手册(Key操作命令)
- 在Oracle中查看所有的表属性
- 数据库 视图
- Redis数据库入门教程
- Postgresql 开启huge pages