2009-12-17 9 views
55

Ho una colonna tinyint nel database e desidero convertirla in Int32 per un SqlDataReader.Come convertire "tinyint" di t-sql in intero in C#?

Come faccio?

Modifica # 1

Recentemente ho dovuto fare questo.

int a = dataReader.GetByte(dr.GetOrdinal("ColumnName")); 

#In aggiunta di rispondere

dati di SQL Server Mapping Tipo

bigint   - GetInt64 
binary   - GetBytes 
int    - GetInt32 
money   - GetDecimal 
rowversion  - GetBytes 
smallint   - GetInt16 
tinyint   - GetByte 
uniqueidentifier - GetGuid 
... 

Per maggiori informazioni visitate - SQL Server Data Type Mappings

risposta

79

Cosa vuol normalmente tornare come - byte? Se è così, basta fare un Unbox e poi un convertito:

(int)(byte) reader["column"]; 

o semplicemente lasciare che la conversione avvenga naturalmente:

int x = (byte) reader["column"]; 

o fare lo stesso con i metodi fortemente tipizzati:

int x = reader.GetByte(column); 

Regolare questo valore su sbyte o short o qualsiasi altra cosa se ho sbagliato a mappare su byte. È possibile eseguire la conversione sul lato SQL Server, ma lo farei personalmente dal lato client e mantenere l'SQL più semplice.

+4

No, sei corretto. tinyint è un byte. –

0
int RetValue; 
RetValue = (int)(byte)dt.Rows[A][B] // A = RowNo , B = 'tinyint' Column Name. 
0

Per ottenere un tinyint da una tabella di sql faccio la seguente:

retorno = Convert.ToInt32(dr.GetByte(dr.GetOrdinal("StepStatus"))); 

Dove Retorno è una variabile int.

Spero che questo ti aiuti.

2

Usa "SByte" funziona ogni volta Per gestire il problema Tiny Int

+0

'sbyte' da -128 a 127' tinyint' da 0 a 255 - potresti riconsiderare questa risposta. –