VS2010 数据库操作(基于Access 2013)
这几天老师让我做一个实现从VS2010中向Access数据库读写数据的程序。我想起当初学习VS的时候做过一个类似的密码管理器,就是利用数据库的一些知识。当时也是突发奇想,找了各种资料,总算有了个结果,勉强能用,但是脑袋却是一片迷茫。现在恰好有个机会重新做一遍,把思路好好地捋一捋,填填当初没埋上的坑。
基本思路
数据库系统的原理性知识先放一放,这里主要讲一下实现一个数据库程序时的实际操作。
数据库应用系统的设计步骤:
1. 数据库设计
2. 配置数据源
3. 编写数据库应用程序
具体步骤
1.数据库设计
既然是对数据库进行操作,那么首先要有一个数据库。
至于如何创建一个Access数据库,可以网上搜一下。大概就是使用Microsoft Access2013打开软件,建立空白桌面数据库,
开始,视图,定义表,填写表。
2.配置ODBC数据源
(1)开始->设置->在搜索框中输入“ODBC”->选择对应的系统版本,
弹出:
(2)选择系统DSN,并点击右边的添加按钮,选择对应的驱动程序:
(3)点击完成,进行数据源和数据库的配置:
数据源名随便取,数据库选择所要用到的数据库的路径。
(4)点击确定,可以看到数据源已经添加到系统DSN的列表中了。
3.编写数据库应用程序
终于可以打开VS敲代码了。
首先,当然是新建一个对话框工程,关于对话框界面的设计之类的操作就不再细表。这里主要介绍数据库相关的操作。
导入ado.dll动态链接库
因为使用到了ado,所以先要进行ado的导入。
在stdafx.h头文件中的最后一条include语句的下方(位置好像有讲究)加入:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\rename("EOF","adoEOF")rename("BOF","adoBOF") //导入ADO动态链接库
同时还要进行COM的初始化,虽然我不知道这是啥。
封装一个ADO类
由于COM的初始化和连接与关闭数据库的一些基本操作会多次用到而且看上去有点吓人,所以我索性把它们封装成了一个ADO类。
这个类的声明:
class ADO
{
public:_ConnectionPtr m_pConnection; //连接对象指针_RecordsetPtr m_pRecordset; //记录集对象指针public:ADO();virtual ~ADO();void OnInitADOConn(); //连接数据库_RecordsetPtr& OpenRecordset(CString sql); //打开记录集void CloseRecordset(); //关闭记录集void CloseConn(); //关闭数据库连接UINT GetRecordCount(_RecordsetPtr pRecordset); //获得记录数
};
比如其中的连接数据库的函数的定义是这样的:
void ADO::OnInitADOConn()
{::CoInitialize(NULL);//COM的初始化try{m_pConnection.CreateInstance("ADODB.Connection"); //创建连接对象实例_bstr_t strConnect="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Test01.accdb;";//连接字符串m_pConnection->Open(strConnect,"","",adModeUnknown); //打开数据库}catch(_com_error e){AfxMessageBox(e.Description()); //弹出错误处理}
}
使用ADO类操作数据库
封装之后,就可以方便地使用ADO来操作数据库了。
读取:
//从数据库中读取一个表,并显示在一个列表控件中
void CTestDlg::AddToGrid(void)
{ADO m_Ado;m_Ado.OnInitADOConn();//连接数据库CString SQL = "select * from table1 order by 学号 desc"; //设置查询字符串m_Ado.m_pRecordset = m_Ado.OpenRecordset(SQL);//打开记录集while(!m_Ado.m_pRecordset->adoEOF){m_list.InsertItem(0,"");m_list.SetItemText(0,0,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("学号"));m_list.SetItemText(0,1,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("姓名"));m_list.SetItemText(0,2,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("成绩"));m_Ado.m_pRecordset->MoveNext();//将记录集指针移动到下一条记录}m_Ado.CloseRecordset();m_Ado.CloseConn();//断开数据库连接
}
添加:
//“添加”按钮的消息响应函数,添加一条记录到数据库
void CTestDlg::OnBnClickedAdd()
{UpdateData(TRUE); //把编辑框中的数据传给相应的变量if(m_numb.IsEmpty() || m_name.IsEmpty() || m_grad.IsEmpty()){MessageBox("基础信息不能为空!");return;}ADO m_Ado; //定义一个ADO对象m_Ado.OnInitADOConn(); //连接数据库CString sql = "select * from table1"; //查询语句m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql); //打开记录集try{m_Ado.m_pRecordset->AddNew(); //添加新行m_Ado.m_pRecordset->PutCollect("学号",(_bstr_t)m_numb);m_Ado.m_pRecordset->PutCollect("姓名",(_bstr_t)m_name);m_Ado.m_pRecordset->PutCollect("成绩",(_bstr_t)m_grad);m_Ado.m_pRecordset->Update(); //更新数据表记录m_Ado.CloseRecordset(); //关闭数据集m_Ado.CloseConn(); //关闭数据库连接}catch(...){MessageBox("操作失败");return;}MessageBox("添加成功");m_list.DeleteAllItems(); //删除列表控件AddToGrid(); //从数据库中将数据载入表格
}
基本操作就是以上,接下来解决一下期间遇到的问题。
开始填坑
1.什么是数据源?为什么要弄这么个东西?不弄行不行?
先看看百度百科怎么说:
数据源是指数据库应用程序所使用的数据库或者数据库服务器。
数据源(Data Source)顾名思义,数据的来源,是提供某种所需要数据的器件或原始媒体。在数据源中存储了所有建立数据库连接的信息。就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数据源名称,你可以找到相应的数据库连接。
应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
2. 连接字符串的问题
老版本的:
_bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\uid=;pwd=;DBQ=SecretData1.mdb;";
新版本的:
_bstr_t strConnect="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Test01.accdb;";m_pConnection->Open(strConnect,"","",adModeUnknown); //打开数据库
可能会出现错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
解决办法:
去http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe下载。然后安装就行了。
3. 数据库文件的路径问题,在其他电脑上还能运行吗?
发现必须在项目路径和Debug文件夹路径中各自放一份数据库文件才能运行。不知道为啥。
http://bbs.csdn.net/topics/390096371
VS2010 数据库操作(基于Access 2013)相关推荐
- VS2010 数据库操作(基于Access 2013)之二
今天中午心血来潮决定优化一下昨天的程序.现在想来这真是个错误的决定- 我用了半天的时间来弄,到现在还没弄好,却又是食之无味弃之可惜.最后还是把加的代码全部删去了,把原始版发给了老师,哎,我真是自己作啊 ...
- c access mysql数据库_基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)...
基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo) 一.三种数据库的主要对比 数据库类型 特点 Microsoft Access 桌面数据库.数据库载体是单个文件 ...
- VS2013用MFC操作64位access 2013
编译环境为64win10操作系统下VS2013,access为64位Office 2013,但是安装了access 2010的数据库引擎可再发行程序包. 最近在用MFC做一个上位机可以程控仪器和模块将 ...
- 基于Access数据库利用ASP平台开发的简单工资管理系统
上学期学习了数据库这门课程,老师就布置了一个学期的课程设计,有很多题目可以选择,我选择的是工资管理系统.由于大四时间比较紧张,我做了一个很简易的工资管理系统,它包括对数据库最基本的集中操作,inser ...
- 基于RMI技术的数据库操作中间件设计 综合实践报告
前言 1.1 实践目的和要求 为了将理论用于实践,巩固所学知识,提高自己发现问题并用所学知识分析问题和解决问题的能力,锻炼自己的工作能力,适应社会能力,自我管理能力,了解目前软件的应用情况,需求情况 ...
- C# ACCESS数据库操作类
这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的调用可以参考MSSQL那个类的调用,差不多的,只是提取所有记录的数量的时候有多一个参数,这个需要注意一下! c# ...
- Access数据库操作软件研究
研究了一些不用装Access对mdb数据库做操作的软件:总结如下: 1 此工具可用:可操作记录:执行SQL语句:操作表结构和创建表大概有些难: 2 网上下的,如上图的软件:不可用:疑似病毒: 3 可用 ...
- 基于C API的SQLite3基本数据库操作
SQLite是一款开源嵌入式文件型数据库,这个主要是和其他一些C/S架构的关系型数据库比较而来的,比如MySQL等. 说他是嵌入式,因为SQLite的所有功能全部包装在一个dll中,我们只需要使用其中 ...
- 艾伟:基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写
本系列文章导航 基于.NET平台的Windows编程实战(一)--前言 基于.NET平台的Windows编程实战(二)-- 需求分析与数据库设计 基于.NET平台的Windows编程实战(四)-- 数 ...
最新文章
- python计算机_基础python计算机知识
- 广西师范大学c语言期末试题,广西师范大学 据库原理(A卷).doc
- struts2静态方法和动态方法调用
- 再见 2020!Apache RocketMQ 发布 4.8.0,DLedger 模式全面提升!
- python time 语句_python的time模块总结
- C++ 高级数据类型(一)—— 数组
- String(min)
- 在 IIS 中部署 SPA 应用,多么痛的领悟!
- One账户多设备同步的数据库设计
- C# NFine开源框架 调用存储过程的实现代码
- 基于STM32设计的数字电子秤
- python爬虫中国土地市场网的相关数据最新2021/5/7
- 2017年数学建模大赛A题剖析(第一问求解间距思路分析)
- 《黑白团团队》第七次作业:团队项目设计完善编码
- 小米路由器3有信号无网络连接到服务器,小米路由器3上不了网(不能上网)怎么办?...
- 计算机窗口弹出多个窗口,电脑怎么打开多个微信窗口
- spring源码解析--环境搭建
- 洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 题解 C/C++
- Redis底层数据结构介绍
- php think addon,think-addons