执行SQL查询命令错误:查询超时已过期

时间:2021-04-30 11:09:30
VB程序通过Provider连SQL接数据库,20万条数据时查询没问题,47万条数据查询时报“查询超时已过期”,什么原因,在数据库里直接查询20万条用时1秒,47万条用时9秒,为什么在程序里查询报此错误

5 个解决方案

#1


cn.CommandTimeout 时间设置长一些

#2


如果CommandTimeOut设置的时间过长的话(其实设置15秒也存在此种情况),程序就会出现假死。
这和VB本身单线程有关系。
似乎没有太好的办法解决。

#3


把查询放在存储过程能解决问题吗

#4


结果都能查出来,要生成报表时,发现错误:

Private Sub ActiveReport_ReportStart()
    DataControl1.ConnectionString = gStrCnReport
End Sub

gStrCnReport的值:

Provider=SQLNCLI10.1;Integrated Security="";Persist Security Info=False;User ID=sett;Initial Catalog=L2SettleDB;Data Source=EUN;Initial File Name="";Server SPN=""

#5


你查询结果的数据量超大,已经远超 ActiveReport 设计时的考量的。
ActiveReport 的数据源中没有看到关于游标设置的参数,可以认为它是用客户端游标的。
而客户端游标是必须一次性将所有结果返回的。超量数据分配内存的消耗就足够超时了。

你应该调整设计,不能对数据量无限定。

#1


cn.CommandTimeout 时间设置长一些

#2


如果CommandTimeOut设置的时间过长的话(其实设置15秒也存在此种情况),程序就会出现假死。
这和VB本身单线程有关系。
似乎没有太好的办法解决。

#3


把查询放在存储过程能解决问题吗

#4


结果都能查出来,要生成报表时,发现错误:

Private Sub ActiveReport_ReportStart()
    DataControl1.ConnectionString = gStrCnReport
End Sub

gStrCnReport的值:

Provider=SQLNCLI10.1;Integrated Security="";Persist Security Info=False;User ID=sett;Initial Catalog=L2SettleDB;Data Source=EUN;Initial File Name="";Server SPN=""

#5


你查询结果的数据量超大,已经远超 ActiveReport 设计时的考量的。
ActiveReport 的数据源中没有看到关于游标设置的参数,可以认为它是用客户端游标的。
而客户端游标是必须一次性将所有结果返回的。超量数据分配内存的消耗就足够超时了。

你应该调整设计,不能对数据量无限定。