MFC_数据库及网络通信

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MFC_数据库及网络通信
Day16
一、微软数据库访问技术
1 ODBC(Open Database Connectivity)微软开放式数据互联:
微软提供的一组统一的访问各种数据库管理系统的 API;
访问前首先要将数据库设置为 ODBC 数据源;
MFC 将这组 API 函数封装成 ODBC 类;
只能访问和操作关系型数据库,对非关系型数据无能为力。
AddNew(); 1.1.3 为此记录所有字段赋值
SetFieldValue
-2-
MFC_数据库及网络通信
1.1.4 更新到数据库
Update
1.2 修改记录
1.2.1 打开表
1.2.2 将游标移动到要修改的记录
1.2.3 修改此记录所有字段值
SetFieldValue
1.2.4 更新到数据库 Update
2 首先设置 ODBC 数据源
设置 --> 控制面板 --> 管理工具 --> 数据源(ODBC)
3 实现步骤:
3.1 连接数据库
CDatabase::Open
3.2 通过执行 Sql 语句操作表数据 CDatabase::ExecuteSQL
3.3 打开表
CRecordset::Open
3.4 获取字段的数量
enum CursorTypeEnum CursorType, //游标类型
enum LockTypeEnum LockType, //记录的锁定类型
long Options ); //标识第一个参数的:adCmdTable(表名)、adCmdText(Sql 语句)、
adCmdStoredProc(存储过程)
多用于执行查询操作,特别是需要指定游标类型和记录的锁定类型的情况。
三、事务处理
1 事务的四个特性:原子性、隔离性、一致性、持久性。
ADO 在 Connection 接口中也提供了事务处理:
启动事务:BeginTrans
事务结束:CommitTrans 提交事务
RollbackTrans 回滚事务
四、网络通信编程
CFeiQApp - 应用程序类
4 用户上线的执行流程
4.1 void CMainFrame::OnCreate() { if( TRUE != m_UserServer.InitServer( ) )
AfxMessageBox( "用户服务器创建失败" );
游标类型: enum CursorTypeEnum {
adOpenUnspecified = -1, //不指定 adOpenForwardOnly = 0, //单向的静态游标 adOpenKeyset = 1, //键集游标 adOpenDynamic = 2, //动态游标 adOpenStatic = 3 //双向的静态游标 }; 记录的锁定类型: enum LockTypeEnum { adLockUnspecified = -1, //不指定 adLockReadOnly = 1, //只读记录集 adLockPessimistic = 2, //悲观锁 adLockOptimistic = 3, //乐观锁 adLockBatchOptimistic = 4 //批处理的乐观锁 }; Day17 一、Recordset 接口 1 字段操作(Fields) Recordset 接口->Fields 1.1 获取字段的数量 Fields->GetCount() 1.2 获取字段的名称 Fields->GetItem(nIndex)->GetName() 1.3 获取/设置字段 Fields->GetItem(nIndex)->Value 2 游标操作 MoveNext MovePrevious MoveFirst MoveLast Move IsBOF 定位在第一个记录前,则此函数返回一个非零值 IsEOF 定位在最后一个记录后,则此函数返回一个非零值 二、对数据的增、删和修改 1 通过记录集的方式实现 1.1 添加记录 1.1.1 打开表 1.1.2 在记录集中添加一条新的记录
只适合小型的网络通信编程项目的开发。
--------------------------------------------
(一)、初始化操作:
MFC 库中集成的 1.1 版本的 Socket 库,xp 系统还提供了 2.2 版本的 Socket 库。
dll 文件:ws2_32.dll
lib 文件:ws2_32.lib
1.3 基于组件,所以通过接口对外提供服务。并且接口函数参数的类型是 COM 数据类型。调用时,
需要做参数转换。
1.4 访问前无需设置 ODBC 数据源。
2 ADO 的使用: 将 AOD 组件的接口封装成 C++的类,然后使用 ADO 组件的封装类。
2.1 ADO 组件所在的文件路径(msado15.dll)
1.3 删除记录
1.3.1 打开表
1.3.2 将游标移动到要删除的记录
1.3.3 删除此记录
1.3.4 更新到数据库
2 通过执行 Sql 语句的方式实现
2.1 Connection 提供了执行 Sql 语句的接口函数
_RecordsetPtr Execute(
_bstr_t CommandText, //Sql 语句、存储过程名称
EventSelect 模型
重叠 IO
完成端口
若编程时,网络通信的服务器端采用的是 Windows 平台,需要了解以上的知识。
3 MFC 封装了部分的 Socket 函数,形成了 Socket 类
CAsyncSocket 类 - 异步 Socket 类。
CSocket
类 - 父类是 CAsyncSocket,是一个同步类。
//数据库登录名称
_bstr_t password,
//登录密码
long option);
//数据库连接方式。-1 是不指定
不同的数据库管理系统,连接字符串不同;
即使相同类型的数据库管理系统,版本不同,连接字符串也不同。
使用.udl 文件设置数据库的连接,测试连接成功后,(用记事本打开)复制得到的连接字符串。
2 DAO - 基于 ODBC 的数据库,目前已经被淘汰。
3 OLE DB - 基于 COM 技术的一组访问和操作数据库的接口;
性能和功能上都优于 ODBC,但难度大、门槛高,并没有被广大程序员所接受。
4 ADO - 基于 OLE DB 做了封装,提供了一组比较简单的接口,成为最广泛的访问数据库的技术之一。
1 使用基本的 socket 函数
可移植性比较好,但实现相同的功能时,需要编写更多的代码。
2 使用 WSA 开头的 Socket API 函数
结合了 Windows 平台特性的一组 API 函数,可移植性较差。
Windows 服务器的网络通信编程,了解 I/O 模式。
select 模型
AsyncSelect 模型
CRecordset::GetODBCFieldCount
3.5 获取字段的信息
CRecordset::GetODBCFieldInfo
3.6 获取字段的值
CRecordset::GetFieldValue
3.7 游标操作
CRecordset::MoveNext CRecordset::IsEOF
3.8 关闭记录集和数据库
一、网络通信编程
1 简单的文件传输
1.1 使用 MFC 的 Socket 类
1.2 大数据的收发
二、FeiQ 的例子
1 功能分析
用户上线包含了客户端又包含了服务器端。
文件收发使用的 TCP 通信;
其它是 UDP 通信;
上线和下线的功能使用了 UDP 广播。
"C:\Program Files\Common Files\System\ado\msado15.dll"
2.2 #import 语句导入 AOD 组件 #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace
Recordset 接口 - 功能上类似于 ODBC 类的 CRecordset 类。
3 Connection 接口(封装为 CAdoDatabase 类)
3.1 连接数据库
Open( _bstr_t connectionString,
//连接字符串
-1-
MFC_数据库及网络通信
_bstr_t userid,
CRecordset::Close CDatabase::Close
4 CRecordView 类的使用
三、使用 ADO 操作和访问数据库
1 与 ODBC 的区别:
1.1 既可以访问关系型数据库,也可以访问非关系数据库。
1.2 ADO 是通过单独的 COM 组件提供服务的,并不属于 MFC 的一部分。
头文件: winsock2.h
首先调用 Socket 库的初始化函数:
int WSAStartup(
WORD wVersionRequested,//请求的库版本
LPWSADATA lpWSAData);//可用的库信息
1 TCP 通信
1.1 TCP 服务器
1.1.1 创建 Socket
-3-
MFC_数据库及网络通信
rename("EOF","adoEOF")
编译工程,生成两个文件 msado15.tlh(声明)和 msado15.tli(实现)。
2.3 在使用前,需要进行 COM 库的初始化。一般放到 App 的 InitInstance()函数中调用。
CoInitialize(NULL);
2.4 相关接口
Connection 接口 - 功能上类似于 ODBC 类的 CDatabase 类。
2.1.1 创建 Socket
SOCK_DGRAM --数据报
2.1.2 绑定地址和端口 (5678)
2.1.3 数据收发
recvfrom()
2.1.4 关闭 Socket
2.2 UDP 客户端
2.2.1 创建 Socket
2.2.2 数据收发
sendto()
2.2.3 关闭 Socket
Day18
VARIANT * RrcordsAffected, //影响到的记录的数量
long
Options);
//标识第一个参数 adCmdText(Sql)
多用于增、删、修改等 Sql 语句,若执行的是查询语句,返回的记录集是只读的,而且游标
是单向的静态游标。
2.2 Recordset 接口提供的执行 Sql 语句的接口函数 Open();
3 工程中类和结构的介绍
3.1 用于封装客户端与服务器传输数据的结构体,传输不同信息使用不同的命令 ID 来标识。
3.2 类的介绍
CUserServer - UDP 服务器的操作:上线、下线、信息收发和掉线检测
CUserClient - UDP 客户端的操作:上线、下线、信息收发和掉线检测
CFileServer - TCP 服务器的操作:文件传输
5 - 基于 net 平台的访问和操作数据库的类。
二、使用 ODBC 类访问和操作数据库
1 相关类
1.1 CDatabase 类 - 主要实现数据库的连接和关闭等操作。
1.2 CRecordset 类 - 主要实现对数据的操作。
1.3 CRecordView 类 - 显示数据库数据的视图类。
1.1.2 绑定地址和端口
1.1.3 监听
1.1.4 接收客户端连接
1.1.5 数据收发
1.1.6 关闭 Socket
通过命令 -an ,查看端口状态;
1.2 TCP 客户端
1.2.1 创建 Socket
1.2.2 连接服务器
1.2.3 数据收发
1.2.4 关闭 Socket
2 UDP 通信
2.1 UDP 服务器
CFileClient - TCP 客户端的操作:文件传输
CFileThread - 文件传输的用户界面线程的线程类
CFileRecvDlg - 接收文件对话框
CFileSendDlg - 发送文件对话框
CMainFrame - 主框架窗口类
CUserView:CListView - 用户列表视图
CChatView:CFormView - 聊天视图
3.2 关闭数据库
Close();
4 Recordset 接口(封装为 CAdoRecordset 类)
4.1 打开表
HRESULT Open (
const _variant_t & Source, //表名、Sql 语句、存储过程
const _variant_t & ActiveConnection, //活动连接
相关文档
最新文档