Передать байт как SmallInt? - PullRequest
1 голос
/ 16 мая 2011

У меня есть хранимая процедура Informix, которая принимает int и "smallint" в качестве параметров.Я пытаюсь вызвать этот SP из программы Visual Basic .net4.

Насколько я знаю, "smallint" является байтом.К сожалению, при загрузке коллекции IfxCommand.Parameters с помощью Integer и байта я получаю исключение ArgumentException равное {"The parameter data type of Byte is invalid."} со следующей трассировкой стека:

в IBM.Data.Informix.TypeMap.FromObjectType (тип dataType, длина Int32) в IBM.Data.Informix.TypeMap.FromObjectType (тип dataType) в IBM.Data.Informix.IfxParameter.GetTypeMap () в IBM.Data.Informix.IfxParameter.GetOtfferbaseUp (, CNativeBuffer lenIndBuffer) в IBM.Data.Informix.IfxDataReader.Dispose (логическое удаление) в IBM.Data.Informix.IfxDataReader.System.IDisposable.Dispose () в IBM.Data.Informix.IfxCommand.ExecuteReaderObjecte) в IBM.Data.Informix.IfxCommand.ExecuteReader (поведение CommandBehavior) в IBM.Data.Informix.IfxCommand.ExecuteReader ()

Предположительно, мне нужно преобразовать нужный мне байт в smallint, каким-то образом, но Google не дает мне соответствующих ответов, только на данный момент.

У меня естьрид, используя:

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

но я все равно получаю то же ArgumentException при выполнении чтения.

Может кто-нибудь сказать мне, что я делаю неправильно?

Ответы [ 3 ]

3 голосов
/ 16 мая 2011

Informix SmallInt - 16-разрядное целое число со знаком, byte - 8-разрядное целое число без знака. Лучшим эквивалентом будет Int16 или Short, представляющее собой 16-битное целое число со знаком, как SmallInt. Я подозреваю, что это сработает.

Informix не имеет аналогов для 8-разрядного целого без знака, например .Net Byte или TSQL TinyInt.

1 голос
/ 17 мая 2011

Informix имеет 4 связанных типа: BYTE и TEXT (с 1990 года), BLOB и CLOB (с 1996 года).Все вместе они являются большими объектами.Тип BYTE - это абсолютно NOT маленький целочисленный тип.

Вы можете использовать BYTE на языке, который считает, что это маленькое целое число, если язык или драйвер исправляет типы.

Но собственный тип BYTE - это большой объект.Для этого требуется 56-байтовый дескриптор в основной строке данных, а затем используется другое хранилище (возможно, IN TABLE, возможно, в пространстве больших объектов) для фактического хранения данных.

1 голос
/ 16 мая 2011

Int16 должен работать, поскольку он имеет тот же диапазон, что и SmallInt (от -32 767 до 32 767)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...