下图是QDB中与负责与数据库连接的数据提供者对象的接口定义,UML 文件为 StartUML 的格式,如有需要,请在 QQ群 联系。
【简介】
TQDBProvider用于建立数据集和数据库之间的桥梁及辅助功能。TQDBProvider提供的接口类别主要有:
1、属性
ProviderName – 提供者名称,在整个系统中必需唯一标记,只读。
ConnectionString – 连接字符串,等价于分别设置各个属性的结果。
Connected – 是否已连接属性,设置它将打开连接对象
Database – 连接的数据库名
ServerHost – 服务器地址
ServerPort – 服务器IP
UserName – 用户名
Password – 密码
LastErrorCode – 末次错误代码
LastErrorMsg – 末次错误消息内容
TransactionLevel – 事务嵌套级别(如果支持)
Handle – 内部实际使用的连接句柄,其含义由更下层的实现解释
ConnectParams – 连接参数,最终通过它构建成ConnectionString,而ConnectionString的修改也会反馈给它
CommandTimeout – 执行脚本的超时时间设置
ConnectTimeout – 连接到数据库的超时时间设置
KeepAlive – 是否保持数据库连接
PeekInterval – 用于保持数据库连接活动的保持命令发送间隔
AutoReconnect – 当连接丢失时,如果有新的脚本需要执行时,是否自动重新连接
IsolationLevel – 事务隔离级别
2、事件
2.1、连接事件
BeforeConnect – 连接前触发,给予最后一次修改连接参数的机会
AfterConnected – 连接成功后触发
BeforeDisconnect – 主动断开连接前触发,如果是被动断开连接则不会触发
AfterDisconnected – 断开连接后触发,如果是由于网络原因断开连接,可能不会及时触发
BeforeExecute – 在执行脚本前触发
AfterExecute – 在执行脚本完成后触发,不论是否执行成功,可以结合QLog等日志记录工具来记录日志
OnExecuteError – 在执行脚本失败时触发
OnExecuted – 在执行脚本成功时触发
2、函数
构造和析构函数略。
Open – 打开连接,如果成功,返回True,失败返回False
Close – 关闭当前已打开的连接
OpenDataStream – 执行指定的脚本并保存返回结果到一个数据流,数据流的格式由AFormat参数指定。如果脚本返回多个结果集,则返回一个包含这多个结果集的复合数据流。分同步和异步两种模式,异步模式返回的句柄可以调用Cancel函数取消脚本的后台执行。
OpenDataSet – 执行指定的脚本并将结果返回到一个数据集,如果指定的脚本返回了多个数据集,则返回一个嵌套数据集。分异步和同步两种模式,异步模式返回的句柄可以调用Cancel函数取消脚本的后台执行。
ExecuteCmd – 执行指定的脚本并返回最后一句脚本影响的总行数,如果失败,则返回-1。分异步和同步两种模式,异步模式返回的句柄可以调用Cancel函数取消脚本的后台执行。
Cancel – 取消异步脚本的执行
BeginTrans/CommitTrans/RollbackTrans – 开启、提交、回滚事务
HasTable/HasView/HasProcedure/HasFunction/HasTrigger/HasField – 判断指定的表、视图、存贮过程、函数、触发器、字段是否存在
HasRecords – 判断指定的脚本是否会返回记录,它会尝试开事务执行相应的脚本,然后回滚事务来测试是否有记录返回
ApplyChanges – 从流或数据集中将变更提交到数据库
AcquireDataSet/ReleaseDataSet – 从池中请求一个数据集对象及将对象返回到池中
EnumTables/EnumViews/EnumProcedures/EnumFunctions/EnumTriggers/EnumFields – 枚举数据库中的表、视图、存贮过程、函数、触发器、字段
【答问】
1、TQDBProvider是否支持服务器端游标?
不支持。
2、TQDBProvider是否支持一个查询返回多个结果集?
支持,OpenDataSet/OpenDataStream都支持一次返回多个,如果是OpenDataSet,则返回成一个嵌套数据集,如果是OpenDataStream则依次写入到目标流。
3、TQDBProvider相当于现在的层次的东西?
如果非要对比,那么我们可以将TQDBProvider相象成TADOConnection+TADOCommand+TDataProvider的一个合体,而TQDataSet可以当成TADODataSet+TADOQuery吧。
4、TQDBProvider 支持三层模式吗?
当然,您看它的OpenDataStream、ApplyChanges接口的设计完全考虑了网络传送数据流的问题。