Saturday, April 28, 2012

Desarrollo ASP.NET y herramientas De desarrollo


ASP.NET es un Framework gratuito de Microsoft para crear aplicaciones Web que trabaja con las normas basadas en HTML, CSS y JavaScript, entre otros.

Hay tres maneras de desarrollar con ASP.NET.

1. Web Forms.
ASP.NET Web Forms permite un modelo de desarrollo familiar que posibilita volver a utilizar los controles y sin esfuerzo incorporar datos en su sitio web, haciendo de su trabajo reutilizable y más productivo.

2. ASP.NET MVC. 
Es un enfoque poderoso que proporciona una separación clara de las capas de sus aplicaciones web y permite el control total sobre HTML para disfrutar un desarrollo ágil.

3. Web Pages.
Las ASP.NET Web Pages proporcionan una manera fácil de conexión a base de datos o añadir contenido de redes sociales con server code dinámico mezclado con HTML usando la nueva y liviana sintaxis RAZOR.

Microsoft proporciona un conjunto de herramientas de desarrollo Web optimizada para los diversos usuarios y experiencias a diseñar, construir, probar e implementar.

1. Expression Web.
Está optimizado para los diseñadores web que se centran en HTML, CSS y en las imágenes para diseñar, desarrollar y validar las experiencias Web contras múltiples Browsers.

2. Visual Studio.
Es un poderoso entorno de desarrollo optimizado para los profesionales que demandan la máxima flexibilidad y riqueza en la arquitectura de nuevas aplicaciones Web para la empresa o del mercado de Internet.

3. Web Matrix.
Ofrece una manera sencilla para los desarrolladores Web, para crear, personalizar e implementar sitios con aplicaciones de Open Source o páginas Web personalizadas con ASP.NET o PHP.

Fuente: WebCast. Introducción a WebMatrix y Razor Sintax

Friday, April 27, 2012

Dada una fecha, obtener fecha inicio y fecha fin (VB.NET)

OoOoh, qué título más largo XD. No encontré otro que pueda resumir bien esta tarea.

Aquí la digo otra vez... (en Visual Basic .NET)

Dada una fecha, obtener o extraer la fecha inicial y la fecha final de esa fecha, valga la redundancia.

Ejemplo, fecha: 26/04/2012
La fecha inicial: 01/04/2012
La fecha final: 30/04/2012

La fecha inicial obvio es fácil, siempre será 01 y el mes y el año lo podes obtener a través de los métodos propios de VB.NET (.month, .year) Pero se puede evitar la fatiga haciendo eso... Cómo? Así:

Dim fecFin As New Date
Dim fecIni As New Date
fecFin = Me.txtFechaX.Value
fecIni = Me.txtFechaX.Value
fecIni = fecIni.AddDays(-fecIni.Day + 1)
fecFin = fecFin.AddDays(-fecFin.Day + 1).AddMonths(1).AddDays(-1)

A mi me sirvió de mucho, espero que sea lo que estés buscando. Saludos.

HaPPy CoDiNg! =)

Thursday, April 26, 2012

Usar case en claúsula order By

La verdad es que yo nunca he utilizado el CASE dentro de un ORDER BY. Pero hoy aprendí a hacerlo :) Tal vez me sirva más adelante. Aun no he pensado en el beneficio que pueda sacar de esta característica. 

Es sencillo, voy a dejar dos ejemplos. Por si acaso, cogí la primer tabla que vi cuando abrí mi base de datos y la adapté para dicho ejemplo. Todo con fines académicos, no lo veo para implementarlo en la vida real, no este ejemplo, jeje. :) 

(Probado en Microsoft SQL Server 2008)

Con parámetros.
Le mando la columna con la cual se ordenará y si se ordenará de manera ascendente o descendente.

DECLARE @columna varchar(50)
    SET @columna = 'tipo_registro'
    
 DECLARE @orden varchar(4)
    SET @orden = 'ASC'

 DECLARE @mix varchar(55)
    SET @mix = @columna + ':' + @orden

SELECT * FROM com.Contrato WHERE cod_cliente in (29,30)
ORDER BY


 CASE
        WHEN (@mix = 'tipo_registro:ASC')
        THEN tipo_registro
    END ASC,
    CASE
        WHEN (@mix = 'tipo_registro:DESC')
        THEN tipo_registro
    END DESC
 
 

Con condición. 
Ordenará por cierta columna de acuerdo a una condicionante.

