FIX: DB-Library Fixlist for Version 4.21.00

Article ID: Q115076
Creation Date: 18-MAY-1994
Revision Date: 29-APR-1997


The information in this article applies to:

  • Microsoft SQL Server Programmer's Toolkit, version 4.2

The following is a list of fixes and other various improvements that have been made in DB-Library (DB-Lib) version 4.21.00. DB-Library version 4.21.00 is now available from your primary support provider. For more information, contact your primary support provider.

Please note that workarounds have been provided for your information only. It is not necessary to implement these workarounds if you have the updated software.

List of Problems Corrected in 4.21.00

  • FIX: dbcursor() Fails with 10030 When Updating Character Value
  • FIX: dbcursorcolinfo() Will Not Return Usertype for Column
  • FIX: Non-Serialized Execution of dbcursoropen() Hangs Client
  • FIX: GP Fault in Multi-Threaded DB-Library Program
  • FIX: Timeout Error Causes dbprocess to Be Dead
  • FIX: BCP Fails with "Not Enough Memory"
  • FIX: Memory Leak When Converting String to DBDATETIME
  • FIX: Message 4805 Returned When Calling SqlBCPExec%()
  • FIX: dbstrcpy() Copies Maximum of 32676 Bytes to Destination
  • FIX: Calling dbcursorfetch() May Trap PDBLIB.DLL
  • FIX: Unable to Login Using Named Pipes After Login Failure

Description of Problems Corrected in 4.21.00

FIX: dbcursor() Fails with 10030 When Updating Character Value

ARTICLE ID: Q105363 BUG# 9516

SYMPTOMS

When attempting to update or insert a value into a char or varchar column using cursors, the dbcursor() function fails with error 10030:

   Invalid parameter in DB-Library function reference.

CAUSE

The function dbcursor() will reject attempts to insert or update columns in SQL Server with character values that contains the following reserved SQL keywords:

- update

- where

- insert

unless the first character of the reserved keyword is the first character in the string to be inserted. For example, using the SQLCURS sample program, the following SET statements will fail:

   SET au_lname = "jack where jack"
   SET au_lname = " where jack"

However, the au_lname field can be successfully updated with the following SET statements:

   SET au_lname = "jack wh"+"ere jack"
   SET au_lname = "where jack"

WORKAROUND

If the desired character value contains reserved keywords, it may be necessary to use two concatenated strings for the value to be inserted, such that the reserved keyword is split up. If use of string concatenation is not practical, it may be necessary to use non-cursored methods to insert the new value, such as dbcmd() and dbsqlexec().

FIX: dbcursorcolinfo() Will Not Return Usertype for Column

ARTICLE ID: Q105364 BUG# 9497

SYMPTOMS

The value -1 will be always be returned when using dbcursorcolinfo() to determine the usertype of a column in a cursored result set. This behavior is not consistent with dbucoltype() which will return the value -1 for system datatypes and the user type for user-defined datatypes.

CAUSE

The DB-Library function dbcursorcolinfo() returns -1 as the usertype for any column in a cursored results set.

FIX: Non-Serialized Execution of dbcursoropen() Hangs Client

ARTICLE ID: Q105750 BUG# 9530

SYMPTOMS

When calling dbcursoropen() from multiple threads of execution within a DB-Library program, the client application appears to hang. If SQL Server is started with -T4032, repeated 'use database' commands will be seen to be submitted from a single client connection.

CAUSE

The dbcursoropen() function is not fully re-entrant. A small window of opportunity exists for problems to arise when multiple threads of the same process execute dbcursoropen() simultaneously.

WORKAROUND

Access to the following functions should be serialized with a single synchronization object:

   dbcursoropen()
   dbopen()
   dbuse()
   dbmsghandle()
   dberrhandle()

FIX: GP Fault in Multi-Threaded DB-Library Program

ARTICLE ID: Q105751 BUG# 9531

SYMPTOMS

When calling DB-Library from multiple threads of execution within a client application, a general protection fault (GP fault) occurs. This happens despite serialization of DB-Library calls involving global variables as documented in the Microsoft SQL Server "Programmer's Reference for C."

CAUSE

Interactions between threads executing several different DB-Library functions can result in a situation leading to an infinite recursion and GP fault. This is most likely to occur when multiple threads are executing dbuse() and dbcursoropen() simultaneously.

WORKAROUND

Access to the following functions should be serialized with a single synchronization object:

   dbcursoropen()
   dbopen()
   dbuse()
   dbmsghandle()
   dberrhandle()

FIX: Timeout Error Causes dbprocess to Be Dead

ARTICLE ID: Q105947 BUG# 9541

SYMPTOMS

Using DB-Library version 4.20.50, when dbsettime is used to set a timeout and a timeout error occurs, instead of getting

   SQLETIME (10024)
   SQL Server connection has timed out

or

   SQLEDDNE (10005)
   DBRPOCESS is dead or not enabled

the error is received in the error handler.

This does not happen with DB-Library version 4.20.21.

