ID: Q126264
The information in this article applies to:
When trying to update a CLongBinary field using the ODBC SQL Server driver, the data is truncated.
The RFX_LongBinary code tries to transfer the CLongBinary field data in 32K byte chunks, but the default maximum amount of data the SQL Server ODBC driver version can transfer at a time is 4K bytes. This only applies to driver manager (ODBC.DLL), cursor library (ODBCCURS.DLL), and SQL server driver (SQLSRVR.DLL) that came with Visual C++ version 1.50 or 1.51.
The newer ODBC SQL Server driver doesn't have a limitation on the transfer size. It is included with Visual C++ version 1.52, with the ODBC SDK version 2.1, and with the ODBC Driver pack version 2.0.
If you aren't using the newest SQL Server driver, you can work around the problem by using the ODBC API SQLSetStmtOptions() function to set the maximum amount of data that the SQL Server driver can transfer at one time. Set the value to something larger than 32K bytes.
This behavior is by design.
The MFC CRecordset class has a virtual function OnSetOptions() that is a good place to make the SQLSetStmtOptions() call. In that call, specify SQL_MAX_LENGTH as the second parameter and a value of 32K bytes or greater as the third parameter. The override of the OnSetOptions() function should look something like this:
void CMyRecordset::OnSetOptions(HSTMT hstmt)
{
SQLSetStmtOption(hstmt,SQL_MAX_LENGTH,(UDWORD)100000);
CRecordset::OnSetOptions(hstmt);
}
For more information about other problems with CLongBinary fields, please see the following article in the Microsoft Knowledge Base:
ARTICLE-ID: Q118758
TITLE : BUG: & FIX: Problems that Occur When Using CLongBinary Field
Additional reference words: 1.50 1.51 2.5 2.51 2.52
KBCategory: kbprg kbprb
KBSubcategory: MfcDatabase
Keywords : kb16bitonly kbDatabase kbMFC kbODBC kbVC
Version : 1.50 1.51
Platform : WINDOWS
Last Reviewed: July 20, 1997