2011-05-16 5 views
1

저는 int와 "smallint"를 매개 변수로 취하는 Informix 저장 프로 시저가 있습니다. .net4 Visual Basic 프로그램에서이 SP를 호출하려고합니다.Byte를 SmallInt로 전달 하시겠습니까?

내가 아는 한 "smallint"는 1 바이트입니다. 정수와 바이트로 IfxCommand.Parameters 수집을로드 할 때 불행하게도, 나는 다음과 같은 스택 추적과 {"The parameter data type of Byte is invalid."}의 발생 ArgumentException이 얻을 : IBM.Data.Informix.TypeMap.FromObjectType에서

을 (유형 데이터 유형, IBM.Data.Informix.IfxParameter.GetOutputValue (IntPtr입니다 stmt에, CNativeBuffer valueBuffer, CNativeBuffer에서 IBM.Data.Informix.IfxParameter.GetTypeMap() 에서 IBM.Data.Informix.TypeMap.FromObjectType (유형 데이터 유형) 에서 INT32 길이) lenIndBuffer) (IBM.Data.Informix.IfxDataReader.Dispose (부울 처리)) at IBM.Data.Informix.IfxDataReader.System.IDisposable.Dispose() at IBM.D ata.Informix.IfxCommand.ExecuteReaderObject IBM.Data.Informix.IfxCommand.ExecuteReader에서 IBM.Data.Informix.IfxCommand.ExecuteReader (CommandBehavior를 동작) 에서 (CommandBehavior를 행동, 문자열 방법) ()

아마도 I 어떻게 든 작은 글씨체를 사용해야하는 Byte를 캐스팅 할 필요가 있지만, Google은 나에게 관련성있는 답변을 제공하지 않습니다.

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

을하지만, 독자를 실행할 때 나는 여전히 같은 경우 ArgumentException을 얻을 :

나는 사용하여 시도했다.

누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+0

'Byte'는 UInt8과 약간의 부호가 없으며'short' 또는'Int16'을 시도 했습니까? – Jodrell

+0

Informix smallint가 바이트라고 생각하는 우리 회사의 모든 사람들은 분명히 틀립니다. 나는 실제로 그 가능성을 고려하지 않았다. ... – Frosty840

+0

Re : 나의 이전의 코멘트는 informus Int8과 가상의 UInt8을 혼동하지 마라.Net Long 또는 Int64 그리고 꼭 맞는 경우 대답을 표시하거나 upvote하는 것을 잊지 마십시오. – Jodrell

답변

3

인포믹스 SmallInt는 16 비트 부호있는 정수를 갖기 때문에 INT16 작동한다은 byte는 8 비트의 부호없는 정수이다. 더 나은 동등 물은 Int16 또는 Short이고 SmallInt처럼 16 비트 부호있는 정수입니다. 나는 그것이 효과가있을 것이라고 생각한다.

Informix에는 .Net Byte 또는 TSQL TinyInt과 같은 부호없는 8 비트 정수에 대한 아날로그가 없습니다.

1

이 SMALLINT보다 동일한 범위 (32,767 -32,767)

1

Informix에는 관련 BYTE 및 TEXT (1990 년 이후), BLOB 및 CLOB (1996 년 이후)의 네 가지 유형이 있습니다. 집합 적으로, 그것들은 모두 커다란 대상입니다. 바이트 유형은 절대적으로 이 아니며 작은 정수 유형입니다.

언어 나 드라이버가 형식을 수정하면 작은 정수라고 생각하는 언어로 BYTE를 사용할 수 있습니다.

그러나 기본 BYTE 형식은 큰 개체입니다. 기본 데이터 행에 56 바이트의 디스크립터가 필요하고 실제 데이터 저장을 위해 다른 저장소 (가능하면 BLOB 영역의 IN TABLE)를 사용합니다.

관련 문제