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