SQLGetData, преобразование типов данных
От: Diversant  
Дата: 20.08.09 16:51
Оценка:
Здравствуйте!
Пишу клиент к СУБД MS SQL Server 2005, MS Visual C++, ODBC API.
Возникла проблема с функцией SQLGetData, а именно в плане преобразования данных. В MSDN сказано, что данные, извлечённые с сервера, будут при необходимости преобразованы в тип, указанный третьим параметром функции. В частности, если указать SQL_C_WCHAR, то строковые данные будут преобразованы в Unicode (если я правильно понял).
Строка в базе хранится в кодировке 1251. Если вызывать следющим образом:
// ...
SQLCHAR Str[255];
SQLINTEGER StrLen;
// ...
SQLGetData(hstmt, 1, SQL_C_CHAR, Str, 255, &StrLen);
// ...
printf_s("%s\n", Str);
// ...

работает нормально, Str в кодировке 1251, и нормально отображается.
Если же сделать так:
// ...
SQLWCHAR Str[255];
SQLINTEGER StrLen;
// ...
SQLGetData(hstmt, 1, SQL_C_WCHAR, Str, 255, &StrLen);
// ...
wprintf_s(L"%s\n", Str);
// ...

то строка оказывается в какой-то непонятной кодировке, и соответственно неправильно отображается.
Для проверки выводил строку в шестнадцатеричных кодах, получилось следующее (закодировано слово "Сервер"):
42143544043243544004324302041043943d
Помогите, пожалуйста, прояснить ситуацию.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.