SELECT * FROM com.Contrato WHERE cod_cliente in (29,30)
ORDER BY
 CASE
  WHEN cod_cliente=29
  THEN tipo_registro
  END,
 CASE
  WHEN cod_cliente=30
  THEN nro_contrato
  END 

HaPPy CoDiNg =)

Thursday, April 12, 2012

Cómo implementar una base De datos: 6to paso

Y llegó la hora de consultar los datos de las tablas de nuestra base de datos. Este paso es para satisfacer los reportes requeridos por los usuarios. Nuestro interés no solo es almacenar y almacenar datos sino también consultarlos, extraerlos, estudiarlos, etc.

Como sexto paso, utilizaremos la sentencia de consultas del SQL: SELECT.

El SELECT puede ser tan sencillo como complejo. Todo dependerá de los requerimientos, de lo que queremos.

Una regla general para saber si la consulta será una consulta anidada es cuando en el enunciado encontramos dos preguntas. Mi clásico ejemplo es: Quién es el alumno que obtuvo la mejor nota del semestre I/2012? Aquí primero debemos encontrar cuál es la mejor nota del semestre y luego saber qué alumno obtuvo esa nota.

La sintaxis de la instrucción SELECT es:

SELECT [DISTINCT] nombre de las columnas
FROM nombre de la tabla(s)
[WHERE condición de búsqueda]
[GROUP BY nombre de las columnas de agrupamiento]
[HAVING condición de búsqueda para el Group By]
[ORDER BY nombre las columnas de ordenamiento [ASC | DESC]]

Un SELECT mínimo debe ser así:

SELECT * FROM tabla

TIPS

Si hay un GROUP BY, es porque estamos utilizando funciones agregadas en el SELECT.

Puede existir un función agregada en el SELECT sin usar GROUP BY. Pero no puede existir un GROUP BY si existir una función agregada en el SELECT.

En el GROUP BY deben ir todas las columnas que van en el SELECT.

No puede existir un HAVING sin existir un GROUP BY. Puede existir un GROUP BY sin que haya un HAVING.

Existen tres tipos de consultas anidadas. Los SELECTs que van en el SELECT principal, los SELECTs que van en el FROM y los SELECTs que van en el WHERE.

Bueno, esta publicación no pretende enseñarte SQL. En la web hay n manuales para aprender cómo hacer consultas complejas y optimizadas.

Wednesday, April 11, 2012

Cómo implementar una base De datos: 5to paso

Habrán filas en nuestras tablas que ya no se requieran más. Como quinto paso, emplearemos la sentencia DELETE.

1. Delete Simple

Sin especificar una condición, eliminaremos todas las filas de una tabla sin eliminar la tabla

DELETE FROM persona

2. Delete con Condición

Podemos eliminar las filas de una tabla sólo aquellas que cumplan una condición

DELETE FROM presona WHERE fec_nac > '1985/01/01'

Como en todo, también podemos agregarle una consulta anidada el WHERE. Todo es cuestión de creatividad y basado en conocimiento. Nuestro delete puede convertir de algo sencillo a algo muy complejo.

Tuesday, April 10, 2012

Cómo implementar una base De datos: 4to paso

Después de haber hechos los INSERT INTO, es probable que los datos cambien con el tiempo, por tanto, se recurre a la sentencia UPDATE. Esta sentencia llega a ser nuestro cuarto paso.

La sentencia UPDATE puede ser desde lo más sencillo hasta lo más complejo.

1. Update Simple

UPDATE persona
SET fec_nac= '1985/08/20'

En un update simple, actualizamos TODOS los registros de la tabla

2. Update con Condición

UPDATE persona
SET fec_nac= '1985/02/23'
WHERE id=1

En un update con condición, actualizamos únicamente los registros que cumplen esa condición. En el WHERE podemos agregar una condición simple o compleja a través de consultas anidadas. (un SELECT)

3. Update con CASE

Podemos actualizar una tabla de base de datos de acuerdo a distintos casos. Por ejemplo, queremos ponerle un descuento a un producto pero esto lo queremos hacer de acuerdo al precio del producto.

UPDATE producto
SET descuento= CASE
WHEN (precio < 100) THEN precio*0.1
WHEN (precio <=100 AND precio <500) THEN precio*0.2
ELSE descuento=precio*0.3 END

Para utilizar la cláusula CASE, hay dos maneras de hacerlo:

CASE
 WHEN condición THEN resultado_1
 ELSE resultado_2
 END
 CASE la expresión
 WHEN la condición THEN resultado_1
 ELSE resultado_2
 END

