.NET SoapClient: simple cliente para servicios SOAP

Ya hace varios años que se pusieron de moda las Web APIs, pero hasta la fecha, los servicios por medio del protocolo SOAP siguen siendo de lo más usado. En .NET tenemos los Web Services (ASMX) y WCF, que permiten crear servicios bajo este protocolo. La facilidad de crearlos y consumirlos en este framework es parte de lo que los hace tan populares hasta hoy en día.
Sigue leyendo «.NET SoapClient: simple cliente para servicios SOAP»

C#: Métodos con parámetros opcionales

En ciertos casos, podemos encontrarnos en la situación de tener un método con cierta cantidad de parámetros (pocos o muchos), de los cuales algunos los usamos en ciertos casos, y otros no.

Sigue leyendo «C#: Métodos con parámetros opcionales»

C#. Convertir números a letra

Basado en una función que encontré en Internet (no recuerdo dónde :(), creé esta función de extensión para el tipo de dato int, para convertir de número a letra.

Sigue leyendo «C#. Convertir números a letra»

Cerrar sesión en ASP.NET (HTTPSessionState)

Ayer nos topamos en el trabajo con este detalle, y aunque al principio batallamos para encontrar solución, en realidad es algo sencillo.

ASP.NET utiliza un objeto HttpSessionState para permitirnos guardar variables en una sesión, es decir, mientras el usuario está en nuestro sitio Web sin cerrar el navegador.

Sigue leyendo «Cerrar sesión en ASP.NET (HTTPSessionState)»

Optimizar la sentencia for

Algo que encontré una vez en Internet hace poco (no recuerdo bien en dónde) que me llamó mucho la atención es cómo podemos optimizar una sentencia for.

Sigue leyendo «Optimizar la sentencia for»

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.

C# – Propiedades

En .NET podemos crear y utilizar un elemento especial, denominado Propiedad, que aunque a simple vista parece ser una variable cualquiera, puede esconder una funcionalidad tan compleja como lo necesitemos.

Sigue leyendo «C# – Propiedades»

C#: Valor nulo para tipos de datos comunes

Es extraño incorrecto ridículo estúpido curioso que a los datos de tipo int, string, char, byte, float, double, etc. no se les pueda asignar un valor nulo. Esto no sería de importancia para nosotros si no fuera porque en C#, siempre debemos darle un valor a toda variable al ser inicializada, ya sea utilizando el constructor de su clase o, como solemos hacer para solventar este problema, inicializarla con valor nulo. ¿Pero qué hacemos si la clase no nos permite asignar este valor? Muy fácilmente nos toparemos con este problema mientras programamos, pero existe una solución.

Sigue leyendo «C#: Valor nulo para tipos de datos comunes»