miércoles, 15 de marzo de 2017

Utilizando las funciones de fechas (Date functions) de SQL Server

Los cálculos con fecha son comunes en la mayoría de las aplicaciones que usan bases de datos, estos cálculos se utilizan en: fechas de vencimientos, cálculos de interés, cumpleaños o el número de días que alguien ha estado en el hospital.

Las funciones de fechas de SQL Server realizan conversiones automáticamente de los tipos CHAR o VARCHAR a los tipos DATETIME o SMALLDATETIME según sea el caso. Para mostrar ejemplos con las funciones de fecha SQL utilizare una tabla con el siguiente diseño:

Fig 1. El diseño de la tabla para los ejemplos

Algo importante que debe tenerse en cuenta, es que SQL Server trata cualquier fecha con dos dígitos en el año si son menores a 50 como años del siguiente siglo. Ejemplo:

Fig 2. Fecha de dos dígitos menor a 50 años.

Y a las fechas con los dos dígitos en el año mayores a 50 como años del siglo actual. Ejemplo:

Fig 3. Fecha de dos dígitos mayor a 50 años.

Debido a esto, para evitar problemas en las operaciones siempre es recomendable trabajar las fechas con 4 dígitos, como lo muestro en los siguientes ejemplos.

Fig 4. Fecha de cuatro dígitos menor a 50 años.

Fig 5. Fecha de cuatro dígitos mayor a 50 años.

Las funciones de fecha

Antes de trabajar con las funciones de fechas es necesario entender los componentes de los tipos de dato fecha.

Fig 6. Las partes del tipo de dato fecha.

Bien a continuación muestro los ejemplos con las funciones de fecha.

La función DATEADD

Esta función permite agregar un intervalo de tiempo a una fecha para obtener la suma del intervalo de tiempo y la fecha a la que se le aplica la función. Por ejemplo

Fig 7. Ejecutando la función para agregar 8 horas a la columna deliverydate.

La función DATEDIFF

Esta función regresa la diferencia entre dos fechas según la parte de la fecha que se especifique. Ejemplo:

Fig 8. Ejecutando la función obtener la diferencia en horas entre purchasedate y deliverydate.

La función DATENAME

Esta función regresa una cadena representando el nombre de la parte de la fecha que se especifique. Ejemplo:

Fig 9. Ejecutando la función para obtener el nombre del día de la semana y el mes del año.

La función DATEPART

Este función regresa el valor entero de la parte de la fecha que se especifique. Ejemplo:

Fig 10. Ejecutando la función para obtener el valor entero del día del año.

La función GETDATE

Esta función regresa la fecha y la hora actual del servidor. Ejemplo:

Fig 11. Obteniendo la fecha y la hora actual.

Las funciones DAY, MONTH, y YEAR

Estas funciones regresan el entero correspondiente de la fecha en la cual se aplique la función, en rigor de verdad estas funciones tienen su equivalencia con la función DATEPART, por ejemplo: la función DAY es equivalente a DATEPART(dd,fecha), la función MONTH equivale a DATEPART(mm,fecha) y así lo mismo para la función YEAR que equivale a DATEPART(yy,fecha).

lunes, 13 de febrero de 2017

Usando los controles de validación ASP.NET V (CustomValidator)

Hay ocasiones en que tenemos que comparar las entradas de los formularios con ciertos patrones que son demasiado complejos que requieren ciertas operaciones adicionales a las proporcionadas por los controles de validación predeterminados, existe también la posibilidad de usar métodos de validación previamente creadas con algún lenguaje de programación Script del lado del cliente, para estos casos .NET proporciona el control CustomValidator el cual nos permite usar funciones personalizadas tanto del lado del cliente como del lado del servidor.

Este control puede emplearse tanto del lado del servidor (Server-side) como del lado del cliente (Client-side). Para mostrar su utilización escribí dos ejemplos el primero compara las entradas del lado del servidor y el segundo hace las mismas comparaciones del lado del cliente.

Validando del lado del servidor (Server side)

El primer ejemplo muestra la utilización de este control del lado del servidor (server-side).

Fig 1. El código del control CustomValidator del lado del servidor.

Fig 2. El programa con el control CustomValidator en ejecucción.

Fig 3. El programa ejecutando las validaciones correspondientes.

Fig 4. Las validaciones requeridas fueron correctas.

Validando del lado del cliente (Client side)

El segundo ejemplo muestra las validaciones del lado del cliente (client-side), para este ejemplo es importante escribir antes que nada las funciones en JavaScript que servirán para hacer la validación, y que se utilizan en la propiedad ClientValidationFunction.

Fig 5. Las funciones JavaScript que efectuán la validación.

Fig 6. El código del control CustomValidator del lado del cliente.

Fig 7. El programa ejecutando una de las validaciones.

Fig 8. El programa ejecutando ambas validaciones.

Fig 9. El programa muestra un popup indicando que las validaciones son correctas.

Fig 10. El programa muestra un mensaje indicando que las validaciones son correctas.

La siguiente tabla muestra algunas propiedades del control.

Display

Esta propiedad tiene 3 valores

  1. Static: es la propiedad predeterminada, reserva un espacio suficiente en la página para mostrar el mensaje de error.
  2. Dynamic: el espacio para mostrar el mensaje no se reserva, cuando el mensaje se despliega se desplaza el contenido existente en la página.
  3. None: el mensaje no será desplegado en el lugar del control sino en el control ValidationSummary si se localiza en la misma página.

Errormessage

El texto del mensaje de error del control.

ControlToValidate

El control de donde obtendremos el valor para validar.

ClientValidationFunction

La función script del lado del cliente con la cual haremos la operación sobre el valor del control a validar.

OnServerValidate

El método del lado del servidor que tiene la operación que realizaremos con el valor del control

Q & A Preguntas y respuestas acerca de los sistemas de bases de datos (DBMS)

1. ¿Qué es la abstracción de datos?


2. ¿Qué hace el administrador de la base de datos?


3. ¿Cuáles son las aplicaciones de los sistemas de datos?


4. ¿Qué contiene un Diccionario de datos?


5. ¿Qué es un ejemplar de la base de datos?


6. ¿Qué es el esquema de la base de datos?


7. ¿Qué es la inconsistencia de datos?


8. ¿Qué es un lenguaje de consultas?


9. ¿Qué es un lenguaje de definición de datos?


10. ¿Qué es un lenguaje de manipulación de datos?


11. ¿Qué son los Metadatos?


12. ¿Qué es el modelo de datos orientados a objetos?


13. ¿Qué es el modelo de datos relacional?


14. ¿Qué es el Modelo de datos relacional orientado a objetos?


15. ¿Qué es un programa de aplicación?


16. ¿Qué es un sistema de gestión de base de datos?


17. ¿Qué es una transacción?


18. ¿Qué es una agregación?


19. ¿Qué es un atributo derivado?


20. ¿Qué son los atributos?


21. ¿Qué son los atributos descriptivos?


22. ¿Qué son los atributos monovalorados y multivalorados?


23. ¿Qué son los atributos simples y compuestos?


24. ¿Qué es un conjunto de entidades?


25. ¿Qué es un conjunto de relaciones?


26. ¿Qué es el conjunto de relaciones binario?


27. ¿Qué es un conjunto de relaciones recursivo?


28. ¿Qué son los conjuntos de entidades débiles y fuertes?


29. ¿Qué son los atributos discriminantes?


30. ¿Qué son las relaciones identificadoras?


31. ¿Qué es la correspondencia de cardinalidad?


32. ¿Qué es la relación uno a uno?


33. ¿Qué es la relación varios a uno?


34. ¿Qué es la relación varios a varios?


35. ¿Para que se utiliza el diagrama E-R (Entidad-relación)?


