我是MS ADO的新手,并试图了解如何设置
创建的命令参数的大小command.CreateParameter (Name, Type, Direction, Size, Value)
documentation说明如下:
尺寸
可选。很长的价值 指定的最大长度 参数值以字符或 字节。
...
如果指定可变长度数据 键入Type参数,必须输入 要么传递一个Size参数,要么设置 Parameter对象的Size属性 在将其附加到参数之前 采集;否则,出错 发生。
1。)固定大小参数应该通过什么?这是“不在乎”吗?
我对找到here的示例感到有点困惑,其中他们将adInteger参数的大小设置为3,其中Value设置为VT_I2类型的变体
pPrmByRoyalty->Type = adInteger;
pPrmByRoyalty->Size = 3;
pPrmByRoyalty->Direction = adParamInput;
pPrmByRoyalty->Value = vtroyal;
VT_I2意味着两个字节。 tagVARIANT结构是16个字节。他们是如何落在三个上的?我看到adInteger的枚举值恰好是三,但我怀疑这只是一个巧合。
因此,对于固定大小的参数传递的内容有点令人困惑。我正在使用的团队总是为adInteger传递sizeof(int),它似乎有效。这是对的吗?
现在,对于“可变长度”参数:文档指示我们传递“最大长度..以字符或字节为单位”。
2.。)对于adVarChar,是否足以传递数据库中定义的最大宽度?
3.。)宽类型(例如adVarWChar)怎么样?是字符还是字节?
4.。)adVariant如何包含固定或可变长度数据?
5.。)阵列是否在这里发挥作用? (我们不会将它们作为参数传递,只是好奇)
欢迎任何参考或个人见解。
答案 0 :(得分:2)
1)大小对于固定长度参数是可选的,因此您可以传递vtMissing(comutil.h)。顺便说一下,我的adInteger大小(连接到SQL Server)是4,类型是VT_I4,VT_I2是大小2和adSmallInt。
2)我想这应该有效。提醒采用数据库中定义的参数的最大宽度,而不是与之比较的任何表列。大小可能用于分配,因此您必须确保大小足够大,以便可以填充的任何值都适合。
3)可能是人物。
关于4和5,我不知道在哪种情况下,人们希望将adVariant或数组传递给数据库引擎。