gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:53:10 26 4
gpt4 key购买 nike

我是 MS ADO 的新手,正在尝试了解如何设置由创建的命令参数的大小

command.CreateParameter (Name, Type, Direction, Size, Value)

documentation说如下:

Size
Optional. A Long value that specifies the maximum length for the parameter value in characters or bytes.

...

If you specify a variable-length data type in the Type argument, you must either pass a Size argument or set the Size property of the Parameter object before appending it to the Parameters collection; otherwise, an error occurs.

1.) 对于固定大小的参数应该传递什么?是“不在乎”吗?

我对找到的例子有点困惑 here ,其中他们将 adInteger 参数的大小设置为 3,并将值设置为 VT_I2 类型的变体

pPrmByRoyalty->Type = adInteger;
pPrmByRoyalty->Size = 3;
pPrmByRoyalty->Direction = adParamInput;
pPrmByRoyalty->Value = vtroyal;

VT_I2 表示两个字节。 tagVARIANT 结构是 16 个字节。他们是如何降落在三个位置上的?我看到 adInteger 的枚举值恰好是 3,但我怀疑这只是巧合。

因此,为固定大小的参数传递什么有点令人困惑。与我一起工作的团队总是通过 sizeof(int) 来获取 adInteger,而且它似乎有效。对吗?

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

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

3.) Wide 类型(例如 adVarWChar)呢?是字符还是字节?

4.) adVariant 怎么样,它可以包含固定或可变长度的数据?

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

欢迎任何引用或个人见解。

最佳答案

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

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

3) 可能是字符。

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

关于c++ - 如何确定 MSADO 命令参数的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2923461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com