QDB.TQDBProvider接口设计

下图是QDB中与负责与数据库连接的数据提供者对象的接口定义,UML 文件为 StartUML 的格式,如有需要,请在 QQ群 联系。

 

TQDBProvider

【简介】

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接口的设计完全考虑了网络传送数据流的问题。

分享到: