miércoles, 20 de noviembre de 2013

Uso del AVG

Se utilizo el AVG de SQL Server para obtener los promedios de los cursos llevados de un estudiante segun el carnet, el ejemplo de AVG seria:

Select AVG(GM.Nota) as NotaPonderadaAprobados
From Estudiante Est, Curso Cur, Matricula M, GrupoMatriculado GM, Grupo G,EstadoCurso E
Where Est.Carnet like @IdEstudiante 
 and M.FKEstudiante = Est.Id
 and M.Id = GM.FKMatricula
 and GM.FKGrupo = G.Id
 and G.FKCurso = Cur.Id
 and GM.FKEstado = E.Id
 and E.Estado = 'Aprobado'


Esta pequeña consulta se utilizó para el punto C2 de las consultas enviadas por el profesor al correo.

Cristian Araya
David Vargas

Horas: 2

domingo, 17 de noviembre de 2013

Migración de Bases de Datos

La migración de las bases de datos se realizo de la siguiente manera:

En un solo script según lo visto y aprendido en clases, se realizaron las siguientes operaciones de SELECT y UPDATE de una base a la otra:

--Inserta en la tabla Universidad
INSERT INTO [Matricula].dbo.Universidad
 (Nombre)
SELECT distinct V.NombreUniversidad
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreUniversidad != 'NULL'

--Inserta en la tabla Escuela
INSERT INTO [Matricula].dbo.Escuela
 (FK_Universidad,Nombre)
SELECT distinct (Select T.Id from [Matricula].dbo.Universidad T
where T.Nombre = (V.NombreUniversidad COLLATE SQL_Latin1_General_CP1_CI_AS)),
V.NombreEscuela
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreEscuela != 'NULL'

--Inserta en la tabla Curso
INSERT INTO [Matricula].dbo.Curso
 (FKEscuela,Nombre,Creditos,Codigo)
SELECT distinct (Select T.Id from [Matricula].dbo.Escuela T
where T.Nombre = (V.NombreEscuela COLLATE SQL_Latin1_General_CP1_CI_AS)),
V.NombreCurso,V.CreditosCurso,V.CodigoCurso
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreEscuela != 'NULL'

--Inserta en la tabla Carrera
INSERT INTO [Matricula].dbo.Carrera
 (FKEscuela,Nombre)
SELECT distinct (Select T.Id from [Matricula].dbo.Escuela T
where T.Nombre = (V.NombreEscuela COLLATE SQL_Latin1_General_CP1_CI_AS)),
V.NombreCarrera
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreEscuela != 'NULL'

--Inserta en la tabla Curriculum
INSERT INTO [Matricula].dbo.Curriculum
 (FKCarrera,Nombre,AñoCreacion,AñoCerrado)
SELECT distinct (Select T.Id from [Matricula].dbo.Carrera T
where T.Nombre = (V.NombreCarrera COLLATE SQL_Latin1_General_CP1_CI_AS)),
V.NombreCurriculum,V.AñoCreacionCurriculum,V.AñoCierreCurriculum
FROM [Prueba1-Matricula].dbo.TablaPrueba1$ V
where V.NombreEscuela != 'NULL'

Y así con el resto de tablas de las dos bases, este es un pequeño ejemplo de la migración.


Cristian Araya
David Vargas

Horas invertidas: 8

Datos de Prueba


Al grupo se le asigno realizar los datos de prueba para el Proyecto II Matricula, los cuales constan de dos tablas con la información  y los campos necesarios para la creación de la base de datos. Esta información se guardo en 2 tablas en un documento Excel para ser guardadas en una base de datos No Normalizada, esto con el fin de que los grupos y nosotros podamos hacer la migración de esa base no normalizada a la normalizada la cual seria utilizada para realizar el proyecto.

Ejemplo de los datos de prueba creados:





A los diferentes grupos se les envio un archivo de texto con varias explicaciones de ciertos campos creados en los datos de prueba para una mayor claridad y para evitar confusiones.

Contenido del archivo:

"Datos Prueba Tarea Programada V2.0

Informacion Archivo1
N/A en requisitos o correquistos es que no tiene
0 en el añoCierreCurriculum significa que el plan no se ha cerrado, en otras palabras es el plan actual
NumeroSemestre: Es el semestre al que pertenece el curso en el plan o curriculum
En el Nombre del Curriculum: IC-P-410, El primer campo se refiere a la carrera, la p a plan y el numero de plan correspondiente

Informacion Archivo2
Hay materias con el mismo nombre pero son impartidas por diferentes escuelas, esto para un manejo mas sencillo
En los últimos registros se muestran muchos campos con N/A esto es porque son estudiantes que nunca han matriculado,
 por lo cual solo se muestran los datos del estudiante
y en los demás campos se aprovecho para poner nueva informacion de los profesores, aulas, tipo de semestre y los estados
 de curso que existen.
En otras palabras los últimos registros son solo campos de información que no tienen relación entre una cosa y otra por
ejemplo el estudiante y el profesor no tienen relación alguna."

Ademas de esta información se dejaron datos de contactación de nosotros por cualquier duda o sugerencia.


Cristian Araya
David Vargas

Horas invertidas: 10

PROYECTO 2

lunes, 30 de septiembre de 2013

ANALISIS RESULTADOS

Análisis de Resultados y Resumen de la Primera Experiencia


El presente Proyecto se implemento según lo visto y aprendido en clases, ademas de la investigación por aparte de los lenguajes y programas utilizados en la elaboración del mismo. Se implemento siguiendo la programación por capas, las cuales son: Capa de interfaz, capa de negocio y capa de datos según lo aprendido en clases, véase también: Programacion por capas

Este Proyecto nos ayudo a crecer como estudiantes ya que aprendimos varios lenguajes de programación que no conocíamos y tuvimos muchos problemas en la realización del mismo durante el tiempo en que se realizó la tarea. Muchos errores que desconocíamos completamente nos quitaron bastante tiempo ya que en varias ocasiones se debieron invertir varias horas en la búsqueda de su solución.

Entre los lenguajes aprendidos están (y utilizados pues tal vez ya los conocíamos pero no a profundidad)

SQL: utilizado para la creación e interacción con la base de datos

C#: para la creación de la aplicación de escritorio, usando Visual Studio

PHP: implementado en la interacción del lado del servidor en la Aplicación web, este se comunica con la capa de interfaz y la capa de datos.

HTML: usado en la capa de interfaz que es el encargado de interactuar con el usuario, conocida también como capa de presentación.

Otros, utilizados pero en menor cantidad fueron CSS para darle estilo y formato a la interfaz gráfica en la Aplicación Web, JavaScript lenguaje del lado del cliente se utilizo en la capa de negocio o lógica de negocio en algunas ocasiones.

A = Tarea cumplida, B = Tarea implementada parcialmente, pues tiene casos en los que falla, C = Tarea implementada solo en la lógica (no se realizó su aplicación correcta), D = Tarea no implementada

Tarea
Cumplimiento
Script de creación de la Base de Datos y todos sus objetos
A
Script de llenado de datos básicos o catálogos
A
Script de migración de la base de datos con datos de prueba a la BD del proyecto
A
El código de la aplicación por web
A
El código de la aplicación de escritorio para el administrador
A

Horas trabajadas en el Proyecto: 90


Horas trabajadas por cada estudiante:

Cristian Araya: 83
David Vargas: 80

domingo, 29 de septiembre de 2013

INVESTIGACION: Script para eliminar todos los datos de las tablas MS SQL

Un script encontrado en la web y que es de gran importancia es eliminar todos los datos que se encuentran en todas las tablas en una base de datos. Esto lo utilizamos a la hora de hacer la migración, necesitábamos borrar todos los datos y navegando por la web encontramos el siguiente script. Sin embargo este script no reinicia los primary key, lo cual hay que hacerlo manualmente para cada tabla.


EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO

EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
GO

EXEC sp_MSForEachTable

'BEGIN TRY
   TRUNCATE TABLE ?
END TRY

BEGIN CATCH
   DELETE FROM ?
END CATCH;'

EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO

EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
GO

Para reiniciar los primary key lo vimos en una entrada anterior que era de la siguiente forma:

DBCC CHECKIDENT (Tabla, RESEED, 0)


Cristian Araya
David Vargas

sábado, 28 de septiembre de 2013

Investigación 

Pasar varibles de una pagina php a otra: 


Código empleado:

Pagina.php que lo envia: 

      session_start();  
      $_SESSION['valores'] = $varObtenerTipo;

Donde $varObtenerTipo; es el arreglo que se va a enviar.

Pagina.php que la recibe: 

       session_start(); 
       $mi_array = $_SESSION['valores']; 
$b = $mi_array[0];
echo "Largo de la lista... ".count($mi_array)."<br />"; // Largo de la lista
echo "Nombre ".$b['Nombre']; // Para saber el nombre del primer elemento de la lista que se recibio
                                                        // si es que tiene elementos

Cristian Araya
David Vargas

Horas empleadas: 1

viernes, 27 de septiembre de 2013

AVANCE: Migrar Datos de Excel a una Base de Datos Prueba

Se nos entregaron los siguientes archivos de Excel:

  • TablaHistorial
  • TablaUsuario
  • TablaVentas

Y se entregan varios archivos .txt haciendo referencia a los libros y su contenido
Se realiza con los tres archivos de excel, lo mencionado en la investigación que esta en la entrada anterior. De la cual obtenemos las siguientes tres tablas:


Cristian Araya
David Vargas

Horas Laboradas: 5horas

INVESTIGACION: Documento de Excel a una tabla en SQL

Tenemos el siguiente Excel y queremos trasladar estos datos a una base de datos en SQL Server.

Nos vamos a Microsoft SQL Server Management y le damos click derecho en una base de datos y seleccionamos la opción Tareas.

Se selecciona la opción importar datos


Aparecerá la siguiente ventana donde tenemos que elegir el documento de Excel y elegir la versión de Excel, así como seleccionar la opción que viene.


Se selecciona el destino tanto como el servidor como la base de datos


En la siguiente ventana podremos elegir copiar toda la tabla, o bien escribir una consulta para solo agregar algunos datos

Luego se seleccionan las pestañas del archivo de Excel y la tabla a la que se va a transferir



Se elige la opción finalizar

A continuación se realizara el proceso, y podemos ir viendo paso por paso, y ver si algo falla, cuando todo ha sido exitoso se muestra la siguiente ventana

Y ahora podemos ver que nuestra nueva tabla esta creada, y consultamos los datos y vemos que son los que contenía el archivo de Excel.


INVESTIGACION: Conexion con credenciales explicitas

Como vimos en la entrada anterior, hay varias maneras de conectarse a una base de datos, en esta ocasión hablaremos de la conexión de credenciales explicitas. Se pueden realizar de dos maneras solicitando las credenciales o bien usar las credenciales predeterminadas.
Solicitando las credenciales, se piden los datos y se concatenan al string de conexión.
Para usar credenciales predeterminadas no es nada recomendable poner la información en el código, ya que cualquiera lo podría ver, para esto se recomienda guardarlas cifradas en el archivo Web.config o bien en el registro de Windows como una subclave personalizada.
Para guardarlo en el archivo Web.config se debe creer un apartado de la siguiente manera:

<appSettings>
   <add key="mappedname" value="MyWebAppUser"/>
   <add key="mappedkey" value="Aje$31"/>
</appSettings>

Y en la aplicación leemos las credenciales de la propiedad estática AppSettings.
Dim user As String = System.Configuration.ConfigurationSettings. _
    AppSettings("mappedname")

Cuando usamos C# hay que agregar esta referencia al proyecto,


Y se escriben los valores en el app.config.

Para ver un ejemplo completo y ejemplo de como hacerlo en el registro de windows podemos acceder al link que se encuentra al final de esta entrada.

Fuente: http://msdn.microsoft.com/es-es/library/aa984237(v=vs.71).aspx

INVESTIGACION: Botones Submit HTML

INVESTIGACION 

Submit Buttons

Multiples Botones Submit en un from de html

Problema: No se podían usar varios botones de tipo "Submit" de HTML porque cuando se seleccionaba cualquiera de ellos redireccionaban a la misma pagina y lo requerido era que cada uno lo hiciera a una diferente dependiendo de lo deseado en la aplicación.

Solución: Pagina consultada: Multiple submit buttons

Script:

<script>
    function submitForm(action)
    {
        document.getElementById('form1').action = action; // El id del form
        document.getElementById('form1').submit();
    }
</script>

Horas empleadas en la solucion: 3

Cristian Araya
David Vargas

AVANCE: AplicacionWeb

Aplicacion Web

Trabajo de implementación de la solución a la aplicación Web.


Los días trabajados: 19,20,23,24

Se realizó: o Búsqueda y investigación de los elementos de html y su forma de interactuar y compartir información con php.

o Investigación del lenguaje php

o Solución de problemas como lo fue implementar un Script con JavaScript a forms para el uso de multiples botones Submit.

o Llenado de un Select en HTML usando php con la base de datos.
Codigo:
En este caso se utilizó una variable global que fue cargada desde un metodo creado en una clase php, el cual llama un stored procedure y la carga con los tipos de datos de la base de datos creada



Cristian Araya
David Vargas

Horas Invertidas: 21

INVESTIGACION: Select de varias tablas

La instrucción select recupera filas de la base de datos y habilita la selección de una o varias filas o columnas de una o varias tablas. El poder y complejidad que tiene esta instrucción es de gran alcance, conocer todas las facilidades y clausulas que puede tener un insert nos facilitara la tarea a la hora de consultar datos o extraer datos de una base de datos.

En esta ocasión mostramos como usar un select para crear una tabla o una consulta, con la información de varias tablas. 


Como se puede observar estamos haciendo una consulta, donde queremos crear una tabla compuesta por información de otras tres tablas, donde cada tabla le ponemos un prefijo para ahorrarnos escribir mas, y comparamos elementos de las tablas, para tener lo que queremos.

Hay operadores como union, intersect y except entre otros que son importantes, y que en un futuro los aprenderemos.

INVESTIGACION: Reiniciando los datos en una base de datos

Muchas veces queremos reiniciar o volver los datos desde 0 en una base de datos, sin embargo muchas veces solo eliminamos los datos, y no reiniciamos la llave primaria, o bien en caso contrario reiniciamos la llave primaria pero no borramos los datos de la base datos, lo cual nos puede afectar nuestro trabajo ya que se crearía llaves repetidas.
Para volver una base de datos desde 0 se debe ejecutar los siguientes comandos:
   delete * from tabla
   DBCC CHECKIDENT (tabla, RESEED, 0) 

Mostramos un ejemplo, se tiene la tabla persona con los siguientes datos:


Se borran todos los datos de la tabla


Se reinicia llave primaria


A la hora de insertar un nuevo elemento podemos ver que el ID ha comenzado otra vez desde el número 1.



INVESTIGACION: Comparar Fechas SQL Server

Para el manejo y la comparación de fechas, SQL ofrece herramientas muy practicas, que cuando estamos usando una variable de tipo date debemos saber. A continuación veremos varios aspectos de las fechas en SQL:

  • Se ingresan en comillas simples
  • Se puede ingresa - , y . como separadores
  • La fecha actual del servidor se puede obtener con el comando getdate()
  • Los operadores relacionales se pueden utilizar en las fechas.
