MFC连接SQL数据库操作
要操作SQL数据库要经过以下几个步骤:
0.建立数据库
1.配置数据源
2.数据库的连接
3.数据库的操作
4.类资料
【1】配置数据源
配置数据源一般有两种方法一种是通过注册表,一种是通过SQLConfigDataSource函数,具体操作如下:
第一种:SQLConfigDataSource函数创建数据源,包含 "ODBCINST.h"头文件
SQLConfigDataSource(NULL,ODBC_ADD_DSN,"SQL Server","DSN=SQLODBC\0");//创建数据源
第二种:注册表创建数据源,包含"afxdb.h"
CRegKey m_hKey;//注册一个操作注册表的类
m_hKey.Create(HKEY_CURRENT_USER,"Software\\ODBC\\ODBC.INI\\ODBC Data Sources");
//创建ODBC Data Sources项,此项列出的是数据源
m_hKey.SetValue("SQL Server","SQLODBC");
//设置数据源名称和数据源驱动
m_hKey.Create(HKEY_CURRENT_USER,"Software\\ODBC\\ODBC.INI\\SQLODBC");
\\创建 数据源项
\\设置数据源的详细参数
m_hKey.Open(HKEY_CURRENT_USER,"Software\\ODBC\\ODBC.INI\\SQLODBC");
m_hKey.SetValue("SQLTest","Database");
m_hKey.SetValue("C:\\Windows\\system32\\SQLSRV32.dll","Driver");
m_hKey.SetValue("Administrator","LastUser") ;
m_hKey.SetValue("(local)","Server") ;
m_hKey.SetValue("Yes","Trusted_Connection");
【2】数据库的连接
到了MFC的阶段了,首先建立一个MFC工程,放置两个按钮,对两个按钮实现消息响应,一个名称为“连接数据库”,一个为“查询数据库信息”。
因为要使用到CDatabase类所以需要在stdafx.h中包含afxdb.h头文件。
“连接数据库”按钮的消息响应函数代码如下
连接数据源
连接数据库按钮代码//
CDatabase m_db;//嵌入一个CDatabase对象
CRecordset *m_dbrs;
m_dbrs = CRecordset(&m_db);//创建一个记录集
// 连接数据源 Open的参数可以控制记录集的游标,详情看MSDN
m_db.Open("ODBC;DSN=SQLODBC;UID=SQLTest;PWD=12345678",false,false,"ODBC;",false);
m_dbrs = new CRecordset(&m_db); // 创建存放数据的记录集
【3】数据库的操作
执行SQL数据库语句:通过CDatabase执行SQL语句,不返回记录集
CString strSQL = "create table tabname(i int) "; // 组织SQL语句
m_db.ExecuteSQL(strSQL);//执行SQL语句
修改
CString strSQL = "UPDATE test SET name = '王二', password='2222' WHERE name=100"; // 组织SQL语句
m_db.ExecuteSQL(strSQL);
插入
short index = 0;
while (index <= 100)
{CString str="";str.Format("%d",index);CString strSQL = "insert into test(name,password) values("+str+",3333) "; // 组织SQL语句m_db.ExecuteSQL(strSQL);index++;
}
删除
CString strSQL = "SELECT name FROM test "; // 组织SQL语句
m_dbrs->Open(CRecordset::dynaset, strSQL); // 用SQL查询数据库
if(!m_dbrs->IsEOF())
{m_dbrs->Delete();
}m_dbrs->Close();
查询
try{CString strSQL = "SELECT name,password FROM test "; // 组织SQL语句m_dbrs->Open(CRecordset::forwardOnly, strSQL, CRecordset::readOnly); // 用SQL查询数据库CString *psd;short nFields = m_dbrs->GetODBCFieldCount();//返回字段数
//通过IsEOF函数判断记录集是否为空
//(记录集如果定位在最后的话,会返回0,详情请看CRecordset的MSDN说明)CDBVariant varValue;//利用CDBVariant类取得数据while(!m_dbrs->IsEOF()){//不断循环,直到for(short index = 0; index < nFields; index++){
//将字段中的值取出 详情请看CDBVariant类成员变量介绍m_dbrs->GetFieldValue(index,varValue);psd = varValue.m_pstring;if (index == 0){m_list.InsertItem(index,*psd);//插入行数据}else{m_list.SetItemText(0,index,*psd);//插入行数据}}m_dbrs->MoveNext();}m_dbrs->Close();// 关闭记录集//m_db.Close();//把关闭数据源放在关闭程序代码里}catch (CMemoryException* e){}catch (CFileException* e){}catch (CException* e){}
【资料】
CDatabase类操作数据源
函数 |
说明 |
CDatabase |
构造一个对象 |
Close |
关闭数据源连接 |
Open |
通过一个ODBC驱动程序创建到数据源的连接 |
OpenEx |
通过一个ODBC驱动程序创建到数据源的连接 |
BeginTrans |
开始事务 |
BindParameters |
允许在调用CDatabase::ExecuteSQL前绑定参数 |
Cancel |
取消异步操作或第二条线程中的过程 |
CommitTrans |
执行事务 |
ExecuteSQL |
执行SQL语句,不返回记录 |
Rollback |
回滚事务,数据源返回先前的状态 |
该类的属性函数如下表:
属性 |
说明 |
CanTransact |
如果数据源支持事务,返回非零 |
CanUpdate |
如果CDatabase可以更新,返回非零 |
GetBookmarkPersistence |
获得书签对记录集对象的持久性 |
GetConnect |
返回ODBC连接串 |
GetCursorCommitBehavior |
获得提交事务对记录集对象的影响 |
GetCursorRollbackBehavior |
获得回滚事务对记录集对象的影响 |
GetDatabaseName |
返回当前使用的数据库名 |
IsOpen |
如果当前CDatabase对象连接到数据源,返回非零 |
SetLoginTimeout |
设置数据源连接的超时数(秒为单位) |
SetQueryTimeout |
设置查询操作的超时数(秒为单位) |
应用程序可使用多个CDatabase类型的对象。构造一个对象并调用Open()成员函数打开一个连接。接着构造CRecordset类型的对象以操作连接的数据源,构造时向记录集对象传递CDatabase类型的指针。完成使用后,用Close()成员函数销毁CDatabase类型的对象。
一般情况下并不需要直接使用CDatabase类型的对象,因为CRecordset类型的对象可以实现大多数的功能、但是在进行事务处理时,CDatabase就起到关键作用。事务(Transaction)指的是将一系列对数据源的更新放在一起,同时提交或一个都不提交,为的是确保多用户对数据源同时操作时的数据正确性。
CRecordset类操作记录集
一个CRecordset类型的对象代表从数据源选择的一组记录的集合——记录集,通过该类的方法实现对数据库中记录的各种操作。
该类常用的数据成员如下表:
成员 |
说明 |
m_hstmt |
包含记录集的ODBC陈述句柄,类型为HSTMT |
m_nFields |
包含记录集中字段数据成员的数量,类型为UNIT |
m_nParams |
包含记录集中参数数据成员的数量,类型为UNIT |
m_pDatabase |
包含一个CDatabase对象指针,通过它访问数据源 |
m_strFilter |
包含CString对象,定义SQL中WHERE子句 |
m_strSort |
包含CString对象,定义SQL中ORDER BY子句 |
该类的构造方法如下表:
构造方法 |
说明 |
Close |
关闭记录集和与之相关的HSTMT |
CRecordset |
构造一个CRecordset对象 |
Open |
通过获得表或执行记录集所代表的查询来打开记录集 |
CRecordset类记录集属性如下表:
属性 |
说明 |
CanAppend |
如果新记录可以通过Addnew添加到记录集,返回非零 |
CanBookmark |
如果记录集支持书签,返回非零 |
CanRestart |
如果Requery可以被调用来再次运行记录集查询,返回非零 |
CanScroll |
如果可以在记录中回滚,返回非零 |
CanTransact |
如果数据源支持事务,返回非零 |
CanUpdate |
如果记录集可以被更新,返回非零 |
GetODBCFieldCount |
返回记录集中字段的数量 |
GetRecordCount |
返回记录集中记录的数量 |
GetSQL |
获得SQL字符串 |
GetStatus |
获得记录集的状态 |
GetTableName |
获得记录集所属的表名 |
IsBOF |
如果记录集定位在第一条记录之前,返回非零 |
IsDeleted |
如果记录集定位在一条删除的记录,返回非零 |
IsEOF |
如果记录集定位在最后一条记录之后,返回非零 |
IsOpen |
如果调用过Open函数,返回非零 |
CRecordset类更行操作如下表:
更新操作 |
说明 |
AddNew |
准备增加一条新纪录,调用Update之后完成添加 |
CancelUpdate |
取消任何未完成的更新 |
Delete |
从记录集中删除当前记录 |
Edit |
准备对当前记录进行修改,调用Update后完成修改 |
Update |
通过将新记录或编辑的数据存入数据源来完成AddNew或Edit操作 |
记录集有两种形式:snapshot(表示数据的静态视图)和dynaset(表示记录集与其他用户对数据库的更新保持同步)。
CFieldExchange类处理数据交换
CFieldExchange类支持数据库类所使用的记录集字段交换(RFX)程式。如果使用自定义的数据类型写数据交换程式,会使用这个类。否则不会直接使用此类。RFX在记录集对象的字段数据成员与数据源中当前记录的相应字段之间交换数据。
CRecordView类显示记录
CRecordView对象用于在控件中显示数据库记录的视图。这种视图是一种直接连到一个CRecordView对象的格式视图,它从一个对话框模板创建资源,并将CRecordView对象的字段显示在对话框模版的控件里。对象利用DDX和RFX机制,使窗体上的空间和记录集的字段值之间数据移动自动化,也就是说,用户不需要编写一行代码就可以完成简单的数据库记录查看程序。
CDBException类处理异常
由CException类派生,以3个继承的成员变量反映对数据库操作时的异常:
m_nRetCode:以ODBC返回代码(SQL_RETURN)的形式表明造成异常的原因
m_strError:字符串,描述造成抛出异常的错误原因
m_strStateNativeOrigin:字符串,用以描述以ODBC错误代码表示的异常错误
使用MFC ODBC编程建立应用程序
MFC ODBC编程模型概述
使用MFC ODBC访问数据库比直接使用ODBC API简单得多,编程步骤如下:
使用CDatabase打开数据源的连接,如果利用AppWizard生成一个ODBC数据库应用程序,则会自动完成操作。
使用ClassWizard向导加入由CRecordset类派生的用户记录集类,完成对数据库的绑定。
创建记录集类对象,如果利用AppWizard生成一个ODBC数据库应用程序,则会自动在文档类中创建。
使用记录及对象对数据库进行遍历、增加、删除、修改等操作。
使用CDatabase类的ExecuteSQL函数直接执行SQL命令。
使用CDatabase类的BeginTrans、CommitTrans和Rollback函数进行事务处理
使用CDatabase类的Close函数关闭数据源连接。
MFC连接SQL数据库操作相关推荐
- 组态王如何连接mysql_组态王连接SQL数据库操作步骤
组态王连接SQL数据库操作步骤 1.建立 ODBC 连接配置:(1)开始--设置--控制面板--管理工具--数据源:(2)双击"数据源" ,选择"用户 DSN" ...
- Java连接SQL数据库失败的分析思路
简单的说下java连接SQL数据库的步骤: 1. 首先要有一个jtds.jar数据库驱动包. 2. 可先在项目下新建一个Folder,取名为lib,把jtds驱动包放到lib文件夹下. 3. 在项目上 ...
- asp.net中ADO.NET连接SQL数据库代码和连接Access数据库代码
连接SQL数据库方法: 一.建立连接 1.(使用System.Data.SqlClient) <1> string strcon; //声明连接字串 ...
- python连接sql数据库_python连接SQL数据库
前言 上次通过学习,懂得了如何通过不同的对象来定位页面的元素(id,class_name,tag_name,xpath,css等),可以实现模拟点击的功能.当然,这只是初期的web自动化的一点小成绩. ...
- python mss_Python实现的连接mssql数据库操作示例
本文实例讲述了python实现的连接mssql数据库操作.分享给大家供大家参考,具体如下: 1. 目标数据sql2008 r2 comprject=>testmodel 2. 安装python ...
- 数据库建表原则,SQL数据库建表前期优化,SQL数据库操作优化,数据库命名规范...
2019独角兽企业重金招聘Python工程师标准>>> 关键字: 数据库建表原则 ·1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...
- Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)
文章目录 Node.js MySQL驱动 操作 MySQL 数据库 连接 MySQL 数据库 增删改查操作 防止 SQL 注入攻击 数据库连接池操作 Node.js MySQL驱动 Node.js的原 ...
- solidworks electrical 安装无法连接sql数据库的问题
1.'对于只是用solidworks软件画三维结构的同志们,可以选择取消安装electrical插件,因为这个插件是基于数据库的,如果出现版本不兼容.安装不当等出现数据库无法正常安装等问题. 2.但是 ...
- python mssql数据库开发_Python实现的连接mssql数据库操作示例
本文实例讲述了python实现的连接mssql数据库操作.分享给大家供大家参考,具体如下: 1. 目标数据sql2008 r2 comprject=>testmodel 2. 安装python ...
最新文章
- 2012年2月16日
- 暖通专业标准规范大全_中高级职称专业分类改革 机械类十大热门专业分享
- 接口隔离原则_设计模式六大原则
- 通过 SAP Spartacus 的 Component 映射机制,更改默认购物车 Cart 页面
- 媒体格式分析之flv -- 基于FFMPEG
- python文本聚类分析_python机器学习kmeans算法——对文本进行聚类分析
- linux mysql connector_fd_在CentOS里使用MySQL Connector/C++
- WXS是小程序的一套脚本语言
- python:函数的参数传递方法演示
- 2019 CCF 推荐 会议 列表
- Hermite(埃尔米特)插值法 | 插值多项式+ 插值余项
- 计算机四级少选给分吗,计算机四级:考高分的有效途径(转载)
- html怎么把图片做成椭圆形,html5 作图椭圆
- STM8L051的硬件I2C调试
- Auto CAD:CAD绘图设计以项目为导向,实战案例布局作图运用技巧经验总结之详细攻略
- 大话设计模式三之单一职责原则、开放-封闭原则、依赖倒置原则、里氏代换原则
- 解决办法:Ubuntu 16.04 【缺少依赖】导致出现该错误——ERROR: the following packages/stacks could not have their
- 深度学习和TensorFlow学习资源(书籍、文档和视频)
- Shiro实现session限制登录数量踢人下线
- 点盾云播放视频没声音了怎么办?
热门文章
- Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable a
- python魔方方法__getitem__、__setitem__和__len__
- 计算机可以存储人类记忆吗,神经科学:人类大脑是否100%在工作?人类记忆是否有极限?...
- CYPRESS S6E1C3 系列 FM0+ 32位单片机串口uart0 问题
- 30多岁想转行,零基础学编程,来得及吗?
- Qlikview Data Modeling---创建一个Key/Link Table
- Java 前端传后台出现405,415错误的解决方法
- MySQL-InnoDB的索引原理及优化技术
- 《区块链技术与应用》北大肖臻老师——课程笔记【21-23】
- c#中文件路径出现非法字符怎么办?解决也容易