Я новичок в MS ADO и пытается понять, как установить размер на параметры команды, как созданныйКак определить размер MSADO Параметры команды
command.CreateParameter (Name, Type, Direction, Size, Value)
The documentation говорит следующее:
Размер
Дополнительно. Длительное значение, которое указывает максимальную длину для значения параметра в символах или байтов.
...
Если указать данные переменной длины типа в тип аргумента, вы должны или передать аргумент размер или установите Размер свойство объекта Parameter перед тем добавление его к коллекции параметров ; в противном случае возникает ошибка .
1.) Что нужно передавать для параметров фиксированного размера? Это «не волнует»?
я немного запутался на примере here нашел, в котором они устанавливают размер 3 для параметра adInteger со значением установлено вариантом типа VT_I2
pPrmByRoyalty->Type = adInteger;
pPrmByRoyalty->Size = 3;
pPrmByRoyalty->Direction = adParamInput;
pPrmByRoyalty->Value = vtroyal;
VT_I2 предполагает два байта. Структура tagVARIANT - 16 байт. Как они приземлились на троих? Я вижу, что значение enum для adInteger составляет три, но я подозреваю, что это просто совпадение.
Так что это немного запутанно, что нужно передавать для параметров фиксированного размера. Команда, с которой я работаю, всегда передавала sizeof (int) для adInteger и, похоже, работает. Это верно?
Теперь параметры «переменной длины»: нам дается указание документацией передать «максимальную длину .. в символах или байтах».
2.) Для adVarChar достаточно ли пропускать максимальную ширину, как определено в базе данных?
3.) Как насчет Широкие типы (например, adVarWChar)? Это символы или байты?
4.) Как насчет adVariant, который может содержать данные фиксированной или переменной длины?
5.) Имеются ли массивы когда-либо здесь? (мы не передаем их в качестве параметров, просто любопытно)
Любые ссылки или личные идеи приветствуются.
Прошло много времени с тех пор, как я использовал этот интерфейс, но я считаю, что я использовал sizeof (type) для аргументов фиксированного размера. Я подозреваю, что lib действительно выбрасывает размер в любом случае, так что вы, вероятно, могли бы поместить там какую-либо ценность. Я бы передал количество символов для строк, независимо от широких/узких. Это безопаснее, и если вы ошибаетесь, вы обнаружите усечение данных, а не необъяснимые неудачи вставки, зарытые под глубоким стеком. – Stabledog