Por ejemplo se puede comprar fecha1 < fecha2, y de igual manera para los demás operadores relacionales.


  • Existe el comando YEAR(fecha) que retorna el año de una fecha
  • De igual forma existe el comando MONTH
  • Existe una función que retorna el numero de semana: DATEPART
Por ejemplo:
            MONTH(getdate()) obtiene el mes de la fecha actual
            DATEPART(week,V.Fecha)  obtiene el número de semana de la fecha


miércoles, 25 de septiembre de 2013

INVESTIGACION: Analisis Tipos de Conexion

Para poder conectarse a una base de datos, existen dos grandes modos de poder hacerlo, en cada uno presentamos sus ventajas como desventajas y un ejemplo de como se haria en C#.

Modo de Autentificación de Windows o Seguridad Integrada
Usa el protocolo de seguridad de Kerberos, proporciona la aplicación de directivas de contraseñas en cuanto a la validación de la complejidad de las contraseñas seguras, ofrece compatibilidad para el bloqueo de cuentas y admite la caducidad de las contraseñas. Usa una serie de mensajes cifrados para autenticar usuarios en SQL Server.
Ejemplo:
Data Source = ServidorSQL; Initial Catalog = BaseDatos; Integrated Security = True

Mode de Autentificacion de SQL Server – Conexión con credenciales explicitas
Ocupa un usuario y una contraseña, las cadenas de conexión de se pueden guardar ya sea en el archivo Web.config y en el catálogo COM+ Admin.
Ejemplo:
data source = ServidorSQL; initial catalog = BaseDatos; 
user id = Usuario; password = Contraseña

Desventajas:
Tener que proporcionar las credenciales de SQL Server cada vez que se conectan a la base de datos puede resultar molesto.
La autenticación de SQL Server no puede utilizar el protocolo de seguridad de Kerberos.
Los nombres y contraseñas de SQL Server se pasan a través de la red, lo que hace de este un método menos seguro.

Ventajas:
Permite a los usuarios conectarse desde dominios desconocidos o que no son de confianza
Permite que SQL Server admita entornos con sistemas operativos mixtos
Permite a SQL Server admitir las aplicaciones anteriores y las que proporcionan terceros y requieren la autenticación de SQL Server.

Autenticación de SQL Server por medio de SOAP : Es un modo de autenticación del pasado, que ya no es utilizado debido a las ineficiencias de seguridad que han sido encontradas

Referencias
http://msdn.microsoft.com/es-es/library/aa289855(v=vs.71).aspx
http://technet.microsoft.com/es-es/library/ms144284.aspx
http://msdn.microsoft.com/es-es/library/aa984237(v=vs.71).aspx

martes, 24 de septiembre de 2013

INVESTIGACION: Bloque Try / Catch SQL Server

Los errores de código en el SQL Server pueden tratarse de forma similar a lenguajes como C# o C++. Constan del bloque try y del bloque catch, donde el bloque catch controla la excepción que se puede producir en el bloque try. Deben de ir primero el bloque try, seguido inmediatamente del bloque catch.

