BUG: Query Times Out Too Early Under Multiprotocol Net-Library

Last reviewed: May 5, 1997
Article ID: Q152062
The information in this article applies to:
  • Microsoft SQL Server, versions 6.0 and 6.5

SYMPTOMS

When you use DBMSRPC3.DLL to connect to SQL Server, a Win16 application can prematurely time out the query. For example, if the query timeout is set to 55 seconds using dbsettime() in a DB-Library application, the query will timeout within 10 seconds. With settings under 30 seconds, the query timeout setting works fine.

CAUSE

The timeout mechanism in ConnectionRead() of the client-side Net-Library DBMSRPC3.DLL incorrectly calculates the timeout setting under certain situations.

WORKAROUND

There are two workarounds:

1) Use non-blocking calls to execute queries. For example, in DBLIB, instead of calling dbsqlexec(), you can call dbsqlsend() to send the query first, and then call dbdataready() repeatedly until it returns true, and finally call dbsqlok(). You'll need to implement your own timeout mechanism to break out of the dbdataready() loop. For ODBC applications, you can avoid this by using asynchronous mode. For more information, please consult the Programmer's Reference for C.

-Or-

2) Set the timeout value to less than 30 seconds, and use a counter to control the accumulated timeout value until it is equal to the ideal setting. For instance, in DBLIB, use dbsettime() to set a value less than 30 seconds, and code your error handler to always return INT_CONTINUE on the timeout error until the total amount of time waited is equal to your ideal setting. As an example, if you want to set the query timeout to 120, you can set the initial timeout value to 30 seconds, and have the error handler to return INT_CONTINUE until the timeout error occurs consecutively for 4 times.

STATUS

Microsoft has confirmed this to be a problem in Microsoft SQL Server versions 6.5 and 6.0. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.

MORE INFORMATION

This is a Net-Library specific issue. It occurs when the application API (DBLIB or ODBC) calls the Net-Library API function ConnectionRead() to read results from the server. The timeout value parameter is correctly passed to ConnectionRead(), but the function does not wait long enough before timing out. This problem can affect both DBLIB and ODBC applications.


Additional query words:
Keywords : kbbug6.00 kbbug6.50
Version : 6.0 6.5
Platform : WINDOWS


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: May 5, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.