Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / OLEDB+МSS200+unicode проблема / 4 сообщений из 4, страница 1 из 1
18.05.2003, 19:13
    #32162525
EvgenyV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OLEDB+МSS200+unicode проблема
Привет всем, народ!

-Win2K
-MSSQL2000
-VC++6

Я столкнулся cо следующей проблемкой: когда обращаюсь к полю, определенному как nchar/nvarchar, получаю обрезанные данные. Это происходит только тогда, когда данные имеют размер больше половины размера ДБ колонки. Ниже привожу код:
колонка "descr", размер 10, тип nchar, данные, которые там сидят "аааааааааа"
...
CCommand<CDynamicAccessor> cmd;
CDBPropSet dbPropSet(DBPROPSET_ROWSET);
dbPropSet.AddProperty(DBPROP_SERVERCURSOR, false);
dbPropSet.AddProperty(DBPROP_CLIENTCURSOR, true);
dbPropSet.AddProperty(DBPROP_CANSCROLLBACKWARDS, true);
CDataSource ds;
ds.OpenFromInitializationString("my conn string");
apSession = SessionPtr(new CSession);
apSession->Open(ds));
cmd.Open(*apSession, "select descr from mytable where id = 1", &dbPropSet, NULL, DBGUID_DBSQL);
VARIANT * resultValue;
DBTYPE dbType;
cmd.GetColumnType(1UL, &dbType);
if(dbType == DBTYPE_WSTR)
{
V_VT(resultValue) = VT_BSTR;
V_BSTR(resultValue) = ::SysAllocString(reinterpret_cast<WCHAR*> (cmd.GetValue(1UL)));
}
resultValue - "аааа"
Где тут собака зарыта, народ?!!! Почему ОЛЕ "берет" длинну поля, делит на 2 и возвращает только половину? Где я ошибаюсь?

Помогите, народ!!!!
Заранее благодарен,
Евгений.
evgenyv@yahoo.com
...
Рейтинг: 0 / 0
19.05.2003, 09:31
    #32162648
YuriAM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OLEDB+МSS200+unicode проблема
Если всегда получаешь только 4 байта, то есть сомнения, что вместо области чтения данных поставляешь адрес этой области( 4 байта) и там же получаешь только эти 4 символа.
Посмотри внимательно. Может найдешь сам.
...
Рейтинг: 0 / 0
19.05.2003, 09:46
    #32162658
EvgenyV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OLEDB+МSS200+unicode проблема
Нет, не всегда 4 байта. В том то и дело. Могу получить и 100, если поле в ДБ определено размером 200 символов, а если поле определено как 1, то этот символ не получаю voobще. Возвращается пустой стринг и статус комманда отличен от DBSTATUS_S_OK. Он равен = DBSTATUS_S_TRUNCATED.
Спасибо.
...
Рейтинг: 0 / 0
19.05.2003, 15:35
    #32163156
EvgenyV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OLEDB+МSS200+unicode проблема
Народ!
Я нашел решение.
Кому интерсно, вот тут собака порылась!
MSDN ID=Q238539
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / OLEDB+МSS200+unicode проблема / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]