FIX: Win16 DBLIB Does Not Restrict Packet Size to 512 for SPX (152130)
The information in this article applies to:
This article was previously published under Q152130 SYMPTOMS
A DB-Library application for Windows may return the following error when
executing a query that returns a large number of rows under IPX/SPX:
Possible Network Error; Read From SQL Server Failed.
This command did not return data, and it did not return any rows
DB-Library Process Dead - Connection Broken
When this occurs, the connection will be lost, and closing the application
may cause Windows to stop responding.
CAUSE
The Win16 DB-Library DLL (W3dblib.dll or Msdblib3.dll) does not correctly
detect the IPX/SPX Net-Library for Windows. As a result, it does not
automatically restrict the TDS packet size to 512 bytes. This causes DB-
Library to use the default "Network Packet Size" setting on the server
side, which is 4096 bytes by default. Due to the architecture limit in
DBMSSPX3.DLL, a larger TDS buffer size is not supported. Attempting to use
a larger TDS packet size can cause unexpected errors or make the system
otherwise unstable.
WORKAROUND
You can work around this problem either by forcing the packet size to 512
through the DBSETLPACKET() DBLIB function or by reducing the default
"Network Packet Size" on the server side to 512 bytes.
STATUS
Microsoft has confirmed this to be a problem in SQL Server version 6.5.
This problem has been corrected in the latest U.S. Service Pack for SQL
Server version 6.5. For information on obtaining the Service Pack, query on
the following word in the Microsoft Knowledge Base (without the spaces):
S E R V P A C K
MORE INFORMATION
You can call the DBLIB function, DBSETLVERSION(), to enable the 6.x
specific behavior for the application. This will cause the DBLIB to set the
TDS packet size according to the "Network Packet Size" setting on the
server side, unless you explicitly set the packet size using
DBSETLPACKET(). As the default "Network Packet Size" setting is 4096, the
DBLIB application will try to use 4096 as the packet size because it cannot
correctly detect the SPX Net-Library used. This causes the problem.
The earlier versions of DBLIB for Windows do not set the packet size
according to the server-side setting, and 512 is used by default.
Therefore, you may not encounter this problem with earlier versions of
DBLIB. However, if you explicitly call DBSETLPACKET() to set the packet
size larger than 512 bytes, you will encounter this problem even with
earlier versions of DBLIB.
Modification Type: | Major | Last Reviewed: | 10/3/2003 |
---|
Keywords: | kbBug kbfix KB152130 |
---|
|