2011-05-16 44 views
1

我有一個Informix存儲過程,它接受一個int和一個「smallint」作爲參數。我試圖從.net4 Visual Basic程序調用此SP。將Byte傳遞爲SmallInt?

據我所知,「smallint」是一個字節。不幸的是,裝載了IfxCommand.Parameters收集與一個整數和一個字節的時候,我得到了下面的堆棧跟蹤拋出的{"The parameter data type of Byte is invalid."}一個ArgumentException:

在IBM.Data.Informix.TypeMap.FromObjectType(類型數據類型Int32長度) 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.D ata.Informix.IfxCommand.ExecuteReaderObject(的CommandBehavior行爲,字符串方法) 在IBM.Data.Informix.IfxCommand.ExecuteReader(的CommandBehavior行爲) 在IBM.Data.Informix.IfxCommand.ExecuteReader()

推測我不知何故,我需要將Byte投給一個smallint,但目前Google並沒有給我任何相關的答案。

我已經嘗試使用:

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

,但在執行時,讀者我仍然得到同樣的ArgumentException。

有人能告訴我我做錯了什麼嗎?

+0

'Byte'有點像UInt8,沒有標誌,你試過'short'還是'Int16'? – Jodrell 2011-05-16 15:53:09

+0

那麼,顯然我公司的每個人都認爲Informix smallint是一個字節是錯誤的。我沒有真正考慮過這種可能性...... – Frosty840 2011-05-16 17:25:19

+0

回覆:我之前的評論,請不要將我的假想的UInt8與informix Int8混淆,這實際上更像是一個。Net Long或Int64,如果他們是正確的,請不要忘記標記或提出答案。 – Jodrell 2011-05-17 08:24:11

回答

3

一個Informix SmallInt是一個16位帶符號整數,byte是一個8位的無符號整數。一個更好的等價物將是Int16Short這是一個16位有符號整數,就像SmallInt一樣。我懷疑這會起作用。

Informix對無符號的8位整數(如.Net Byte或TSQL TinyInt)沒有模擬。

1

的Int16應該工作,因爲它具有相同的範圍比SMALLINT(-32,767至32,767)

1

Informix有4種相關的類型:BYTE和TEXT(自1990年起),BLOB和CLOB(自1996年起)。總的來說,它們都是大型物體。 BYTE類型絕對是不是的一個小整數類型。

如果語言或驅動程序修正了類型,您可以使用BYTE來認爲它是一個小整數。

但本機BYTE類型是一個大對象。它在主要數據行中需要一個56字節的描述符,然後使用其他存儲(可能是IN TABLE,可能位於blobspace中)用於實際數據存儲。

相關問題