标题:VB+SQL查询连接超时已过期
只看楼主
hudong
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-3-7
结帖率:100%
已结贴  问题点数:20 回复次数:3 
VB+SQL查询连接超时已过期
现象1:
    SQL  Server   企业管理器里,打开sql   查询分析器,输入select   *   from   View1   where   XX   可以执行成功,只是有时查询时间需5-6分钟,有时只需要5—6秒,这时一般软件里查询已很快。服务器和客户端都是相同情况。
现象2:
    SQL Server企业管理器,点击"视图",打开视图,返回所有行时,出现错误提示:[Microsoft][ODBC SQL Server Driver]超时已过期.   
现象3:
     原来出现查询超时在企业管理器里执行一次收缩数据库,就能解决问题,但我把系统恢复一次,做了磁盘清理,分离数据库再附加数据库后之后好像收缩数据也不一定能解决查询超时问题,并且查询数据和数据库日志大小好像没有直接联系。因为设置自动收缩事物日志,执行成功后有时事物日志只有几百K也会超时,有时几十M也不会超时。和电脑重新启动也没有太大关系,有时候重新启动电脑就解决了,有时又不能解决超时。
现象4:
    当在查询分析器里查询数据有时很久没有查出结果时,点击取消执行查询会返回查询出的结果,只是结果有一部分还没有查询出来。
现象5:
    整个数据库很多表和视图,大部分视图和表查询都正常,不会出现超时现象,也排除数据记录太多问题,因为记录只有1万多条,其它表有几万条记录的都不会超时。在其它很多服务器)测试(包括远程测试)相同数据库都正常,也排除网络问题和数据库本身问题。
现象6:
    当超时,如果能将查询结果记录锁定在几条之类,就可以查询出来,查询几十条以上就可能超时了。
现象7:
    库连接一直都正常,就是在查询记录模块出错
尝试的解决办法:
    1. 在企业管理器里,SQL查询分析器里,软件程序里尝试更改超时连接时间均没有解决。
    2. 尝试更改事物日志和数据增长百分比和指定大小均没有解决。
    3. 检查数据库错误没有发现错误。
    4. 断开所有SQL其它连接事物和退出无关程序均无法解决。
    5. 网上查询很多解决办法均没有解决。
望高手给出详细解决方案:

附程序连接模块:

Public Function OpenCn(ByVal Cip As String, ByVal Tz As String, ByVal Users As String, ByVal Pw As String) As Boolean '连接模块 填写数据库等信息
Dim mag As String
On Error GoTo strerrmag
Set conn = New ADODB.Connection
conn.ConnectionTimeout = 0
conn.Provider = "sqloledb"
conn.Properties("data source").Value = Cip  '服务器的名字
conn.Properties("initial catalog").Value = Tz  '库名
If Cip = "" Or Cip = "127.0.0.1" Then conn.Properties("integrated security").Value = "SSPI"
'conn.Properties("integrated security").Value = "SSPI"      '登陆类型,若不要此语句在某些机器以windowns身份无法本地登录。
conn.Properties("user id").Value = Users 'SQL库名
conn.Properties("password").Value = Pw '密码
conn.Open
OpenCn = True
If conn.State = 1 Then addFlag = True
Exit Function
strerrmag:
     addFlag = False
     OpenCn = False
     'Exit Function      '连接错误消息
End Function

Public Function openRs(ByVal strsql As String) As Boolean      '连接数据库记录集
Dim mag As String
Dim rpy As Boolean
On Error GoTo strerrmag
     Set rs = New ADODB.Recordset
     If addFlag = False Then rpy = True
     With rs
     .Properties("Command Time   Out") = 300  ‘若按网上说加上这句提示“实时错误3265”,在对用所需名称或序数集合中,未找到项目
     .ActiveConnection = conn
     .CursorLocation = adUseClient
     .CursorType = adOpenKeyset
     .LockType = adLockOptimistic
     .Open strsql   ‘通过调试,连接超时出错就在这里
    End With
     addFlag = True
     openRs = True
     'End        '将记录集给rs
     Exit Function
strerrmag:
     openRs = False
     'Exit Function '连接错误消息
End Function
搜索更多相关主题的帖子: 查询 过期 超时 SQL 
2010-03-23 20:55
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
得分:20 
[数据库方面]
1.是否发生死锁?
2.分配的内存和硬盘空间是否足够?
3.尝试修复数据库,重建索引,有可能是索引或数据库文件本身出了问题
[代码方面]
1."Command Time   Out"空格好像太多.不过我基本不用Properties集体来设置这些属性
2.CursorLocation = adUseClient,试试改成adUseServer
2010-03-23 23:57
hudong
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-3-7
得分:0 
感谢版主解答,不过问题依然无法解决。
程序在很多服务器上测试没有发现问题。
重建表索引也已经试过没有效。
因为单独服务器,CPU inter7300+,硬盘250G,内存2G,数据库内存分配设置自动,应该都没有问题。
因为查询并不是一直执行不了,而是大多数时候无法查询而报错。
数据库并没有被死锁住。
发现报错时如果查询起始时间改为同一天就可以查询当天数据,如果跨时间段查询就不行。
2010-03-24 12:49
hudong
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-3-7
得分:0 
问题解决了,不过原因都不是网上各位所说,而是数据库一个日期类型转换问题,数据库日期字段属于datetime,需要转换后才能与日期值进行比较,有些电脑可能日期设置问题,就不能进行查询。
2010-03-26 16:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-300334-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.133549 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved