VS2010 数据库操作(基于Access 2013) 您所在的位置:网站首页 vs导入数据库 VS2010 数据库操作(基于Access 2013)

VS2010 数据库操作(基于Access 2013)

2023-09-21 14:58| 来源: 网络整理| 查看: 265

这几天老师让我做一个实现从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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有