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

C++ 如何确定MSADO命令参数的大小,c++,visual-c++,parameters,ado,C++,Visual C++,Parameters,Ado,我不熟悉MS ADO,并试图了解如何设置由创建的命令参数的大小 command.CreateParameter (Name, Type, Direction, Size, Value) 报告说: 大小可选。一个很长的值 指定文件的最大长度 以字符或字符表示的参数值 字节 如果指定可变长度的数据 在类型参数中键入,必须 传递大小参数或设置 参数对象的大小属性 在将其附加到参数之前 收集否则,将导致错误 发生 1.)对于固定尺寸参数,一次应通过哪些步骤?是“不在乎”吗 我对发现的示例感到有点困惑

我不熟悉MS ADO,并试图了解如何设置由创建的命令参数的大小

command.CreateParameter (Name, Type, Direction, Size, Value)
报告说:

大小
可选。一个很长的值 指定文件的最大长度 以字符或字符表示的参数值 字节

如果指定可变长度的数据 在类型参数中键入,必须 传递大小参数或设置 参数对象的大小属性 在将其附加到参数之前 收集否则,将导致错误 发生

1.)对于固定尺寸参数,一次应通过哪些步骤?是“不在乎”吗

我对发现的示例感到有点困惑,在该示例中,他们将adInteger参数的大小设置为3,值设置为VT_I2类型的变量

pPrmByRoyalty->Type = adInteger;
pPrmByRoyalty->Size = 3;
pPrmByRoyalty->Direction = adParamInput;
pPrmByRoyalty->Value = vtroyal;
VT_I2表示两个字节。tagVARIANT结构是16个字节。他们是怎么在三号上着陆的?我看到adInteger的枚举值正好是3,但我怀疑这只是巧合

因此,对于固定大小的参数,传递什么有点混乱。与我一起工作的团队总是通过了adInteger的sizeof(int),而且似乎很有效。对吗

现在,对于“可变长度”参数:文档指示我们传递“最大长度..以字符或字节为单位”

2.)对于adVarChar,传递数据库中定义的最大宽度是否足够

3.)宽类型(例如adVarWChar)如何?是字符还是字节

4.)adVariant如何,它可以包含固定长度或可变长度的数据

5.)阵列曾经在这里发挥作用吗?(我们不把它们作为参数传递,只是好奇而已)

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

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

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

3) 可能是角色


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

我已经很久没有使用此接口了,但我相信我对固定大小的参数使用了sizeof(type)。我怀疑lib实际上丢弃了大小,因此您可能可以在那里输入任何值。我会传递字符串的字符数,不管宽/窄。它更安全,如果您错了,您将通过数据截断而不是隐藏在深层堆栈下的无法解释的插入失败来发现。