参数详解
DBParm 参数
VDN 驱动中常用到下面几个参数,用来弥补一些与直连专用接口默认效果不同的情况
PBTrimCharColumns
- 可选
- 默认:No
- 示例:
PBTrimCharColumns='Yes'
如果使用了 Char 类型的列,使用此参数可以在检索 Char 类型列时自动去除后面的空格。
RecheckRows
- 可选
- 默认:0
- 示例:
RecheckRows=1
如果使用了 INSERT\DELETE\UPDATE 触发器(Trigger)务必加上这个参数,否则更新会有异常。
DateTimeFormat、TimeFormat
- 可选
- 默认:Yes
- 示例:
DateTimeFormat='\''yyyy-MM-dd hh:mm:ss.fff\''',TimeFormat='\''hh:mm:ss\'''
SQLSERVER使用time类型提示错误:数据类型 time 和 datetime 在 equal to 运算符中不兼容
设置为示例中的格式后,生成的SQL语句为 time_col='11:11:11' ,而不是 time_col= {t '11:11:11'},来避免这个错误
CommitOnDisconnect
- 可选
- 默认:Yes
- 示例:
CommitOnDisconnect='No'
断开数据库连接时提交或回滚数据,默认为提交。(超时断开或者调用 Disconnect 操作都会执行)
Yes: 提交 No: 回滚
与 Outage 的区别详见附录 1
PROVIDERSTRING 参数
VDN 驱动独有的连接参数均放在 PROVIDERSTRING 中,绝大多数为可选参数,实现特定的功能。
以下参数释义按照重要性及使用频率排序。
图例: 🏷️ 必须参数 ⭐ 重要参数
Database 🏷️⭐
- 必须
- 示例:
database=帐套名称
自定义数据库(适用于 SQLSERVER)
当帐套设置的数据库名称为:[Custom],支持客户端自定义连接的数据库名称,帐套名称和数据库名之间半角冒号(:)分割 :
database=帐套名称:数据库名
服务端设置参见:帐套设置
V2017.8.1.3 版本之后支持
DesKey 🏷️⭐
- 必须
- 示例:
deskey=Topany
与服务器交互式关键字加密的(参见安全设置 一节),建议修改为自定义的值以增强安全性。
Debug ⭐
- 可选
- 默认:0
- 示例:
Debug=1
Debug=1 PB 开发模式
Debug=0 正式运行
指定系统为运行模式还是开发模式,在 PB 调试运行时设定 Debug=1,否则连接不上数据库。
ProvType
- 可选
- 默认:空
- 示例:
ProvType=NCLI
指定服务器端连接 SQLSERVER 时使用 Microsoft SQL Server Native Client 驱动。
提示
SQLSERVER2008 版本增加了 DATE 数据类型,为了支持此类型,连接 SQLSERVER2008 时可以指定服务器使用 SQLNCLI 驱动,服务器端需要单独安装该驱动(sqlncli.msi) 。
一些情况下使用 SQLNCLI 驱动可以获取更快的速度
V2015.8.1.1 版本之后支持
AppName
- 可选
- 默认:无
- 示例:
AppName=VDN
指定程序名称,使用后将在 SQLSERVER 的连接进程里显示。
Host
- 可选
- 默认:无
- 示例:
Host=PCName
指定客户端名称。使用后将在 SQLSERVER 的连接进程里显示。
相关信息
可以在 Host 字符串中使用下列特定字符串,服务器端将替换为指定的值
[ClientIP]客户端外网 IP 地址 [ClientName]客户端计算机名 [ServerName]VDN 所在服务器名 [VDNApp] VDN 所在的应用程序名
例如: Host=客户端传入的值@[ClientIP]#[ServerName]%[VDNApp]
提示
该参数列表也可以在服务器端的 run.config 文件中[Setting]节点下 Host 键值中进行设置
例如:<Host>@[ClientIP]#[ServerName]%[VDNApp]</Host>
SysUserID
- 可选
- 默认:无
- 示例:
SysUserID=123
指定数据库连接在[在线管理]里的用户 ID,如果不指定则显示为数据库登录的用户名(例如:sa),这个 ID 一般为用户登录系统使用的用户 ID,配合 SysUser 使用。
当数据库连接时还不确定这个 ID 时,可以后期使用 SQL 指令修改这个值 。
V2023.2.1.1 版本之后支持
SysUser
- 可选
- 默认:无
- 示例:
SysUser=张三
指定数据库连接在[在线管理]里的用户名,如果不指定则显示为数据库登录的用户名(例如:sa),这个用户名一般为用户登录系统使用的用户名,配合 SysUserID 使用。
当数据库连接时还不确定这个用户名时,可以后期使用SQL 指令修改这个值 。
V2023.2.1.1 版本之后支持
ReConSQL
- 可选
- 默认:无
- 示例:
ReConSQL=Update Tab set spid=@@spid where id=123
在数据库重连后系统自动执行的 SQL 语句,用来进行一些相关的操作,例如同步 SPID。
可以是单独的 SQL 语句,也可以是一个存储过程。
SQLSERVER 存储过程格式:execute 存储过程名 @参数 1 ='值' , @参数 2 ='值'
execute P_USER @ID ='123' , @NAME ='张三';ORACLE 存储过程格式:call 存储过程名('参数值 1','参数值 2')
call P_USER('123' , '张三');如果 SQL 语句中包含引号、逗号这些特殊字符,可以给整个语句使用 base64 编码后传递,格式为 ReconSQL=base64:编码后的 SQL:
ls_sql_base64 = uo_vdn.base64Encode("call P_USER('9999' , '张三')")
SQLCA.DBParm+="ReconSQL=base64:"+ ls_sql_base64 +";"当数据库连接时还不确定这个 SQL 语句,可以后期使用SQL 指令修改这个值 。
V2023.2.1.1 版本之后支持
DoubleQuote
- 可选
- 默认:0
- 示例:
DoubleQuote=1
当值为 1 时就会执行: SET QUOTED_IDENTIFIER OFF; 操作,可以在语句里使用双引号,作用同 DelimitIdentifierToDB='Yes'。
ConcatNull
- 可选
- 默认:1
- 示例:
ConcatNull=1
值为 1 时:执行 SET CONCAT_NULL_YIELDS_NULL OFF; 操作,同 NULL 字符串连接时返回非空字符串
值为 0 时:同 NULL 字符串相连时返回 NULL
例如:select A + B from tab;, A 列值为"123", B 列值为 NULL
当 ConcatNull=1 是 返回 "123"
当 ConcatNull=0 是 返回 NULL
提示
PB9 的专用接口 MSS Microsoft SQL Server 连接默认 ConcatNull=1,
如果使用 OLE DB 接口直连该参数默认为 0,但使用 VDN 时被默认位置为 1
Truncate
- 可选
- 默认:0
- 示例:
Truncate=1
当值为 1 时,字段值超出字段长度将被自动截断,不会出现:将截断字符串或二进制数据 的错误提示,直连 SQLSERVER 数据库时默认为 1
V2018.2.1.1 版本之后支持
ConvertWChar
- 可选
- 默认:0
- 示例:
ConvertWChar=1
如果使用 PB9 且 SQLSERVER 里使用了 nvarchar,ORACLE 里使用了 varchar2(char)\nvarchar 等双字节数据类型就需要设置这个值,否则:PB9 读取双字节字段会产生乱码。主要出现在动态 DataWindow 和嵌入式 SQL 语句里。
提示
这个参数是针对 PB9 的一个 BUG 来设置的,PB10 及以上版本不用设置这个参数。
IgnorePBTable
- 可选
- 默认:0
- 示例:
IgnorePBTable=1
当值为 1 时 VDN 将忽略对 PB 系统表(pbcattbl)的检索。为动态 DataWindow 提速使用,速度提升很明显。
PLSQLRSet
- 可选
- 默认:0
- 示例:
PLSQLRSet=1
连接 Oracle 时如果使用存储过程作为 DATAWINDOW 的数据源,返回数据集(SYS_REFCURSOR)必须加上这个参数
Traditional
- 可选
- 默认:0
- 示例:
Traditional=1
Traditional=1:使用繁体序操作系统时设置该值为 1 Traditional=2:当时用繁体服务器端连接简体数据库,显示简体中文字符为乱码时使用 Traditional=3:当用到泰文等文字编码时使用 Traditional=4:当用到繁体序列号时用到韩文等文件编码时使用
注: 值 2、3 在V2017.6.1.3 版本之后支持,在智能提速开启时使用
Encrypt
- 可选
- 默认:0
- 示例:
Encrypt=1
对发往服务器的 SQL 语句进行加密处理,进一步增强安全性。
加密处理对系统速度会有一定的影响,根据需要酌情处理。
SSLEncrypt
- 可选
- 默认:No
- 示例:
SSLEncrypt=No
当 SQLSERVER 开启了 SSL 连接,要在 PROVIDERSTRING 里设置该参数为 Yes
V2023.1.1.1 版本之后支持
CompressType
- 可选
- 默认:Default
- 示例:
CompressType=Default
客户端可以根据不同的网络情况决定服务器采用何种压缩方式返回数据。
fastest:压缩速度最快,压缩率较低,适用于局域网 fast:压缩速度较快,压缩率中等,适用于 15M-30M 的带宽 normal:压缩速度中等,压缩率较高,适用于 3M-15M 的带宽 maximum:压缩速度较慢,压缩率最高,适用于 3M 以下的带宽 default:使用服务器设置的默认参数
V2016.10.1.1 版本之后支持
RetryCount
- 可选
- 默认:3
- 示例:
RetryCount=0
当执行请求发生网络错误时自动重试次数,配合 RetryInterval 使用。
当设置了 ConTimeout 时,如果发生错误且 RetryCount>0 则会多次尝试连接,错误返回时间将等于(ConTimeout+RetryInterval)*RetryCount
V2019.2.1.1 版本之后支持
RetryInterval
- 可选
- 默认:500
- 单位:毫秒
- 示例:
RetryInterval=1000
重试机制时间间隔,每隔 RetryInterval ms 后进行一次重试
V2019.2.1.1 版本之后支持
ConTimeout
- 可选
- 默认:0
- 单位:秒
- 示例:
ConTimeout=0
VDN 连接服务器时的超时时间,超过了这个时间将自动取消继续连接并返回超时错误信息。
ConTimeout=0 代表由系统根据情况自动判断,直到连接成功或返回错误
V2018.3.1.1 版本之后支持
Timeout
- 可选
- 默认:30
- 单位:秒
- 示例:
Timeout=30
执行数据查询后超时多久没有返回,VDN 进行状态判断,如果状态异常则返回错误,否则继续等待。
Timeout=0 则代表不进行状态判断
V2017.8.1.1 版本之后支持
Heartbeat
- 可选
- 默认:120
- 单位:秒
- 示例:
Heartbeat=30
驱动程序自动执行网络心跳包监测,便于当网络发生异常时及时发现问题,并在网络恢复后自动恢复与 VDN 服务器端的连接。
Heartbeat=0 则代表不进行状态判断
配合:MsgHWN、MsgEvent 参数,会发送相应的通知消息给客户端程序。 消息类型(Type)包括如下: DBWarning:警告消息 DBError:错误消息,多为连接断开的异常消息 DBSuccess:成功消息,多为连接自动恢复消息
V2018.3.1.8 版本之后支持
MsgHWN&MsgEvent
- 可选
- 默认:无
- 示例:
MsgHwn=985;MsgEvent=1024;
指定用来接收数据库驱动传来的消息的 VDN 组件的 Handle 及时间 EventID
相关信息
直接调用 uo_vdncore 组件的 getDBParm()函数
SQLCA.DBParm +=uo_vdn.getDBParm()该函数直接返回字符串:MsgHwn=....;MsgEvent=1024;
将其附加在连接串的 PROVIDERSTRING 中即可。
当 VDN 驱动发送消息给客户端时在 VDN 组件的 ResponseMsg 事件中就可以获取该消息
该消息为异步消息,非安全消息。
目前仅用来接收心跳包检测到连接异常断开、连接恢复的消息
V2018.3.1.8 版本之后支持
也可以通过 VDNCommand 指令后期设置该参数,详见[VDN SQL 指令]
V2019.1.1.1 版本之后支持
Outage
- 可选
- 默认:空
- 示例:
Outage=commit
当客户端意外断网后,服务器端自动执行提交或回滚操作(该时间点服务器端侦测到客户端连接丢失,设置连接状态为无效,并没有实质断开与数据库之间的连接)不设置该值时,将不进行任何操作。
commit: 提交rollback:回滚
与 CommitOnDisconnect 的区别详见附录 1
V2017.8.1.3 版本之后支持
Name
- 可选
- 默认:空
- 示例:
Name=tr_1
默认 空
给数据库连接指定一个名称。
目前可用于连接数据库的过程中,中止数据库连接。
调用 uo_vdncore.CancelDBConnect(Name)来中止正在进行的数据库连接
V2018.3.1.11 版本之后支持
CancelEvent
- 可选
- 默认:空
- 示例:
CancelEvent=00001234
指定一个 Event 句柄,用于中止数据库连接,适用于多线程连接数据库使用。同指定 Name 后调用 CancelDBConnect 作用相同
V2019.1.0.1 版本之后支持
CPB
- 可选
- 默认:空
- 示例:
CPB=SqlAnyWhere
兼容连接 SQLAnyWhere 数据库时使用 LIST 函数等情况
V2019.2.1.3 版本之后支持
DNS
- 可选
- 默认:无
- 示例:
dns=http://wwww.vesn.net:8088/|abc|ECE5E06
指定 DNS 服务器的信息,当无固定 IP 时,可以使用 VDN 的动态域名解析功能。
格式:服务器地址|服务器 DesKey|ID
Remark
- 可选
- 默认:空
- 示例:
Remark=123
指定连接的备注信息,将显在系统设置--在线管理的备注信息里
也可以通过 VDNCommand 指令后期设置该参数,详见[VDN SQL 指令]
V2018.3.1.11 版本之后支持
ValidServer
- 可选
- 默认:0
- 示例:
ValidServer=1
指定客户端驱动是否对接收到的数据格式进行判断,以验证数据格式是否符合规则。
之前默认都是验证,但是由于网络或者代理原因一些客户端收到的数据会有 EOF 结尾的情况,提示:无效的 VDN 服务器,所以默认不再验证。
0: 不验证1: 验证
V2021.1.1.1 版本之后支持
附录
Outage 和 CommitOnDisconnect 参数的区别
Outage 为 VDN 服务器端侦测到客户端意外断网后执行的操作,而 CommitOnDisconnect 为数据库连接断开后的操作。
举例说明:客户端意外断开(断网或程序非正常关闭),根据断网形式不同,VDN 服务端侦测到的时间为立即或 20-80 秒,此时服务端会根据 Outage 参数的设置进行操作;
当客户端在服务端设置的超时时间(默认 10 分钟)内没有恢复连接时,服务端就会断开该连接同数据库的连接,并移除该连接记录,此时数据库会根据 CommitOnDisconnect 的值进行操作;
如果客户端超时时间内恢复了连接,则可继续使用。
