Frage

Wenn Sie ein Objekt in einer Datentabelle aus einer Datenbank abgerufen Zugriff, gibt es Gründe, nicht das Objekt in der gewünschten Art zu werfen, oder gibt es Gründe konvertieren zu bedienen? Ich weiß, dass die Regel werfen, wenn wir wissen, welche Datentypen arbeiten wir mit, und konvertieren, wenn Sie versuchen, den Datentyp, um etwas zu ändern, ist es nicht. Vorausgesetzt, wir wissen, was Datentyp in einer Spalte gespeichert ist, scheint Guss angemessen, aber gibt es DB-Typ Probleme, die wir meinen, können auf diese nicht verlassen?

War es hilfreich?

Lösung

Ich würde immer werfen, für die Gründe, die Sie angeben. Die gotchas Ich bin mir dessen bewusst, dass Sie brauchen zu handhaben sind:

  1. Sie müssen sich offensichtlich in der Lage DBNulls zu behandeln (zum Beispiel durch mit Convert.IsDBNull Prüfung)

  2. Im Fall von ExecuteScalar Ich glaube, Sie für null überprüfen müssen sowie DBNull.

  3. SQL Server @@ IDENTITY und SCOPE_IDENTITY Funktionen geben numerische (dezimal) auch für Spalten, die als INT deklariert sind. In diesem Fall können Sie werfen zweimal „(int) (dezimal) Wert“ oder im T-SQL-Code, z Griff .: .

    INSERT INTO MyTable ... SELECT AutoIdColumn FROM MyTable WHERE AutoIdColumn = SCOPE_IDENTITY ()

oder

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

Andere Tipps

Sowohl CAST und CONVERT verwendet werden, um explizit einen Ausdruck von einem Datentyp in einen anderen zu konvertieren. Doch mit CONVERT können Sie das Format Stil als auch angeben.

Syntax für CAST:

CAST ( expression AS data_type [ (length ) ])

Syntax für CONVERT:

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

Wenn Sie von RDBMS retreiving sollten Sie die Datenbanktreiber lassen Griff zwischen nativen und angeforderten Typ Rangier.

CAST wird von SQL-Standards sanktioniert und arbeitet auf der höchsten Anzahl von RDBMS-Plattformen.

CONVERT ist verfügbar auf weniger Plattformen.

Wenn Sie Multi-Plattform conciderations CONVERT haben sollte nur für Sonderfälle wie benutzerdefinierte Formatierung verwendet werden, die nicht mit CAST erreicht werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top