2010-12-15 14 views
7

Tengo problemas para convertir smallint en t-sql a entero en C#.Cómo convertir smallint de t-sql a entero en C#?

¿Alguien puede ayudarme con una forma de evitar esto?

Actualización # 1

Lo que realmente tratando de hacer es recuperar los datos de una columna marcada como smallint en sqlserver 2005 a partir de una datareader en mi aplicación. Lo siento, no lo fui suficientemente claro anteriormente.

+1

¿Qué problemas tiene? ¿Puede dar un ejemplo? –

+0

Dado que hay varios enfoques diferentes para obtener datos de SQL Server, nos está dando muy poco para continuar. – spender

Respuesta

9

No estoy seguro de qué problemas está teniendo como el rango de números en smallint es un subconjunto del rango de valores enteros.

La norma convertido en C# debería funcionar:

int intFromSmallInt = Convert.ToInt16(smallint); 

está llegando el error de un ORM?

+0

Estaba intentando recuperarlo de un objeto SqlDataReader. Esto es lo que hice finalmente. dr.GetInt16 (dr.GetOrdinal ("ColumnName")). Gracias de cualquier manera. – Tebo

8

También existe la C# Tipo de datos "corta", que es System.Int16 (también conocido como "smallint" en SQL Server).

Prefiero usar "corto" solo porque creo que se ve más fresco y por ninguna otra razón.

También, me gustaría usar lo siguiente para tirar de sus datos (si es anulable):

short? sVal = dr["ColName"] is System.DBNull ? null : (short?)(dr["ColName"]); 
+0

_ "Prefiero usar" short "solo porque creo que se ve más genial" _ una razón válida es: porque es el tipo correcto cuando eliges 'smallint'. Si usa 'int', permitiría que los números sean demasiado grandes para ser insertados en la base de datos. –

+1

Prefiero el tipo de datos "corto" sobre la estructura "System.Int16". Int16 es una estructura que alias corta. Estás bien usando cualquiera de los dos. No quise decir que prefería el corto sobre int, obviamente eso estaría mal. – MikeTeeVee

-4
int? value = (int?)(row["ColumnName"] as short?); 
+0

¿Simplemente? Puede explicar por qué? – isxaker

+0

porque la respuesta es incorrecta. –