Hubo preguntas similares pero las respuestas no fueron las que estaba buscando. Quiero insertar el valor de NULL en la base de datos de SQL Server si la referencia es NULL o aún no se ha asignado un valor. Por el momento estoy probando para nula y parece que.Net insertando valores NULL en la base de datos de SQL Server a partir de valores variables
String testString = null;
if (testString == null)
{
command.Parameters.AddParameter(new SqlParameter("@column", DBNull.Value);
}
else
{
command.Parameters.AddParameter(new SqlParameter("@column", testString);
}
Esto se ve y se siente muy torpe para mí. Tengo bastantes valores que estoy insertando en una base de datos y para probarlos todos como el anterior es muy detallado. ¿.Net no maneja esto de alguna manera? Pensé que tal vez si usaba cadena en lugar de Cadena, pero eso tampoco parece funcionar. Al mirar alrededor encontré artículos que hablan sobre el uso de tipos Nullable.
System.Nullable<T> variable
Esto parece funcionar para primitivos, int ?, char? ¿doble? y bool ?. Entonces eso podría funcionar para ellos, pero ¿qué pasa con las cuerdas? Me estoy perdiendo de algo. ¿Qué tipos debo usar para valores primitivos y para valores de cadena para no tener que probar valores repetidamente antes de insertarlos?
EDITAR: Antes de obtener demasiadas respuestas sobre los operadores ternarios. Me gustan pero no en este contexto. No tiene sentido para mí tener que probar ese valor y tener toda esa lógica extra, cuando ese tipo de cosas podría haberse implementado más abajo en .Net Framework y si supiera qué tipo dar, lo conseguiría. gratis.
Edit: Bien, entonces muchachos me ayudan a formular mi plan de ataque. Usaré Nullable para mis primitivos (int ?, double? Etc) y para mis Strings usaré String pero el ?? prueba. Esto mantiene las cosas menos detalladas. ¿Hay algo que me falta aquí, como perder algo de semántica?
El compilador se ahogará con esto porque no puede convertir implícitamente de cadena a DBNull. – LukeH
Tiene razón. Necesita bajar la cadena (x) a un objeto. Ejemplo editado. –
No es un fan de esto, porque hace que sea fácil para .Net adivinar el tipo incorrecto para un parámetro. Sería mejor especificar el tipo de parámetro a través de una sobrecarga que solicita una enumeración 'SqlDbType'. –