数据库访问技术之ODBC
2013-04-12 23:12
211 查看
在具体的应用之前,我们先了解一下ODBC数据库访问技术的工作原理:
应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。但是需要注意:在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC
API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。
接下来就为我们编写Demo做一些准备工作:
1 使用Access建立1个数据库odbcdemo.mdb和1个表studentinfo(注意将id设置为主键) 包含:学号(id)、姓名(name)、性别(sex)、年龄(age)、专业(profession)、籍贯(address)六个字段,再顺便添加几个记录,保存并退出。
2 使用控制面板---管理工具---数据源(ODBC),添加数据源;
具体步骤: 单击添加,在打开的创建数据源对话框中选择Microsoft Access Driver(*.mdb),单击完成; 在弹出的ODBC Microsoft Access安装对话框中选择数据库odbcdemo.mdb; 并设置数据源名DSN,在此我们设置为dsn_odbcdemo,当然,也可以单击高级按钮,在其中对数据库进行用户名和密码的设置。待一切设置完成
后,单击确定即可完成对数据源的添加。此时你就会发现在用户数据源列表中已经存在dsn_odbcdemo。
3 接下来就开始我们的Demo的编写了。
具体步骤:
1. 建立基于对话框的应用程序。 注意:可以选上winsock,以后进行服务器身份验证使用;
2. 建立基于CRecordset类的派生类CRecordsetChild,在Database Options对话框中指定数据源,选择ODBC里的dsn_odbcdemo,在Recordset type中选动态Dynaset。点击OK,然后在弹出的对话框中选择表studentinfo,确定退出;
3. 在stdafx.h中增加头文件 #include <afxdb.h>
4. 在*Dlg类中增加成员变量
6. 在OnInitDialog()函数中增加代码
m_edit_address, 同时在OnInitDialog()函数中增加代码:
编译运行后,便可看到从数据库中读取到的信息。
9 怎样看后面的记录信息
增加6个Button控件,并添加如下代码:
至此,我们的Demo便编写完成。具体的实例代码可以在一下地址进行下载:
http://download.csdn.net/detail/jhg1204/5252298
应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。但是需要注意:在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC
API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。
接下来就为我们编写Demo做一些准备工作:
1 使用Access建立1个数据库odbcdemo.mdb和1个表studentinfo(注意将id设置为主键) 包含:学号(id)、姓名(name)、性别(sex)、年龄(age)、专业(profession)、籍贯(address)六个字段,再顺便添加几个记录,保存并退出。
2 使用控制面板---管理工具---数据源(ODBC),添加数据源;
具体步骤: 单击添加,在打开的创建数据源对话框中选择Microsoft Access Driver(*.mdb),单击完成; 在弹出的ODBC Microsoft Access安装对话框中选择数据库odbcdemo.mdb; 并设置数据源名DSN,在此我们设置为dsn_odbcdemo,当然,也可以单击高级按钮,在其中对数据库进行用户名和密码的设置。待一切设置完成
后,单击确定即可完成对数据源的添加。此时你就会发现在用户数据源列表中已经存在dsn_odbcdemo。
3 接下来就开始我们的Demo的编写了。
具体步骤:
1. 建立基于对话框的应用程序。 注意:可以选上winsock,以后进行服务器身份验证使用;
2. 建立基于CRecordset类的派生类CRecordsetChild,在Database Options对话框中指定数据源,选择ODBC里的dsn_odbcdemo,在Recordset type中选动态Dynaset。点击OK,然后在弹出的对话框中选择表studentinfo,确定退出;
3. 在stdafx.h中增加头文件 #include <afxdb.h>
4. 在*Dlg类中增加成员变量
public: CDatabase m_db; //数据库对象 CRecordsetChild * m_pSet; //记录集的指针5.在*Dlg.h中增加头文件 #include "RecordsetChild.h"
6. 在OnInitDialog()函数中增加代码
CString dsn="DSN=dsn_odbcdemo;DBQ=odbcdemo.mdb"; //注意:在此数据库位于工程所在文件夹中,如果你的数据库在其他地方,应该修改后面的数据库路径 CString dsn = "DSN=dsn_odbcdemo;DBQ=odbcdemo.mdb"; m_db.OpenEx(dsn); m_pSet = new CRecordsetChild(&m_db); CString sql = "select * from studentinfo"; m_pSet->Open(CRecordset::dynaset, sql); //按照select语句将查询结果放到记录集里。动态的。7. 为了将信息显示在界面上,需在界面上加6个控件(编辑框),分别关联6个变量: m_edit_name m_edit_id m_edit_sex m_edit_age m_edit_profession
m_edit_address, 同时在OnInitDialog()函数中增加代码:
m_edit_name = m_pSet ->m_name; m_edit_sex = m_pSet->m_sex; m_edit_age.Format("%d", m_pSet ->m_age); m_edit_id = m_pSet ->m_id; m_edit_profession = m_pSet ->m_profession; m_edit_address = m_pSet ->m_address; UpdateData(FALSE); //更新使其在页面显示
编译运行后,便可看到从数据库中读取到的信息。
9 怎样看后面的记录信息
增加6个Button控件,并添加如下代码:
void CODBCDemoDlg::OnButtonAdd() //增加记录 { // TODO: Add your control notification handler code here m_pSet->AddNew(); UpdateData(TRUE); m_pSet ->m_name = m_edit_name; m_pSet ->m_age = atoi((LPCTSTR)m_edit_age); m_pSet ->m_sex = m_edit_sex; m_pSet ->m_id = m_edit_id; m_pSet ->m_profession = m_edit_profession; m_pSet ->m_address = m_edit_address; m_pSet ->Update(); m_pSet ->MoveLast(); } void CODBCDemoDlg::OnButtonDelete() //删除记录 { // TODO: Add your control notification handler code here m_pSet ->Delete(); m_edit_name = ""; m_edit_age = ""; m_edit_sex = ""; m_edit_id = ""; m_edit_profession = ""; m_edit_address = ""; UpdateData(FALSE); } void CODBCDemoDlg::OnButtonUpdate() //修改记录 { // TODO: Add your control notification handler code here m_pSet ->Edit(); UpdateData(TRUE); m_pSet ->m_name = m_edit_name; m_pSet ->m_age = atoi((LPCTSTR)m_edit_age); m_pSet ->m_sex = m_edit_sex; m_pSet ->m_id = m_edit_id; m_pSet ->m_profession = m_edit_profession; m_pSet ->m_address = m_edit_address; m_pSet ->Update(); } void CODBCDemoDlg::OnButtonFind() //查看 { // TODO: Add your control notification handler code here UpdateData(TRUE); m_pSet->Close(); //在此注意:由于查询时使用的sql语句不同,所以在再次查询时应先将前面打开的记录集关闭 CString sql; sql.Format("select * from studentinfo where name='%s'", m_edit_name); m_pSet->Open(CRecordset::dynaset, sql); if (m_pSet != NULL) { m_edit_name = m_pSet ->m_name; m_edit_sex = m_pSet->m_sex; m_edit_age.Format("%d", m_pSet ->m_age); m_edit_id = m_pSet ->m_id; m_edit_profession = m_pSet ->m_profession; m_edit_address = m_pSet ->m_address; UpdateData(FALSE); } } void CODBCDemoDlg::OnButtonFirst() //查看第一条记录 { // TODO: Add your control notification handler code here m_pSet->MoveFirst(); m_edit_name = m_pSet ->m_name; m_edit_sex = m_pSet->m_sex; m_edit_age.Format("%d", m_pSet ->m_age); m_edit_id = m_pSet ->m_id; m_edit_profession = m_pSet ->m_profession; m_edit_address = m_pSet ->m_address; UpdateData(FALSE); } void CODBCDemoDlg::OnButtonPrevious() //查看前一条记录 { // TODO: Add your control notification handler code here m_pSet->MovePrev(); if (m_pSet ->IsBOF()) { m_pSet->MoveFirst(); } m_edit_name = m_pSet ->m_name; m_edit_sex = m_pSet->m_sex; m_edit_age.Format("%d", m_pSet ->m_age); m_edit_id = m_pSet ->m_id; m_edit_profession = m_pSet ->m_profession; m_edit_address = m_pSet ->m_address; UpdateData(FALSE); } void CODBCDemoDlg::OnButtonNext() //查看下一小记录 { // TODO: Add your control notification handler code here m_pSet->MoveNext(); if (m_pSet->IsEOF()) { m_pSet->MoveLast(); } m_edit_name = m_pSet ->m_name; m_edit_sex = m_pSet->m_sex; m_edit_age.Format("%d", m_pSet ->m_age); //int转换为CString m_edit_id = m_pSet ->m_id; m_edit_profession = m_pSet ->m_profession; m_edit_address = m_pSet ->m_address; UpdateData(FALSE); } void CODBCDemoDlg::OnButtonLast() //查看最后一条记录 { // TODO: Add your control notification handler code here m_pSet->MoveLast(); m_edit_name = m_pSet ->m_name; m_edit_sex = m_pSet->m_sex; m_edit_age.Format("%d", m_pSet ->m_age); m_edit_id = m_pSet ->m_id; m_edit_profession = m_pSet ->m_profession; m_edit_address = m_pSet ->m_address; UpdateData(FALSE); }
至此,我们的Demo便编写完成。具体的实例代码可以在一下地址进行下载:
http://download.csdn.net/detail/jhg1204/5252298
相关文章推荐
- VC数据库访问技术之ODBC
- ODBC OLEDB ADO等数据库访问技术
- Windows下数据库访问技术ODBC
- MFC ODBC数据库访问技术
- 数据库访问技术 odbc dao rdo uda jet oledb
- 黑马程序员--ADO.NET数据库访问技术(二)
- 用程序(asp,asp.net等任何可以访问数据库的语言)来自动建立FTP帐号(serv-u的odbc设置)
- C#与数据库访问技术总结(一)之体系结构
- 技术变迁(数据库访问层)
- Wince MFC OLE DB SQLCE数据库访问技术(二):嵌入式目标平台创建本地数据库sdf文件
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- ADO数据库访问技术
- 使用ODBC访问数据库(一)
- 利用ODBC访问WINCC的历史数据库
- ADO数据库访问技术
- 数据库访问技术
- [ODBC] ODBC API访问数据库
- VC访问数据库技术的方法实例
- ADO.NET数据库访问技术(二)
- spring整合技术之---利用JDBC访问数据库