データベースから取得した DataTable 内のオブジェクトにアクセスする場合、オブジェクトを目的の型にキャストしない理由、または変換を使用する理由はありますか? 使用しているデータ型がわかっている場合はルールがキャストされ、データ型をそうでないものに変更しようとすると変換されます。列に格納されているデータ型がわかっていると仮定すると、キャストは適切に思えますが、これに依存できないことを意味する DB タイプの問題はありますか?
3 に答える
あなたが述べた理由から、私は常にキャストします。あなたが処理する必要があることを私が認識している落とし穴は次のとおりです。
明らかに、DBNull を処理できる必要があります (たとえば、Convert.IsDBNull でテストすることにより)。
ExecuteScalar の場合、DBNull だけでなく null もチェックする必要があると思います。
SQL Server の @@IDENTITY および SCOPE_IDENTITY 関数は、INT として宣言されている列に対しても数値 (10 進数) を返します。この場合、「(int)(decimal)value」を 2 回キャストするか、T-SQL コードで処理できます。
MyTable に挿入 ... MyTable から AutoIdColumn を選択 WHERE AutoIdColumn = SCOPE_IDENTITY()
また
INSERT INTO MyTable ...
SELECT CAST(SCOPE_IDENTITY() AS INT)
RDBMS から取得するときは、データベース ドライバーにネイティブ型と要求された型の間のマーシャリングを処理させる必要があります。
CAST は SQL 標準によって承認されており、最も多くの RDBMS プラットフォームで動作します。
CONVERT は、より少ないプラットフォームで使用できます。
マルチプラットフォームの考慮事項がある場合、CONVERT は、CAST では実現できないカスタム フォーマットなどの特別な場合にのみ使用する必要があります。
CAST
とはどちらも、CONVERT
あるデータ型の式を別のデータ型に明示的に変換するために使用されます。ただし、書式スタイルもCONVERT
指定できます。
CAST の構文:
CAST ( expression AS data_type [ (length ) ])
CONVERT の構文:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )