通过Byte作为SmallInt?

时间:2011-05-16 15:48:28

标签: sql vb.net stored-procedures informix

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

据我所知,“smallint”是一个字节。不幸的是,装载了IfxCommand.Parameters集合与一个整数和一个字节的情况下,我得到抛出的一个ArgumentException {"The parameter data type of Byte is invalid."}与以下堆栈跟踪:

  

at IBM.Data.Informix.TypeMap.FromObjectType(Type dataType,Int32 length)      at IBM.Data.Informix.TypeMap.FromObjectType(Type dataType)      at IBM.Data.Informix.IfxParameter.GetTypeMap()      在IBM.Data.Informix.IfxParameter.GetOutputValue(IntPtr的语句,CNativeBuffer valueBuffer,CNativeBuffer lenIndBuffer)      at IBM.Data.Informix.IfxDataReader.Dispose(布尔处理)      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)      在IBM.Data.Informix.IfxCommand.ExecuteReader()

大概是我需要的字节我已经转换为SMALLINT,不知何故,但谷歌没有给我任何相关的答案,就在此刻。

我尝试过使用:

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

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

有人能告诉我我做错了吗?

3 个答案:

答案 0 :(得分:3)

Informix SmallInt是一个16位有符号整数,byte是一个8位无符号整数。更好的等价物是Int16Short,这是一个16位有符号整数,就像SmallInt一样。我怀疑这会奏效。

Informix没有像.Net Byte或TSQL TinyInt这样的无符号8位整数的模拟。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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