FIX: BCP Fails with "Not Enough Memory"

ARTICLE ID: Q106134 BUG# 9522

SYMPTOMS

When the SQL Server Bulk Copy Program (BCP) version 4.20.50 is being used to transfer data into SQL Server from an MS-DOS workstation, the following error may be generated:

   Operating-system error: not enough memory
   DB_LIBRARY error: unable to allocate sufficient memory

Depending on the version of MS-DOS, the operating system error might also say:

   not enough core

CAUSE

BCP is not correctly freeing up memory under certain conditions and it may run out of conventional memory.

WORKAROUND

If you encounter this situation, you can either run the BCP process from an OS/2 or Windows NT SQL Server machine. An alternate solution is to use BCP version 4.20.21.

FIX: Memory Leak When Converting String to DBDATETIME

ARTICLE ID: Q108684 BUG# 9703

SYMPTOMS

While executing multiple calls to dbconvert() that convert a character string to a DBDATETIME value, an error number 10000 message occurs:

   Unable to allocate sufficient memory

CAUSE

Conversion of character string values to DBDATETIME variables can result in gradual memory leakage within DB-Library. DB-Library memory in a Windows or medium-model MS-DOS application will be exhausted after approximately 3500 calls to dbconvert(). DB-Library applications compiled for Windows NT, large-model MS-DOS and OS/2 will be less affected as the maximum heap size is much larger in these environments.

WORKAROUND

This behavior occurs with DB-Library version 4.20.32 and later. The problem will not occur using DB-Library 4.20.00 and 4.20.21.

FIX: Message 4805 Returned When Calling SqlBCPExec%()

ARTICLE ID: Q109854 BUG# 9415 (4.2)

SYMPTOMS

When attempting to bulk-copy data from a system file into a database table with the SQL Server Development Toolkit for Visual Basic, the call to SqlBCPExec%() returns the following error message:

   Error #: 4805
   The front end tool you are using does not support the feature
   of bulk insert from host, please use the proper tools for this
   command.

This occurs even though it is possible to successfully bulk-copy from the database table to a system file.

CAUSE

The above error is returned if SqlBcpExec%() is called with the DBIN% parameter and the login record has not been properly set for bulk-copy operations.

WORKAROUND

The following function properly sets the login record:

   Results% = SqlBCPSetL%(loginRec%, 1)

For versions of VBSQL.VBX earlier than 4.21, the second parameter must be set to the DB-Library Boolean value of TRUE (1). If this parameter is set to the BASIC Boolean value of TRUE (-1), the login record will not be properly set. VBSQL version 4.21 will allow either TRUE(1) or TRUE(-1) to be used in order to enable the login record to support bulk-copy operations.

For more information, consult page 106 of the "SQL Server Programmer's Reference for Visual Basic."

FIX: dbstrcpy() Copies Maximum of 32676 Bytes to Destination

ARTICLE ID: Q112002 BUG# 8624

SYMPTOMS

When using dbstrcpy() to examine the contents of the current DB-Library (DB-

Lib) command buffer, only the first 32767 bytes are copied to the destination address.

FIX: Calling dbcursorfetch() May Trap PDBLIB.DLL

ARTICLE ID: Q112092 BUG# 9725

SYMPTOMS

Calling dbcursorfetch() heavily may generate access violation in PDBLIB.DLL.

CAUSE

Dbcursorbind() does not set the destination address in the DBCURBIND struct correctly in some very specific situation.

FIX: Unable to Login Using Named Pipes After Login Failure

ARTICLE ID: Q114120 BUG# 8961

SYMPTOMS

After a login failure occurs, further attempts to connect from the same application continue to fail. Other applications can connect to the same or other SQL Servers without a problem. You can restart Windows to clear up the problem.

If the list of currently loaded modules is examined with a utility, DBNMP3.DLL will be loaded even though there are no DB-Library (DB-Lib) applications running. Using a utility to unload the DBNMP3.DLL will also clear up the problem.

CAUSE

If a login attempt fails, DB-Library does not unload the Named Pipe Network Library (Net-Library) DBNMP3.DLL. Usually, this does not cause a problem. However, in certain instances, if the login failure occurs because of network error during the login process, the Named Pipes Net-Library can be left in a state that prevents further connections by the application that had the login failure.

The login error is not always apparent to the user. In applications that use a "make/break" style of connection to the SQL Server, the failure can occur when the application attempts to reconnect to the SQL Server in response to some user request. Thus, it appears to the user that the application has suddenly stopped working.

WORKAROUND

Restart Windows. Or, if a utility is available that can unload a module, unloading DBNMP3.DLL will usually clear up the problem. When attempting to unload DBNMP3.DLL, be sure that there are no other DB-Library or ODBC applications running that use the Named Pipes Net-Library.


Additional query words: dblib
Keywords : SSrvDB_Lib SSrvGen kbfixlist
Version : 4.2
Platform : MS-DOS OS/2 WINDOWS
Issue type : kbref
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.

©1997 Microsoft Corporation. All rights reserved. Legal Notices.