2010-12-15 57 views
7

Je rencontre des problèmes lors de la conversion de smallint en t-sql en entier en C#.Comment convertir smallint de t-sql en nombre entier dans C#?

S'il vous plaît quelqu'un peut m'aider à contourner cela?

Mise à jour # 1

Ce que j'essaie vraiment de faire est de récupérer des données à partir d'une colonne marquée comme SMALLINT SQLServer 2005 d'un datareader dans ma demande. Je suis désolé, je n'étais pas vraiment assez clair auparavant.

+1

Quels problèmes avez-vous? Pouvez-vous donner un exemple? –

+0

Étant donné qu'il existe plusieurs approches différentes pour extraire des données de SQL Server, vous nous donnez très peu de choses à faire. – spender

Répondre

9

Vous ne savez pas exactement quels problèmes vous rencontrez car la plage de nombres dans smallint est un sous-ensemble de la plage des valeurs entières.

La conversion standard C# devrait fonctionner:

int intFromSmallInt = Convert.ToInt16(smallint); 

est l'erreur provenant d'un ORM?

+0

J'essayais de le récupérer à partir d'un objet SqlDataReader. C'est ce que j'ai fait finalement. dr.GetInt16 (dr.GetOrdinal ("ColumnName")). Merci quand même. – Tebo

8

Il y a aussi le C# DataType "court", qui est System.Int16 (alias "smallint" dans SQL Server).

Je préfère utiliser "court" juste parce que je pense qu'il semble plus frais et pour aucune autre raison.

Aussi, j'utiliser ce qui suit pour tirer vos données (si elle est annulable):

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

_ "Je préfère utiliser" court "juste parce que je pense que ça a l'air plus cool" _ une raison valable est: parce que c'est le bon type quand vous choisissez 'smallint'. Si vous utilisiez 'int' vous autoriseriez des nombres trop grands pour être insérés dans la base de données. –

+1

Je préfère le type de données "court" sur la structure "System.Int16". Int16 est une structure qui alias court. Vous allez bien l'un ou l'autre. Je ne voulais pas dire que je préférais short over int - ce serait évidemment faux. – MikeTeeVee

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

Juste moins? Peut expliquer pourquoi? – isxaker

+0

parce que la réponse est incorrecte. –