Inserciones condicionales

Cuando hacemos una inserción como ésta:

public void EsStoredProcedure(ref SqlCommand comando, bool esSP) {
    if (esSP)
        comando.CommandType = CommandType.StoredProcedure;
    else
        comando.CommandType = CommandType.Text;
}

Estamos haciendo mucho rollo para darle valor a una sola variable. Esto no solo afecta estéticamente a nuestro programa. También ocupa algunos bits de más si podemos resumirlo a una sola línea.

En C#, una inserción condicional es cuando «incluimos» el if dentro de la inserción, de esta manera:

public void EsStoredProcedure(ref SqlCommand comando, bool esSP) {
    comando.CommandType = (esSP ? CommandType.StoredProcedure : CommandType.Text);
}

La inserción condicional se divide en tres partes: la condición (if), el resultado si la condición es positiva (true) y el resultado si la condición es negativa (false). La condición es seguida por un signo de interrogación, y los dos resultados se dividen con un signo de dos puntos.

En VB.NET, existe una función llamada Iif, que hace más o menos lo mismo:

Public Sub EsStoredProcedure(ByRef comando As SqlCommand, ByVal esSP As Boolean) 
    comando.CommandType = Iif(esSP, CommandType.StoredProcedure, CommandType.Text)
End Sub 

La diferencia es que C# evalúa solamente la condición y la inserción que se va a realizar, mientras VB evalúa las tres expresiones en la función Iif. Esto es un punto negativo, pues nos podemos topar con esta situación:

Public Function ObtenerDato(ByRef tabla As DataTable) As String
    Return Iif (tabla.Rows.Count > 0, tabla.Rows(0)("columna").ToString(), "")
End Function

En VB se evalúan las tres expresiones durante la ejecución. Suponiendo que la tabla no tiene ninguna fila, la aplicación generará un error de tipo NullReferenceException, pues la segunda parte de la función llama a una columna dentro de una fila inexistente.

Por cosas como ésta, prefiero C# sobre VB.NET.

Un comentario sobre “Inserciones condicionales

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s