R024---UiPath之Execute Query的Time
一、缘起
昨天遇到一个关于Execute Query的奇怪问题,今天解决了,做个记录,供参考。
二、问题
程序执行到Execute Query这一步时(其实这一步是循环中的一个步骤,已经跑了11次,跑第12次时报错),报错信息:字典引用的key不存在。
Execute Query的SQL语句的拼接中,确实用到字典变量。
于是,在这一步前增加Write Line,把Execute Query中拼接SQL语句的语句,通过Write Line输出,结果发现这个SQL语句拼接正常,没有因为用到字段变量而报错,那为什么执行到Execute Query就报上面的关于字典的错误?
三、解决
3.1 新建流程文件,将Execute Query这一步单独复制出来执行,报错:
实际上我并没有主动取消该流程。
3.2 在navicat中执行该SQL语句,结果正常,用时72秒。
猜想:是不是因为运行时间太长超时导致。
于是找到Execute Query的Timeout属性,属性提示:Specifies the amount of time (in milliseconds) to wait for the activity to run before an error is thrown. The default value is 30000 milliseconds (30 seconds).
中文:指定在抛出错误之前等待活动运行所需的时间(以毫秒为单位)。默认值为30000毫秒(30秒)。
看来就是这里问题了,如果不设置Timeout的属性值,运行时间超过30秒,Execute Query就自动中断,从而出现上面的提示:用户请求取消当前操作。
设置Timeout的属性值500000(500秒),重新跑,流程正常跑了!
四、总结
有Timeout属性的Activity,请注意其默认时间,如果默认时间不够,请设置合理的时间,以便Activity不会自己中断,导致程序错误。
五、附:UiPath网站Execute Query中文翻译
https://activities.uipath.com/docs/execute-query
UiPath.Database.Activities.ExecuteQuery
对数据库执行查询,返回查询结果类型Datatable。
属性
连接配置
ProviderName - 用于访问数据库的数据库提供程序的名称。
ConnectionString - 用于建立数据库连接的连接字符串。
ExistingDbConnection - 从Connect或Start Transaction活动获取的已打开的数据库连接。此属性以及ConnectionString和ProviderName属性是互斥的; 如果设置了此属性,则无法再设置其他属性。
杂项
Private - 如果选中,则不再以Verbose级别记录变量和参数的值。
CommandType - 指定如何解释命令字符串。可以使用以下选项:Text - 执行SQL参数中给出的查询。StoredProcedure - 调用SQL参数中指定的过程名称。TableDirect - 从表中调用所有记录。
输入
Sql - 要执行的sql命令。必须根据CommandType属性中的选择完成此字段。
参数 - 绑定到sql命令的命名参数的字典。通过在sql命令中指定'@parameterName'语句来完成绑定。在运行时,parameterName将替换为字典中的值。
Common
DisplayName - 活动的显示名称。
ContinueOnError - 指定即使活动引发错误,自动化是否仍应继续。该字段仅支持布尔值(True,False)。默认值为False。因此,如果该字段为空并且抛出错误,则项目的执行将停止。如果该值设置为True,则无论出现任何错误,项目的执行都将继续。
注意:
如果此活动包含在Try Catch中,并且ContinueOnError属性的值为True,则在执行项目时不会捕获任何错误。
TimeoutMS - 指定在引发错误之前等待活动运行的时间量(以毫秒为单位)。默认值为30000毫秒(30秒)。
重要!
此字段中指定的时间量不包括查询结果检索的响应时间。这意味着活动的总执行时间可能大于TimeoutMS属性适用的实际查询执行时间。
输出
DataTable - 将SQL查询的输出存储在DataTable变量中。
(正文结束)
附1:关于本公众号
微信公众号名称:柴班说
欢迎转载与分享,也请注明出处。
附2:关于本文作者
微信号:chaijw
识别下面的二维码,可以与作者进行更为深入的交流。