2008-10-08 5 views
5

Lors de l'accès à un objet dans un DataTable récupéré à partir d'une base de données, existe-t-il des raisons de ne pas convertir l'objet en votre type souhaité ou y a-t-il des raisons d'utiliser convert? Je sais que la règle est lancée lorsque nous connaissons le type de données avec lequel nous travaillons et que nous convertissons lorsque nous essayons de changer le type de données pour qu'il ne le soit pas. En supposant que nous sachions quel type de données est stocké dans une colonne, la conversion semble appropriée, mais existe-t-il des problèmes de type DB qui nous empêchent de nous en remettre?Convertir ou convertir lors de la récupération des données d'une base de données?

Répondre

4

Je lancerais toujours, pour les raisons que vous dites. Les gotchas Je suis au courant que vous devez gérer sont les suivants:

  1. Vous devez évidemment être capable de gérer DBNulls (par exemple en testant avec Convert.IsDBNull)

  2. Dans le cas de ExecuteScalar I crois que vous devez vérifier null ainsi que DBNull.

  3. Les serveurs SQL @@ IDENTITY et SCOPE_IDENTITY retournent des valeurs numériques (décimales) même pour les colonnes déclarées comme INT. Dans ce cas, vous pouvez lancer deux fois la valeur "(int) (décimale)" ou la gérer dans le code T-SQL, par exemple: .

    INSERT INTO MyTable ... SELECT AutoIdColumn DE MyTable OU AutoIdColumn = SCOPE_IDENTITY()

ou

INSERT INTO MyTable ... 
SELECT CAST(SCOPE_IDENTITY() AS INT) 
0

Les deux CAST et CONVERT sont utilisés explicitement pour convertir une expression d'un type de données à un autre. Toutefois, avec CONVERT, vous pouvez également spécifier le format au format.

Syntaxe CAST:

CAST (expression AS data_type [ (length) ]) 

Syntaxe CONVERT:

CONVERT (data_type [ (length) ] , expression [ , style ]) 
0

Lorsque retreiving de SGBDR vous devez laisser le pilote de base de la poignée entre marshalling type natif et demandé. CAST est sanctionné par des normes SQL et fonctionne sur le plus grand nombre de plates-formes RDBMS.

CONVERT est disponible sur moins de plateformes.

Si vous avez des concentations multi-plates-formes, CONVERT ne doit être utilisé que pour des cas spéciaux tels que le formatage personnalisé qui ne peut pas être effectué avec CAST.

Questions connexes