36. ¿Cuál es la diferencia entre clave candidata y clave primaria?


37. ¿Qué es el valor nulo?


Respuestas

R1. La recuperación de datos debe ser eficiente por lo que se requieren elaboradas estructuras de datos, los desarrolladores utilizan niveles de abstracción a nivel físico, lógico y de vistas para esconder la complejidad a los usuarios

R2. La persona que tiene el control central sobre el sistema de gestión de base de datos, sus tareas son: definición del esquema, definición de la estructura y del método de acceso, modificación del esquema y de la organización, concesión de la autorización para el acceso a datos y el mantenimiento rutinario.

R3. Las bases de datos son usadas en: banca, líneas áreas, universidades, transacciones de tarjetas de crédito, telecomunicaciones, finanzas, ventas, producción y recursos humanos.

R4. Un diccionario de datos contiene metadatos es decir datos acerca de los datos. El esquema de una tabla es un ejemplo de metadatos.

R5. Es la colección de la información almacenada en la base de datos en un momento en particular. Ya que las bases de datos van cambiando a lo largo del tiempo conforme la información se inserta y se borra.

R6. Es el diseño completo de la base de datos y son raramente modificados.

  • Esquema físico: El esquema físico describe el diseño físico en el nivel más bajo de abstracción, describe como se almacenan realmente los datos, las estructuras complejas de bajo nivel.
  • Esquema lógico: describe el diseño de la base de datos en un nivel más alto de abstracción, describe que datos se almacenan y que relaciones existen entre esos datos.

R7. Debido a que los archivos y programas de aplicación son creados por diferentes programadores en un largo período de tiempo, los diversos archivos tienen probablemente diferentes formatos y los programas pueden estar escritos en diferentes lenguajes. Las diversas copias de los mismos datos pueden no coincidir.

R8. Es la parte de un LMD (Lenguaje de manipulación de datos) que implica recuperación de información.

R9. Un esquema de base de datos se especifica mediante un conjunto de definiciones expresadas mediante un lenguaje especial llamado lenguaje de definición de datos.

R10. Es un lenguaje que permite a los usuarios acceder o manipular los datos organizados mediante el modelo de datos apropiado.

R11. Es decir son los datos acerca de los datos. El esquema de una tabla es un ejemplo de metadatos.

sábado, 7 de enero de 2017

Tablas de verdad con operadores lógicos de C#

El método más general para analizar los valores de verdad de las proposiciones compuestas es escribirlas en forma de una tabla. En estas tablas básicas de verdad se puede saber rápidamente si una proposición compuesta es verdadera o falsa, ya que muestra los resultados obtenidos al aplicar cada uno de los operadores lógicos, así como el resultado de la proposición de cada uno de los valores que puedan tener las diferentes proposiciones simples que integran una proposición compuesta.

Una tabla de verdad esta formada por filas y columnas, donde el número de filas depende de los posibles valores de verdad para cada proposición simple, mientras que el número de columnas depende del número de proposiciones simples que integran la proposición compuesta más el número de operadores lógicos que las conecten.

Con esto se tiene la siguiente expresión:

    Número de filas = 

En donde n es el número de proposiciones diferentes que integran una proposición compuesta y m es el número de posibles valores de verdad para cada proposición.

Como ejemplo la tabla de verdad de una contradicción, una proposición es una contradicción o absurdo si al evaluarla el resultado es falso para todos los valores de verdad. La contradicción más común es (p)^(¬p) como nos muestra su tabla de verdad.

Fig 1 Tabla de verdad de una contradicción.

A continuación la salida de un programa que muestra las tablas de verdad de los operadores lógicos y booleanos que tiene C# para formar proposiciones compuestas a partir de proposiciones simples.

Fig 2 Tablas de verdad de los operadores lógicos y booleanos en C#.

miércoles, 4 de enero de 2017

Un corto animado de Tux