La cláusula ELSE se puede omitir pero el resultado será NULL.

Monday, April 9, 2012

Cómo implementar una base De datos: 3er paso

Una vez creada la base de datos, las tablas, es hora de poblarla. Tercer paso: INSERT INTO.

A la hora de realizar un INSERT INTO podemos hacerlos de 3 maneras.

Considérese la siguiente tabla para los ejemplos:

CREATE TABLE persona(
 id int identity(1,1) primary key,
 nombre varchar(20) not null,
 ap_paterno varchar(20) not null,
 ap_materno varchar(20) null,
 fec_nac datetime null,
 direccion varchar(30) not null
)

1. Sin especificar las columnas a insertar (por defecto, todas).

INSERT INTO persona VALUES ('lizzy', 'mendivil', null, null, 'california st #159')

Cuando no especificamos las columnas, éstas deben coincidir con el tipo de datos y la cantidad de columnas que tiene nuestra tabla. Resulta en desventaja ya que si existen valores nulos posibles, éstos debemos registrarlo también llenándolo con "null" (tal como se muestra en el ejemplo) y además si nos equivocamos y no hacemos coincidir con el tipo de datos, la ejecución de la sentencia resultará en error.

Otra desventaja es que dejamos que el compilador trabaje más analizando que los valores y las columnas correspondan.

2. Especificando las columnas a insertar.

INSERT INTO persona (nombre, ap_paterno, direccion) VALUES ('benjamin', 'villarroel', 'florida st #748')

Nótese que después de escribir el nombre de la tabla, entre paréntesis espcificamos las columnas que vamos a insertar con los valores.

3. A partir de un SELECT.

INSERT INTO persona (nombre, ap_paterno, direccion) SELECT nombre, ap_paterno, direccion FROM cliente

Solo debemos asegurarnos que el tipo de datos de la tabla de la cual queremos extraer los datos coincida con el tipo de datos de las columnas de la tabla a la cual queremos insertar los valores. El tipo de datos y el número de columnas.

Nótese que se reemplaza la palabra clave VALUES con la instrucción SELECT.

Nota.- Cuando realizamos un INSERT a una tabla la cual contiene referencia a otra (FOREIGN KEY), debemos asegurarnos que el valor de esa columna PRIMERO exista en la tabla a la cual pertenece, esto es la Integridad de Datos.

Friday, April 6, 2012

Cómo implementar una base De datos: 2do paso

Como segundo paso, viene la creación de las tablas de la base de datos: "CREATE TABLE".

Es importante resaltar que la creación de las tablas se debe hacer en orden. Más que todo en las relaciones 1 a N. Por ejemplo, 1 cliente realiza N ventas. No podemos crear primero la tabla "ventas" sin haber creado antes la de "cliente" Por tanto, las tablas que no tienen llave foránea deben crearse primero.

La sentencia CREATE TABLE con todos sus atributos sería como sigue:

CREATE TABLE nombre_table
(
 campo1 tipo_dato [NULL/NOT NULL] | [CHECK (expresion_logica)] | [DEFAULT expresion_constante] | [aqui podemos agregar si va a ser primary o foreign key],
 ...
 PRIMARY KEY (campo_llave_pk),
 FOREIGN KEY (campo_llave_fk) REFERENCES nombre_tabla2 (campo_llave_pk_tabla2)
)
Ejemplo. Creación de las tablas para una base de datos de Ventas (sencilla para fines académicos)

CREATE TABLE cliente(
 id int identity(1,1) primary key, --cuando es llave primaria, automáticamente es NOT NULL
 nombre varchar(20) not null,
 ap_pat varchar(20) not null,
 ap_mat varchar(20) null, --si no se especifica que sea NULL, el DBMS lo pone por defecto.
 direccion varchar(30) null,
 sexo char(1) CHECK (sexo in('M','F')),
 limite_credito decimal(10,2) not null
)

CREATE TABLE vendedor(
 id int identity(1,1) primary key,
 nombre varchar(20) not null,
 ap_pat varchar(20) not null,
 ap_mat varchar(20) null, 
 direccion varchar(30) null,
 sexo char(1) CHECK (sexo in('M','F'))
)

CREATE TABLE producto(
 id int identity(1,1) primary key,
 descripcion varchar(50) not null,
 precio decimal(10,2) not null,
 stock int not null
)

CREATE TABLE ventas(
 id int identity(1,1) primary key,
 fecha datetime not null,
 descuento decimal(10,2) default 0,
 id_cliente int foreign key references cliente(id),
 id_vendedor int foreign key references vendedor(id)
)

