.net - ejemplos - ¿Transmitir o convertir al recuperar datos de una base de datos?
filter datatable c# (3)
Al acceder a un objeto en una DataTable recuperada de una base de datos, ¿hay alguna razón para no convertir el objeto en el tipo deseado, o hay razones para usar convertir? Sé que la regla se emite cuando sabemos con qué tipo de datos estamos trabajando, y convertimos al intentar cambiar el tipo de datos a algo que no es. Suponiendo que sepamos qué tipo de datos se almacena en una columna, el lanzamiento parece apropiado, pero ¿hay algún tipo de DB que implique que no podemos confiar en esto?
Siempre echaría, por las razones que dices. Los errores que conozco que debes manejar son:
Obviamente, debe ser capaz de manejar DBNulls (por ejemplo, probando con Convert.IsDBNull)
En el caso de ExecuteScalar, creo que necesita comprobar tanto null como DBNull.
Las funciones SQL Server @@IDENTITY y SCOPE_IDENTITY devuelven valores numéricos (decimales) incluso para columnas declaradas como INT. En este caso, puede convertir dos veces "(int) (decimal) value" o manejarlo en el código T-SQL, por ejemplo:.
INSERT INTO MyTable ... SELECCIONE AutoIdColumn FROM MyTable WHERE AutoIdColumn = SCOPE_IDENTITY ()
o
INSERT INTO MyTable ...
SELECT CAST(SCOPE_IDENTITY() AS INT)
Tanto CAST
como CONVERT
se usan para convertir explícitamente una expresión de un tipo de datos a otro. Sin embargo, con CONVERT
también puede especificar el estilo de formato .
Sintaxis para CAST:
CAST ( expression AS data_type [ (length ) ])
Sintaxis para CONVERTIR:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Al volver a trabajar desde RDBMS, debe dejar que el controlador de la base de datos maneje el marshalling entre el tipo nativo y el solicitado.
CAST está aprobado por estándares SQL y funciona en la mayor cantidad de plataformas RDBMS.
CONVERT está disponible en menos plataformas.
Si tiene concideraciones multiplataforma, CONVERT solo se debe usar para casos especiales como el formato personalizado que no se puede realizar con CAST.