La popularidad de los sistemas operativos GNU/Linux ha hecho familiar también a su mascota oficial el simpático pinguino Tux.

Pues ya hace bastante tiempo que anduvo circulando está animación en donde se ve la fascinación que tiene la oficial mascota de Linux por el pescado.

El pinguino Tux, la mascota oficial del sistema GNU/Linux.

El pinguino Tux siempre amigable como el sistema operativo que representa.

lunes, 26 de diciembre de 2016

Usando el control de validación CompareValidator ASP .NET - parte II

Como un complemento al primer ejercicio del control ASP .NET CompareValidator, aqui presento un segundo ejemplo que muestra como utilizar el control CompareValidator para comparar el valor de un control ASP.NET con un tipo específico de dato .NET (Currency, Date, Double, Integer, String) o bien comparar si teniendo dos valores: uno es menor o mayor al otro o si ambos valores son iguales.

Este segundo ejemplo consta de dos archivos: CompareValidatorSample2.aspx y CompareValidatorApp2.aspx.cs

Puedes descargar el código fuente aquí.

Fig 1 El ejemplo muestra la comparación de un valor contra un tipo específico de dato y la comparación del valor de un control contra el valor de otro control.

Fig 2 Comparando el valor de un control con un tipo específico de dato .NET.

Fig 3 Comparando el valor de un control contra el valor de otro control.

Algunas propiedades esenciales del control CompareValidator.

  • ControltoValidate: El control de donde obtendremos el valor a comparar
  • ControlToCompare: El control con el cual se compara el valor obtenido de la propiedad ControltoValidate
  • Display: Esta propiedad tiene 3 valores:
    1. Static: es la propiedad predeterminada, reserva un espacio suficiente en la página para mostrar el mensaje de error.
    2. Dynamic: el espacio para mostrar el mensaje no se reserva, cuando el mensaje se despliega se desplaza el contenido existente en la página.
    3. None: el mensaje no será desplegado en el lugar del control sino en el control ValidatorSummary si se localiza en la misma página.
  • Errormessage: el texto del mensaje que se desplegará si no se cumplen las condiciones.
  • Operator: La operación que efectuará el control en los valores de los campos, los valores son los siguientes:
    1. LessThan:El valor del ControlToValidate debe ser menor al valor del ControlToCompare.
    2. Equal: El valor del ControlToValidate debe ser igual al valor del ControlToCompare.
    3. NotEqual: El valor del ControlToValidate no debe ser igual al valor del ControlToCompare.
    4. LessThanEqual: El valor del ControlToValidate debe ser menor o igual al valor del ControlToCompare.
    5. GreaterThan: El valor del ControlToValidate debe ser mayor al valor del ControlToCompare.
    6. GreaterThanEqual: El valor del ControlToValidate debe ser mayor o igual al valor del ControlToCompare.
  • Type: El tipo de datos de los valores a comparar, los tipos de datos disponibles para este control son:
    1. Currency: Moneda
    2. Date: Fecha
    3. Double: Valor de punto flotante
    4. Integer: Entero sin punto decimal
    5. String: Cadena

miércoles, 21 de diciembre de 2016

Notas acerca de la recursión en C#

La recursión es una técnica de programación que se programa mediante un método que ya sea por iteración o por decisión resuelve un problema hasta llegar a un caso base , un método recursivo es un método que se llama así mismo ya sea directamente o indirectamente a través de otro método. Los enfoques recursivos para resolver problemas tienen varios elementos en común. El método en si sabe como resolver el o los casos más sencillos los llamados casos base.

Como un ejemplo ilustrativo, escribí un sencillo programa que contiene las funciones Fibonacci y factorial.

El programa se escribió en un proyecto Xamarin

Fig 1. El programa en el entorno de Xamarin

Para ejecutar el programa desde una consola de terminal, habilitar en el proyecto la opción "Run on external console"

Fig 2. Habilitando la opción "Run on external console"

Fig 3. El programa en ejecucción