Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CDinamicStringAccessor & Unicode  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
добрый день. имею ms sql 2005
всегда осуществлял связь с БД посредствам CCommand<CDinamicStringAccessor>. ВСе был опрекрасно, пока не встала задача добавлять Unicode таблицу. В Таблице сделал поле nvarchar(50), и пытаюсь туда забить юникод.
Почитав мануалы, понял, что нужно юзать CDinamicStringAccessorW. Но есть одно НО. добавил в таблицу строку, к примеру "абв", если использую CDinamicStringAccessor, то строка приходит в ANSI виде, если юзаю CDinamicStringAccessorW, то уже в юникоде.
Посоветуйте, плиз, как правильно работать с юникод данными средставми oleDB?
спасибо
15 окт 09, 18:12    [7793297]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
Это вам в форум по вашему средству разработки.
15 окт 09, 18:16    [7793315]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
:)
тогда еще один вопрос. Как можно узнать, средствами MS SQL, является ли строка юникодом?
15 окт 09, 18:17    [7793319]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
HardCore_Solder
:)
тогда еще один вопрос. Как можно узнать, средствами MS SQL, является ли строка юникодом?
Какая именно строка?

Сообщение было отредактировано: 15 окт 09, 18:23
15 окт 09, 18:22    [7793350]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
iljy
Member

Откуда:
Сообщений: 8711
HardCore_Solder,

средствами MSSQL вам это узнавать не надо. CDynamicStringAccessor выдает ВСЕ поля в виде строк, AccessorW - в виде юникодных строк, и никак иначе. Есть функция GetColumnType (по крайней мере у CDynamicAccessor), она вернет вам тип. Юникодную строку преобразовать обратно к ANSI проще, чем наоборот.
15 окт 09, 18:26    [7793362]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
Любая.
нужно это как раз для того, что мне понять, что делает со строкой CDinamicStringAccessor.
поле в таблице nvarchar.
вот к примеру, если записывать в таблицу данные посредством вызовов апи функции, которая принимает указатель на буфер (void*), то в managment studio строка выглядит так:" > ; 8 B 8 : 0". В программе, уже получив этот буфер, преобразовав его в юникод, получаю читабельную строку. А все строки, котоыре я записываю через CDinamicStringAccessor "читаются" в managment studio...
А так, записывать буду любые русские и английские строки.
15 окт 09, 18:33    [7793384]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
HardCore_Solder
Любая.
нужно это как раз для того, что мне понять, что делает со строкой CDinamicStringAccessor.
поле в таблице nvarchar.
вот к примеру, если записывать в таблицу данные посредством вызовов апи функции, которая принимает указатель на буфер (void*), то в managment studio строка выглядит так:" > ; 8 B 8 : 0". В программе, уже получив этот буфер, преобразовав его в юникод, получаю читабельную строку. А все строки, котоыре я записываю через CDinamicStringAccessor "читаются" в managment studio...
А так, записывать буду любые русские и английские строки.
Таки любая? Записанная в памяти клиенnского приложения? Записанная в таблицу MSSQL? На заборе нацарапанная?
15 окт 09, 18:34    [7793390]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
iljy,

Т.е. поулчается, что этот класс преобразует данные, получаемые от БД, в тот тип, который соотвествует установленному классу (A или W)?
тогда мне не понятно, почему если забирать строку апивской функцией из БД, которая была записана Ole, она идентична ANSI строке в любом случае.
15 окт 09, 18:37    [7793397]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
Гавриленко Сергей Алексеевич,

любая, записанная в таблице ms sql 2005, имеющая тип nvarchar
15 окт 09, 18:37    [7793403]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
iljy
Member

Откуда:
Сообщений: 8711
HardCore_Solder,

вы чего-то странного хотите. StringAccessor преобразует данные в строки, все, которые может. И обратно при записи. Соответственно если вы задаете ему ASCII-строку - он ее корректно преобразует в юникод при записи в поле nvarchar. А вот при чтении могут быть проблемы - не всегда можно юникод корректно преобразовать. Соответственно при использовании AccessorW у вас все хорошо при чтении, но возможны проблемы при записи. А узнать тип поля в рекордсете на стороне клиента - GetColumnType. MSDN почитайте уже.
15 окт 09, 18:40    [7793418]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
HardCore_Solder
Гавриленко Сергей Алексеевич,

любая, записанная в таблице ms sql 2005, имеющая тип nvarchar
nvarchar - это всегда юникод.
15 окт 09, 18:42    [7793429]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
iljy
Member

Откуда:
Сообщений: 8711
HardCore_Solder
iljy,

Т.е. поулчается, что этот класс преобразует данные, получаемые от БД, в тот тип, который соотвествует установленному классу (A или W)?
тогда мне не понятно, почему если забирать строку апивской функцией из БД, которая была записана Ole, она идентична ANSI строке в любом случае.


... не понял. Какой функцией вы что откуда забираете? И вообще - на фига фам понадобился StringAccessor? Чем обычный CDynamicAccessor не устроил?
15 окт 09, 18:43    [7793432]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
ладно, спасибо
Как найду решение, отпишусь. Может что не так объясняю
15 окт 09, 18:44    [7793437]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
iljy
Member

Откуда:
Сообщений: 8711
HardCore_Solder,

бог в помощь конечно, но на мой взгляд вы сами себе изобретательно придумываете трудности.
15 окт 09, 18:52    [7793469]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
трудность я не придумываю, как мне кажется, я не понимаю как записать unicode строку в БД, ипсользуя accessor
15 окт 09, 18:57    [7793488]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
iljy
Member

Откуда:
Сообщений: 8711
HardCore_Solder,

если соответствующее поле имеет тип nchar - у вас ЛЮБОЙ динамический аксессор запишет туда юникод. Если тип char - строка будет из юникода преобразована, возможно с потерей данных. Вы можете привести код и описать возникаающую проблему? А придумывание трудностей на мой взгляд состоит в принципе в использовании StringAccessor на таблицах с разнородными текстовыми полями.
15 окт 09, 19:03    [7793510]     Ответить | Цитировать Сообщить модератору
 Re: CDinamicStringAccessor & Unicode  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
вообщем нашли проблему, и была она связана ну совсем не с DinamicAccessor:)

в функции SqlBindCol есть параметр, принимающий тип столбца. Там стоял флаг SQL_C_DEFAULT. пока не поставили SQL_NVARCHAR. После этого все встало на свои места.

Всем спасибо за помощь!
16 окт 09, 12:40    [7796146]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить