连接超时会假死,客户以为是死机了呢,怎么办,我想做一个如出现这个情况就提示,并恢复到原来的状态的东东,怎么弄,
On Error GoTo e
Set m_cn = New adodb.Connection
' m_cn.ConnectionTimeout = 25
m_cn.Provider = "sqloledb.1"
m_cn.Properties("data source").Value = Trim(servername) '服务器的名字
m_cn.Properties("initial catalog").Value = Trim(databasename) '库名
m_cn.Properties("Persist Security Info").Value = True
m_cn.Properties("User ID").Value = Trim(username) '用户名
m_cn.Properties("Password").Value = Trim(Pass) '密码
m_cn.Open
cn_open = True
Exit Function
e:
cn_open = False
Set m_cn = Nothing
On Error GoTo e
Set m_cn = New adodb.Connection
' m_cn.ConnectionTimeout = 25
m_cn.Provider = "sqloledb.1"
m_cn.Properties("data source").Value = Trim(servername) '服务器的名字
m_cn.Properties("initial catalog").Value = Trim(databasename) '库名
m_cn.Properties("Persist Security Info").Value = True
m_cn.Properties("User ID").Value = Trim(username) '用户名
m_cn.Properties("Password").Value = Trim(Pass) '密码
m_cn.Open
cn_open = True
Exit Function
e:
cn_open = False
Set m_cn = Nothing
解决方案 »
- 关于多窗口的问题,就像QQ一样,每个窗体的内容都不一样
- 用vb怎样写oracle数据库的备份与恢复。谢谢!!!
- B/S的B用什么语言好?
- 在VB中,怎么样编写只有函数的DLL,也就是一些函数集。然后在VB中又怎么调用呢?
- Shell小问题高手请进!
- 最近百度360腾讯网盘大战, 俺光捡便宜不说话, 分享收藏的电影给大家............
- VB和SQLServer连接问题
- 100分求教:关于用PRINTER对象来编写报表的问题!
- 水晶报表问题,请帮忙!急!
- maskedbox控件显示金额字段时如何右对齐?
- 关于active x dll 控件在 ASP页面中取值的问题
- Recordset.UpdateBatch和Recordset.Update有区别吗?
指示在终止尝试和产生错误前建立连接期间所等待的时间。设置和返回值设置或返回指示等待连接打开的时间的长整型值(单位为秒)。默认值为 15。说明如果由于网络拥塞或服务器负载过重导致的延迟使得必须放弃连接尝试时,请使用 Connection 对象的 ConnectionTimeout 属性。如果打开连接前所经过的时间超过 ConnectionTimeout 属性上设置的时间,将产生错误,并且 ADO 将取消该尝试。如果将该属性设置为零,ADO 将无限等待直到连接打开。请确认正在对其编写代码的提供者会支持 ConnectionTimeout 功能。连接关闭时 ConnectionTimeout 属性为读/写,而打开时其属性为只读。
该范例说明了使用 ConnectionString 属性打开 Connection 对象的不同方法。同时还使用 ConnectionTimeout 属性设置连接超时时间,并使用 State 属性检查连接的状态。该过程运行时需要 GetState 函数。Public Sub ConnectionStringX() Dim cnn1 As ADODB.Connection
Dim cnn2 As ADODB.Connection
Dim cnn3 As ADODB.Connection
Dim cnn4 As ADODB.Connection ' 不使用数据源名 (DSN) 打开连接。
Set cnn1 = New ADODB.Connection
cnn1.ConnectionString = "driver={SQL Server};" & _
"server=bigsmile;uid=sa;pwd=pwd;database=pubs"
cnn1.ConnectionTimeout = 30
cnn1.Open
' 使用 DSN 和 ODBC 标记打开连接。
Set cnn2 = New ADODB.Connection
cnn2.ConnectionString = "DSN=Pubs;UID=sa;PWD=pwd;"
cnn2.Open
' 使用 DSN 和 OLE DB 标记打开连接。
Set cnn3 = New ADODB.Connection
cnn3.ConnectionString = "Data Source=Pubs;User ID=sa;Password=pwd;"
cnn3.Open
' 使用 DSN 和单个参数而非连接字符串打开连接。
Set cnn4 = New ADODB.Connection
cnn4.Open "Pubs", "sa", "pwd"
' 显示连接的状态。
MsgBox "cnn1 state: " & GetState(cnn1.State) & vbCr & _
"cnn2 state: " & GetState(cnn2.State) & vbCr & _
"cnn3 state: " & GetState(cnn3.State) & vbCr & _
"cnn4 state: " & GetState(cnn4.State) cnn4.Close
cnn3.Close
cnn2.Close
cnn1.CloseEnd SubPublic Function GetState(intState As Integer) As String Select Case intState
Case adStateClosed
GetState = "adStateClosed"
Case adStateOpen
GetState = "adStateOpen"
End SelectEnd Function
AOD默认超时是30秒,也就是说连接有问题,VB主线程就被卡30秒,而VB只有一个线程,所以看上去程序假死了。解决的方法有以下3种1、确定你的网络环境良好(如在局域网),可以将超时值尽量设置小一些。
2、采用ADO异步连接方式,用定时器轮询或等待产生连接完成事件后,再进行后续操作。
3、多线程。VB6的单线程模型注定了它无法稳定使用线程,但是可以采用变通的手段,如ActiveX EXE来产生线程,采用定时器轮询结果。