CREATE TABLE ventas_detalle(
 id int identity(1,1) primary key,
 cantidad int check (cantidad >0),
 id_producto int foreign key references producto(id),
 id_venta int foreign key references ventas(id)
)

Una vez creadas las tablas, podría darse el caso de que querramos eliminar alguna o modificarla.

Para eliminar una tabla: DROP TABLE

Practicamente, podemos darle un DROP a todo lo que le hayamos dado un CREATE (table, trigger, view, etc.)

Ejemplo:

DROP TABLE venta_detalle

Para modificar una tabla: ALTER TABLE

Podemos agregar una nueva columna a una tabla, eliminar una columna existente de la tabla o modificar una collumna existente de tabla.

1. Añadir una definición de la columna de una tabla. Puede crearse con valores nulos o valores.

ALTER TABLE nombre_tabla ADD nombre_columna_nueva tipo_dato [NULL] | [CONSTRAINT nombre_nueva_restriccion CHECK/DEFAULT]

2. Eliminar una columna de la tabla. Pero antes de su eliminación deben ser eliminados por ALTER TABLE todas las restricciones que estén definidas sobre esta solumna.

ALTER TABLE nombre_table DROP COLUMN nombre_columna

3. Eliminar un constraint.

ALTER TABLE nombre_table DROP CONSTRAINT nombre_del_constraint

4. Crear una llave primaria. En el caso de que esta tabla ya contenga datos, las columnas que escojamos para la llave primaria deben ser de valor únicos por cada fila.

ALTER TABLE nombre_table ADD PRIMARY KEY (key1, key2...)

5. Crear una llave foránea. La columna a definir como llave foránea debe contener previamente valores que corresponden a la llave primaria de la otra tabla.

ALTER TABLE nombre_table ADD FOREIGN KEY (key)

6. Habilitar o inhabilitar los trigger en una tabla.

ALTER TABLE nombre_table ENABLE TRIGGER nombre_trigger

ALTER TABLE nombre_table DISABLE TRIGGER nombre_trigger

Thursday, April 5, 2012

Cómo implementar una base De datos: 1er paso

A lo largo del ciclo de la implementación de una base de datos relacional, entran en juego 3 tipos de lenguajes los cuales el SQL (Structure Query Language - Lenguaje de consulta estructurado) los clasifica como sigue a continuación:

** Lenguaje de Definición de Datos (DDL, Data Definition Language)
** Lenguaje de Manipulación de Datos (DML, Data Management Language)
** Lenguaje de Control de Datos (DCL, Data Control Language)

Para llevar a cabo el primer paso a la hora de implementar una base de datos, utilizaremos lo que es el DDL.

DDL
Grupo de sentencias del SQL que soportar la definición y declaración de los objetos de la base de datos tales como la base de datos misma, las tablas, las vistas, los índices, los procedimientos almacenados, las funciones, los triggers, etc.

Los comandos son:

CREATE
ALTER
DROP

Ok. El primer paso entonces es definir en el disco duro el área física que contendrá las tablas dela base de datos.

El siguiente pedazo de código se encargará de ello:

CREATE DATABASE ventas ON PRIMARY(
 NAME = ventas_data, --Nombre de la BD
 FILENAME='c:\ventas.mdf', --Dirección donde se crea la BD
 SIZE=5MB, --Tamaño de la BD
 MAXSIZE=10MB, --Tamaño máximo de la BD
 FILEGROWTH=1MB --Crecimiento de la BD
)
LOG ON(
 NAME=ventas_log,
 FILENAME='c:\ventas.ldf',
 SIZE=5MB,
 MAXSIZE=10MB,
 FILEGROWTH=1MB
)

La primer sentencia crea un archivo principal de extensión mdf de tamaño inicial de 5 MB, cuando este espacio se agote, 5MB se expandirá en 1MB más para tener espacio libre y poder meter más registros o tablas, y cuando nuevamente se agote, se expandirá nuevamente en 1 MB y así sucesivamente cuando haya alcanzado el máximo de 10MB.

Y lo mismo ocurrirá con el archivo de registro de transacciones (.ldf)

Cuando nosotros no lo especificamos manualmente, el DBMS lo hace. Por ejemplo, al ejecutar solo la sentencia CREATE DATABASE ventas, el DBMS (en este caso, SQL SERVER) hizo lo siguiente: (selecciona la base de datos que acabas de crear, clic derecho y propiedades, te levantará la siguiente ventana)