如何确定MSADO命令参数的大小

时间:2010-05-27 17:41:03

标签: c++ visual-c++ parameters ado

我是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.。)阵列是否在这里发挥作用? (我们不会将它们作为参数传递,只是好奇)

欢迎任何参考或个人见解。

1 个答案:

答案 0 :(得分:2)

1)大小对于固定长度参数是可选的,因此您可以传递vtMissing(comutil.h)。顺便说一下,我的adInteger大小(连接到SQL Server)是4,类型是VT_I4,VT_I2是大小2和adSmallInt。

2)我想这应该有效。提醒采用数据库中定义的参数的最大宽度,而不是与之比较的任何表列。大小可能用于分配,因此您必须确保大小足够大,以便可以填充的任何值都适合。

3)可能是人物。

关于4和5,我不知道在哪种情况下,人们希望将adVariant或数组传递给数据库引擎。