El SQL Server presenta varios tipos de errores, que los mostramos a continuacin:
  • ERROR_NUMBER() devuelve el número de error.
  • ERROR_MESSAGE() devuelve el texto completo del mensaje de error. El texto incluye los valores suministrados para los parámetros sustituibles, como longitudes, nombres de objeto u horas.
  • ERROR_SEVERITY() devuelve la gravedad del error.
  • ERROR_STATE() devuelve el número de estado del error.
  • ERROR_LINE() devuelve el número de línea dentro de la rutina en que se produjo el error.
  • ERROR_PROCEDURE() devuelve el nombre del procedimiento almacenado o desencadenador en que se produjo el error.

    Algo que cabe mencionar son las dos situaciones donde el bloque try/catch no los puede controlar como lo son:
    - Errores de Compilación
    - Errores que se producen durante la recompilación de instrucciones

    Instrucción rollback : Revierte una transacción explícita o implícita hasta el inicio de la transacción o hasta un punto de retorno dentro de la transacción y de igual manera libera los recursos que mantiene la transacción. 

    Instrucción commit: Hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de la base de datos, libera los recursos mantenidos por la transacción

    En el siguiente ejemplo se muestra el machote que seguimos en cada uno de nuestros procedimientos, para hacer uso de un manejo efectivo de errores y excepciones.

    create procedure insertarHistoricoDocumento
    @Documento int,
    @Administrador int,
    @Descripcion varchar (50),
    @Contenido text
    as
    begin
    begin try
    begin transaction
    insert                               HistoricoModDocumento(FKDocumento,FKAdministrador,DescripcionCambio,Contenido)
    values(@Documento,@Administrador,@Descripcion,@Contenido)
    commit transaction
    end try
    begin catch
    select ERROR_NUMBER() as ErrorNumber;
    return -1;
    rollback transaction
    end catch
    end


    Para mas información se puede consultar los siguientes enlaces :
    http://technet.microsoft.com/es-es/library/ms179296(v=sql.105).aspx
    http://technet.microsoft.com/es-es/library/ms181299.aspx

    Cristian Araya
    David Vargas

    Horas Invertidas: 2 horas

martes, 17 de septiembre de 2013

Conceptos Aprendidos: Seguridad

Para realizar una aplicación y una base de datos con una seguridad estable, se recomiendan las siguientes cosas:
- Conexion a la base de datos desde otro lenguaje de programación: Se debe encriptar la cadena de conexión, para que estos no sean visibles desde el código y por tanto que nadie ajeno a los desarrolladores los pueda ver. En resumen estar en la capa de acceso a datos y no debe estar en la capa lógica.

-Usar try/catch en las operaciones de store procedure: Se recomienda encerrar las operaciones de un store procedure, en un try/catch para evitar errores.

-Verificar parámetros en los store procedure: Se debe verificar que los parámetros sean correctos a la hora de entrada, como por ejemplo que no sean nulos.

-Llamar store procedure desde otros lenguajes: Cuando se llama un store procedure desde otros lenguajes, se debe de hacer esta llamana desde un bloque try/catch para prevenir errores y liberar recursos. En nuestro caso el C# también permite hacerlo con la instrucción using.

-Parámetros privados: Hay ciertos parámetros que se recomiendan encriptar, como es el caso de las contraseñas, que requieren una seguridad mayor.

-Para encriptar parámetros se pueden usar algoritmos y tecnicas que ya han sido investigadas antes, como por ejemplo usar el Algoritmo de Hash Seguro (SHA). Sin embargo como sabemos toda encriptacion requiere mas espacio y memoria, por lo cual las operaciones se realizaran más lentas y tendran una complejidad mayor.

AVANCE: Comienzo aplicacion de escritorio

Se comienza a hacer la aplicación de escritorio, en este avance realizamos los metodos de manejo para los libros y creacion de administradores. Se realiza:
- Ventana Crear Administrador
- Ventana inicio de sesión
- Ventana Crear un documento
- Ventana Editar Documento
- Ventana Buscar Documento

Se muestran unas imágenes mostrando la aplicación al momento:






Hecho por:
Cristian Araya
David Vargas
Horas Laboradas: 8 horas

AVANCE: Prueba Conexion SQL Server y C#

Se realiza una pequeña aplicación en C# con la base de datos de prueba que realizamos de persona, para verificar la conexión a la base de datos. A continuación se muestran unas imágenes del código usado y de la aplicación realizada.

                                                               Aplicación Corriendo

Base de Datos utilizada


Código de Conexión Integrada a SQL Server en C#


Función en C#, que llama un store procedure echo en la base de datos


David Vargas
Cristian Araya
Horas Dedicadas: 6horas