Solved

How to set a recordset.open timeout???

Posted on 2001-06-22
11
11,921 Views
Last Modified: 2007-11-27
I have an application that generates queries dinamicaly and some of them are huge. I'd like to set a time limit for the queries.

I'm using ADO recordsets to run the queries in SQL 7. I've tried to set the CommandTimeout property for the connection i use in the Recordset.Open Method, but it didn't work.

Here is my test:

    Set con = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
   
    con.CommandTimeout = 5
    con.CursorLocation = adUseClient
    con.Open "Provider=SQLOLEDB.1;Password=*****;Persist Security Info=True;User ID=USR;Initial Catalog=DB;Data Source=Server"

    rs.Open "select * from table", con, adOpenStatic, adLockReadOnly

The query runs for several seconds, even if i have set the CommandTimeout to 5 seconds.
0
Comment
Question by:RobertoTY
11 Comments
 
LVL 10

Expert Comment

by:arana
ID: 6218977
i think the commandtimeout property is for settin a timeout before command STARTS executing (due to network traffic or slow connection)
but if the query already began to run, then the commandtimeout does not apply.
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 6219247
The Connection CommandTimeout property only affects the Connection Execute method.  So that probably explains the reason it has no effect.

One solution would be to use a Stored Prodecure and set the CommandTimeout property for the Command object.

Hope this helps,

Anthony
0
 

Author Comment

by:RobertoTY
ID: 6219839
I think that even using the connection.execute method, I face the same problem. I've made the following test and the query remains running even after the time estipulated for timeout.

    Dim con As ADODB.Connection
    Dim rs As ADODB.Recordset

    Set con = CreateObject("ADODB.Connection")
    con.CursorLocation = adUseClient
    con.Open "Provider=SQLOLEDB.1;Password=****;Persist Security Info=True;User ID=USR;Initial Catalog=DB;Data Source=SRV"
    con.CommandTimeout = 3

    Set rs = con.Execute("select * from TABLE")


I think there must be another way to set a timeout for these queries, since this property should be for something like an Idle timeout.
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 6219992
Roberto,

I could be wrong about this, but I believe the Connection CommandTimeout property needs to be specified prior to the Open.

Have you tried this and if so does it have any effect?

Suerte,
Anthony
0
 

Author Comment

by:RobertoTY
ID: 6220057
Extracted from msdn:

On a Connection object, the CommandTimeout property remains read/write after the Connection is opened.

It doesn't work either.

I discovered that recordset has a dinamic property:
Command Time Out
But it didn't work as well.

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:RobertoTY
ID: 6220078
Extracted from msdn:

On a Connection object, the CommandTimeout property remains read/write after the Connection is opened.

It doesn't work either.

I discovered that recordset has a dinamic property:
Command Time Out
But it didn't work as well.

0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 6220107
Roberto,

Yes, I know I spoke too soon:  I checked the CommandTimeout and in my case it works as advertised, placed prior to the Connection open or after.  Basically it triggers a Timeout expired (-2147217871).

I am not sure why it is not working in your case.  The only other thing I can suggest is that you try out the CommandTimeout property of the Command object.  Perhaps you will have better luck.

Anthony
0
 

Author Comment

by:RobertoTY
ID: 6220155
acperkins,

I am very curious to see the code you said that works for you. Can you send me the code sample you used? Maybe i'm doing something wrong.
0
 
LVL 75

Accepted Solution

by:
Anthony Perkins earned 50 total points
ID: 6220223
I very much doubt my code is any different to yours.  By the way I am using ADO 2.5.

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String

SQL = "SELECT ... " 'SQL statement that is guaranteed to take longer than 1 second

'Next line was originally Set cn = New ADODB.Connection
'but changed it to match your code
Set cn = CreateObject("ADODB.Connection")
With cn
   '.CommandTimeout = 1
   .ConnectionString = "Provider=SQLOLEDB.1;Password=*****;Persist Security Info=True;User ID=USR;Initial Catalog=DB;Data Source=SQLServer"
   .Open
   .CommandTimeout = 1
   Set rs = .Execute(SQL, , adCmdText)
   rs.Close
   .Close
End With

Set rs = Nothing
Set cn = Nothing
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 7139699
Hi RobertoTY,
It appears that you have forgotten this question. I will ask Community Support to close it unless you finalize it within 7 days. I will suggest to:

    Accept acperkins@devx's comment(s) as an answer.

RobertoTY, if you think your question was not answered at all or if you need help, you can simply post a new comment here.  Community Support moderators will follow up.

EXPERTS: If you disagree with that recommendation, please post an explanatory comment.
==========
DanRollins -- EE database cleanup volunteer
0
 
LVL 1

Expert Comment

by:Computer101
ID: 7173998
Comment from expert accepted as expert

Computer101
E-E Moderator
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction I needed to skip over some file processing within a For...Next loop in some old production code and wished that VB (classic) had a statement that would drop down to the end of the current iteration, bypassing the statements that were c…
Introduction While answering a recent question (http://www.experts-exchange.com/Q_27402310.html) in the VB classic zone, I wrote some VB code in the (Office) VBA environment, rather than fire up my older PC.  I didn't post completely correct code o…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

864 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now