将字节作为 SmallInt 传递?

发布于 2024-11-07 09:20:43 字数 1189 浏览 0 评论 0原文

我有一个 Informix 存储过程,它接受一个 int 和一个“smallint”作为参数。我正在尝试从 .net4 Visual Basic 程序调用此 SP。

据我所知,“smallint”是一个字节。不幸的是,当使用 Integer 和 Byte 加载 IfxCommand.Parameters 集合时,我收到抛出 {"The parameter data type of Byte is invalid."} 的 ArgumentException,并具有以下堆栈跟踪:

位于 IBM.Data.Informix.TypeMap.FromObjectType(类型 dataType,Int32 长度) 在 IBM.Data.Informix.TypeMap.FromObjectType(类型 dataType) 在 IBM.Data.Informix.IfxParameter.GetTypeMap() 在IBM.Data.Informix.IfxParameter.GetOutputValue(IntPtr stmt,CNativeBuffer valueBuffer,CNativeBuffer lenIndBuffer) 在 IBM.Data.Informix.IfxDataReader.Dispose(布尔处置) 在 IBM.Data.Informix.IfxDataReader.System.IDisposable.Dispose() 在 IBM.Data.Informix.IfxCommand.ExecuteReaderObject(CommandBehavior 行为,字符串方法) 在 IBM.Data.Informix.IfxCommand.ExecuteReader(CommandBehavior 行为) 在 IBM.Data.Informix.IfxCommand.ExecuteReader()

大概我需要以某种方式将我拥有的字节转换为smallint,但谷歌目前没有给我任何相关答案。

我尝试过使用:

cmd.Parameters.Add(New IfxParameter("myVal", IBM.Data.Informix.IfxType.SmallInt)).Value = myByte

但在执行阅读器时我仍然得到相同的 ArgumentException 。

有人可以告诉我我做错了什么吗?

I have an Informix stored procedure which takes an int and a "smallint" as parameters. I'm trying to call this SP from a .net4 Visual Basic program.

As far as I know, "smallint" is a byte. Unfortunately, when loading up the IfxCommand.Parameters collection with an Integer and a Byte, I get an ArgumentException thrown of {"The parameter data type of Byte is invalid."} with the following stack trace:

at IBM.Data.Informix.TypeMap.FromObjectType(Type dataType, Int32 length)
at IBM.Data.Informix.TypeMap.FromObjectType(Type dataType)
at IBM.Data.Informix.IfxParameter.GetTypeMap()
at IBM.Data.Informix.IfxParameter.GetOutputValue(IntPtr stmt, CNativeBuffer valueBuffer, CNativeBuffer lenIndBuffer)
at IBM.Data.Informix.IfxDataReader.Dispose(Boolean disposing)
at IBM.Data.Informix.IfxDataReader.System.IDisposable.Dispose()
at IBM.Data.Informix.IfxCommand.ExecuteReaderObject(CommandBehavior behavior, String method)
at IBM.Data.Informix.IfxCommand.ExecuteReader(CommandBehavior behavior)
at IBM.Data.Informix.IfxCommand.ExecuteReader()

Presumably I need to cast the Byte I have to a smallint, somehow, but google isn't giving me any relevant answers, just at the moment.

I have tried using:

cmd.Parameters.Add(New IfxParameter("myVal", IBM.Data.Informix.IfxType.SmallInt)).Value = myByte

but I still get the same ArgumentException when executing the reader.

Can someone tell me what I'm doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

杀手六號 2024-11-14 09:20:43

Informix SmallInt 是一个 16 位有符号整数,byte 是一个 8 位无符号整数。更好的等效项是 Int16Short,它是 16 位有符号整数,就像 SmallInt 一样。我怀疑这会起作用。

Informix 没有类似于 .Net Byte 或 TSQL TinyInt 这样的无符号 8 位整数。

An Informix SmallInt is a 16 bit signed integer, byte is an 8 bit unsigned integer. A better equivalent would be Int16 or Short which is a 16 bit signed integer, just like SmallInt. I suspect that will work.

Informix has no analogue for an unsigned 8 bit integer like the .Net Byte or the TSQL TinyInt.

青春如此纠结 2024-11-14 09:20:43

Int16 应该可以工作,因为它的范围与 SmallInt 相同(-32,767 到 32,767)

Int16 should work since it has the same range than SmallInt (-32,767 to 32,767)

盛夏尉蓝 2024-11-14 09:20:43

Informix 有 4 种相关的类型:BYTE 和 TEXT(自 1990 年起)、BLOB 和 CLOB(自 1996 年起)。总的来说,它们都是大型物体。 BYTE 类型绝对不是小整数类型。

如果语言或驱动程序修复了类型,您也许可以在认为 BYTE 是小整数的语言中使用 BYTE。

但原生的 BYTE 类型是一个大对象。它需要在主数据行中有一个56字节的描述符,然后使用其他存储(可能是IN TABLE,可能是在blobspace中)来进行实际的数据存储。

Informix has 4 types that are related: BYTE and TEXT (since 1990), BLOB and CLOB (since 1996). Collectively, they are all large objects. A BYTE type is absolutely NOT a small integer type.

You may be able to use BYTE in a language that thinks it is a small integer if the language or driver fixes up the types.

But the native BYTE type is a large object. It requires a 56-byte descriptor in the main row of data, and then uses other storage (possibly IN TABLE, possibly in a blobspace) for the actual data storage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文