QODBC: fix converted string values empty SQLServer 2012
SQL Server 2012 Native Client (version 11.0.2100.60) or later introduced a change in the behavior of the SQLGetData method when converted string values are involved. In older version a (sometimes wrong) size was returned. Now always SQL_NO_TOTAL is returned which signals to read as much data as available. SQL_NO_TOTAL was handled like SQL_NULL_DATA in the code before which indicates a NULL value so the returned string was empty. See link for more info: http://msdn.microsoft.com/en-us/library/jj219209.aspx Change-Id: Ia0d2296caf593890b301ee1848d1bf3eb8d7b6fe Reviewed-by: Mark Brand <mabrand@mabrand.nl>bb10
parent
190f64aab3
commit
a44749855e
|
|
@ -373,10 +373,20 @@ static QString qGetStringData(SQLHANDLE hStmt, int column, int colSize, bool uni
|
|||
colSize*sizeof(SQLTCHAR),
|
||||
&lengthIndicator);
|
||||
if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
|
||||
if (lengthIndicator == SQL_NULL_DATA || lengthIndicator == SQL_NO_TOTAL) {
|
||||
if (lengthIndicator == SQL_NULL_DATA) {
|
||||
fieldVal.clear();
|
||||
break;
|
||||
}
|
||||
// starting with ODBC Native Client 2012, SQL_NO_TOTAL is returned
|
||||
// instead of the length (which sometimes was wrong in older versions)
|
||||
// see link for more info: http://msdn.microsoft.com/en-us/library/jj219209.aspx
|
||||
// if length indicator equals SQL_NO_TOTAL, indicating that
|
||||
// more data can be fetched, but size not known, collect data
|
||||
// and fetch next block
|
||||
if (lengthIndicator == SQL_NO_TOTAL) {
|
||||
fieldVal += fromSQLTCHAR(buf, colSize);
|
||||
continue;
|
||||
}
|
||||
// if SQL_SUCCESS_WITH_INFO is returned, indicating that
|
||||
// more data can be fetched, the length indicator does NOT
|
||||
// contain the number of bytes returned - it contains the
|
||||
|
|
|
|||
Loading…
Reference in New Issue