sábado, 18 de junio de 2011

Programación III

Los artículos para la clase de Programación III están publicados en el blog:
ucytprog3.blogspot.com

Saludos.

martes, 19 de abril de 2011

Ejercicio de DataGridView y Reporte

Tomando como punto de partida el ejercicio de solución del exámen del post anterior vamos a modificarlo para hacerlo un poco más especializado. Primero revisemos el formulario original


Si nos detenemos en la pantalla un momento podemos ver que hay varios puntos que podemos corregir para evitar que los usuarios cuando ingresen información registren información inconsistente.

Por ejemplo en el caso de la asignatura, en la pantalla de ingreso hay que digitarla, esto podría generar inconsistencia por ejemplo si alguien digita Programación I y posteriormente se ingresa Pogramación I, son dos cosas diferentes y si queremos generar posteriormente un listado de esta asignatura no nos aparecerían las dos correctamente. Para reforzar este punto vamos a crear una nueva tabla en la base de datos con la siguiente estructura.

  Del mismo modo los estudiantes deberían tener una tabla donde estén registrados y tengan un valor único como lo es su código de carnet.  La estructura de la tabla de estudiantes sería así:

Al final modificamos la estructura original de la tabla Notas quedando de la siguiente manera:


  El código de carnet debe enlazarse con el carnet de la tabla Estudiantes y el código de asignatura debe enlanzarse con el código de asignatura de la tabla Asignaturas.  De esta manera no se podrán ingresar a la tabla de notas estudiantes que no estén registrados en la tabla Estudiantes y lo mismo pasaría con las asignaturas.

Para el caso de las asignaturas, cambiaremos la pantalla eliminando el cuadro de texto txtAsignatura y lo sustituiremos por un control ComboBox llamado ComboBox1.

Utilizando los objetos DataAdapter, Dataset y Datatable, asignaremos al formulario los datos de las asignaturas para que puedan ser seleccionadas de las existentes en la tabla de Asignaturas.

Para ello daremos doble click en el formulario para que nos lleve al evento Form1_Load y escribiremos en el procedimiento lo siguiente:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim da As New SqlDataAdapter("SELECT * FROM Asignaturas", cn)
Dim ds As New DataSet
da.Fill(ds)
ComboBox1.DataSource = ds.Tables(0)
ComboBox1.DisplayMember = "Descripcion"
ComboBox1.ValueMember = "Asignatura"
End Sub



ACLARACION:


Muchos controles tienen la propiedad o atributo DataSource la cual especifica una tabla de donde se sacarán los datos para mostrarlos. En el caso del ComboBox en la propiedad DataSource se asigna la tabla 0. También pudo ampliarse la declaración de la siguiente manera:







Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim da As New SqlDataAdapter("SELECT * FROM Asignaturas", cn)
Dim ds As New DataSet
da.Fill(ds)
Dim dt as new Datatable
dt = ds.Tables(0)
ComboBox1.DataSource = dt
ComboBox1.DisplayMember = "Descripcion"
ComboBox1.ValueMember = "Asignatura"
End Sub






Queremos también construir un formulario que muestre todas las notas ingresadas. Para esto utilizaremos algunos de los conocimientos adquiridos en Bases de Datos II y me refiero a las vistas de SQL Server.





CREACION DE LA VISTA EN SQL SERVER

El proceso de creación de la vista es sencillo. Queremos obtener el carnet del estudiante, su nombre, el nombre de la asignatura y su nota final. Para ello tendríamos que construir una sentencia select que mezcle la información de las tres tablas.

Podemos construirla manualmente. La tabla principal es Notas que es la que contiene tanto el carnet como el código de asignatura y la nota final, así que comenzamos con ella.

SELECT Notas.Carnet, Estudiante.Nombre, Asignatura.Descripcion, Notas.NotaFinal
FROM Notas INNER JOIN Estudiante ON Notas.Carnet = Estudiante.Carnet
INNER JOIN Asignatura ON Notas.Asignatura = Asignaturas.Asignatura

La vista puede crearse directamente en SQL Server para ello seleccionamos el objeto Views o Vistas y presionando click con el botón derecho del mouse seleccionamos Nueva Vista (New View)


Se abrirá un diseñador de vistas y un cuadro de diálogo con las tablas existentes.  Seleccionar las tres tablas con Shift + Flechas y presionar el botón Add.  Se añadiran las tablas y quedará una pantalla parecida a la siguiente.

  Ahora seleccione los campos necesarios marcando cada uno en la tabla correspondiente.  De la tabla Notas el carnet, de la tabla Estudiantes el nombre, de la tabla asignaturas la descripción y de la tabla Notas la nota final.  Si se fija en el diseñador se va creando la sentencia SQL cada vez que selecciona algo.

Guardemos la vista con el nombre VistaNotas.

Ahora agregaremos un botón al formulario y le pondremos como nombre btnTodasNotas.  También agregaremos al proyecto un nuevo formulario llamado ConsultaNotas y agregaremos al formulario un control DataGridView, podemos dejarlo con el mismo nombre que Visual Basic asigna : DataGridView1 y dos botones, el primero dirá Salir y lo llamaremos btnSalir y su código ya lo conocemos (Me.Dispose()) y un segundo botón que se llamará btnReporte que explicaremos luego.   El formulario lucirá más o menos como el siguiente:


Ahora en el botón btnListado colocaremos  el siguiente código

Private Sub btnTodasNotas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTodasNotas.Click
ConsultaNotas.ShowDialog()
End Sub

Con este código llamaremos al formulario ConsultaNotas desde el formulario Form1

El código del formulario ConsultaNotas es el siguiente:
Imports System.Data
Imports System.Data.SqlClient

Public Class ConsultaNotas
'Declararemos la conexión aquí para que esté visible a todos los procedimientos
Dim cn As New SqlConnection("Data source=3PHPB01\SQLEXPRESS;Initial Catalog=Examen2;Integrated Security=true")
Private Sub ConsultaNotas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim da As New SqlDataAdapter("SELECT * FROM VistaNotas", cn)
Dim ds As New DataSet
da.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
End Sub
End Class

Nos falta crear el reporte de Notas registradas en el sistema. Visual Basic 2008 en su versión Profesional permite crear reportes con dos componentes Microsoft ReportViewer y Crystal Reports. Vamos a crear un reporte usando el Microsoft ReportViewer. Para ello podemos usar el asistente de reportes que es la manera más fácil, pero no la mas adecuada cuando programamos una aplicación real. Seleccionamos el proyecto y presionamos el botón derecho del mouse y seleccionamos la opción Add (Agregar) / New Item (Nuevo Elemento)


Seleccionar el elemento Report Wizard y colocar en el nombre del Reporte Notas.rdlc
(la extensión rdlc significa Report Definition Language Client side). Este asistente nos llevará de la mano para crear el reporte a través de varias pantallas.

En la primer pantalla nos dará una bienvenida al asistente de reportes, necesitamos dar click al botón Next. La pantalla solo nos informa de los pasos que se seguirán hasta concluir con el reporte que queremos.




En la segunda pantalla debemos escoger Database y presionar Next. 

report3

En esta tercer pantalla debemos crear una nueva conexión si no la hemos creado aún.  Cuando le damos click al botón correspondiente nos aparecerá un cuadro de diálogo donde debemos escribir el nombre de nuestro servidor y seleccionar la base de datos requerida (Examen2).

La pantalla es parecida a la siguiente:

report4

report5

Aqui podemos cambiar el nombre de la conexión o dejarlo como lo recomienda el sistema.  Presionamos Next y continuamos con la siguiente pantalla donde nos aparecerá los objetos de la base de datos. 

Queremos generar el reporte a partir de los datos contenidos en la vista recien creada (VistaNotas). Así que seleccionamos las vistas y marcamos la vista correspondiente

report6En la siguiente pantalla nos creará un nuevo dataset en forma gráfica donde aparecerán los datos de los campos de la vista. Presionamos Next.

report7Ahora en las siguientes pantallas ya entramos al diseño del reporte.  La primera pantalla es para seleccionar el tipo de reporte.  Seleccionaremos tabular y presionamos Next.

report8   Posteriormente miraremos una pantalla donde podremos entre otras cosas agrupar el reporte, definir que campos van en el detalle, etc.  Para nuestro caso lo que haremos será seleccionar todos los campos y presionar el botón Details (Detalle)


report10
report9



De aqui en adelante si queremos podemos presionar Finish o seguir dando algunas características para el reporte.

report11

Seleccionamos en esta pantalla en tipo Stepped y presionamos Next

report12
Aquí definimos el modelo de colores que nos guste más.  Seleccionemos el primero y presionemos Next.  Ya casi llegamos al final de la elaboración del reporte de esta manera fácil.

report13Esta pantalla es la conclusión del reporte con datos de lo creado por el asistente.  Solo presionamos Finish y nos llevará hasta el reporte creado para que le hagamos cambios si es necesario.

Llegaremos a la pantalla siguiente.

report14 

Aqui está creado el reporte.

Ahora grabamos y regresemos a la aplicación.  Agreguemos un nuevo formulario y pongamosle como nombre Reporte.  Agreguemos a este formulario un control Microsoft ReportViewer que encontraremos en la categoría Reporting de la Caja de Herramientas.

form2_1

Ahora en el control añadido vamos a la esquina superior derecha y encontraremos una flecha; presionémosla y aparecerá un menú emergente donde podremos seleccionar el reporte creado y además usar la ocpión DOCK IN PARENT CONTAINER (Acoplar en el contenedor principal), lo cual hará que el control tenga las dimensiones del formulario y se agrande o reduzca si el formulario se cambia de tamaño.

Bueno con esto estamos listos, solo falta ir al formulario ConsultaNotas y dar click en el boton btnReporte y escribir el código

Private Sub btnReporte_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReporte.Click
Reporte.ShowDialog()
End Sub

En los enlaces siguientes les dejo el código completo de la aplicación y el script para la generación de la base de datos Examen2.  Si la base ya la tenían deben eliminarla y posteriormente ejecutar el script.  Dentro del script se crean dos estudiantes y dos asignaturas.  Pueden revisar los datos para que anoten el código del carnet y consulten.  No hay notas registradas para los estudiantes.  Prueba registrar notas para un estudiante y pruebe el botón Todas las Notas y el reporte.

NOTA
Para que funcione en su máquina debe cambiar las cadenas de conexión del programa para que apunten a su servidor. Además para que funcione el reporte debe ir al menú principal del Visual Basic y en el menú PROYECTO seleccionar la última opción ExamenSP_1C2011 Properties, y en el cuadro que aparece seleccionar el tab Setting.  Aparecerá la configuración del dataset creado por el asistente del reporte y podrá ver una cadena de conexión; con mucho cuidado solo cambie el nombre del servidor y listo.

Los enlaces para bajar la aplicación y el script están a continuación:
Programa completo
Script de creación de la BD

sábado, 9 de abril de 2011

Solución Examen Parcial (II) Miércoles 06 Abril 2011 - Matutino

Enunciado:
1) Crear una base de datos en SQL Server 2005 llamada Examen2
2) Crear una tabla llamada notas en la base Examen2 que tenga la siguiente estructura:

Campo Tipo
Carnet char(7)
Nombre varchar(50)
Asignatura varchar(50)
NotaPP int
NotaSP int
NotaTA int
NotaEF int
NotaFinal real

3) Crear un programa en visual basic 2008 que permita ingresar datos a
la tabla Notas.

4) La nota final se calculará en base a los parámetros de UCYT para los
cursos regulares.

5) El programa también deberá poder consultar las notas de un estudiante
y mostrar su estado (Aprobado o REPROBADo) en la barra de título

6) Se debe validar que las notas no sean menor que 0 ni mayor que 100
Si ingresara un dato en ese rango debe aparecer un mensaje de error
correspondiente.

SOLUCION:

Hay que diseñar un formulario para obtener o mostrar los datos al usuario. El diseño era parte del examen. Todo programador deber diseñar su propio formulario de acuerdo a su creatividad e ingenio. Una solución sencilla podría ser la siguiente:


El proyecto a realizar consta de un formulario.  Lo primero que hay que hacer es colocar al inicio del formulario dos líneas que nos permitirán tener acceso a la librería de datos ADO .NET para SQL Server.

Imports System.Data
Imports System.Data.SqlClient

Estas líneas se deben colocar al inicio del formulario, antes de la declaración de clase del formulario (Public Class Form1)

Para que nuestro sistema conecte al servidor SQL Server donde creamos la base de datos Examen2 necesitamos crear una cadena de conexión.  Es importante en este paso saber que usaremos la cadena de conexión por lo menos en dos puntos del programa y dos procedimientos diferentes, entonces para evitar estar digitando la cadena varias veces, se puede definir después de la declaración de la clase del formulario y antes de cualquier procedimiento.

Public Class Form1
    'Declararemos la conexión aquí para que esté visible a todos los procedimientos
    Dim cn As New SqlConnection("Data source=3PHPB01\SQLEXPRESS;Initial Catalog=Examen2;Integrated Security=true")


El botón Grabar (llamado btnGrabar) es el que hará el proceso de insertar el nuevo registro en la base de datos

Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click
        'Hay que validar las notas
        If Val(txtNotaPP.Text) < 0 Or Val(txtNotaPP.Text) > 100 Then
            MessageBox.Show("La nota del primer parcial no esta en el rango establecido...por favor revise")
            Exit Sub
        End If

        If Val(txtNotaSP.Text) < 0 Or Val(txtNotaSP.Text) > 100 Then
            MessageBox.Show("La nota del segundo parcial no esta en el rango establecido...por favor revise")
            Exit Sub
        End If

        If Val(txtNotaTA.Text) < 0 Or Val(txtNotaTA.Text) > 100 Then
            MessageBox.Show("La nota del trabajo acumulado no esta en el rango establecido...por favor revise")
            Exit Sub
        End If

        If Val(txtNotaEF.Text) < 0 Or Val(txtNotaEF.Text) > 100 Then
            MessageBox.Show("La nota del exámen final no esta en el rango establecido...por favor revise")
            Exit Sub
        End If

        'Calcular la nota final usando la función de usuario CalcularNotaFinal() y colocar el resultado
        'en la caja de texto.
        txtNotaFinal.Text = CalcularNotaFinal()

        'Si todo esta bien se sigue con la grabación de los datos
        Dim sql As String
        sql = "INSERT INTO Notas "
        sql &= "(Carnet, Nombre, Asignatura, NotaPP, NotaSP, NotaTA, NotaEF, NotaFinal)"
        sql &= "VALUES(@Carnet, @Nombre, @Asignatura, @NotaPP, @NotaSP, @NotaTA, @NotaEF, @NotaFinal)"

        Dim cmd As New SqlCommand(sql, cn)
        cmd.Parameters.AddWithValue("@Carnet", txtCarnet.Text)
        cmd.Parameters.AddWithValue("@Nombre", txtNombre.Text)
        cmd.Parameters.AddWithValue("@Asignatura", txtAsignatura.Text)
        cmd.Parameters.AddWithValue("@NotaPP", Val(txtNotaPP.Text))
        cmd.Parameters.AddWithValue("@NotaSP", Val(txtNotaSP.Text))
        cmd.Parameters.AddWithValue("@NotaTA", Val(txtNotaTA.Text))
        cmd.Parameters.AddWithValue("@NotaEF", Val(txtNotaEF.Text))
        cmd.Parameters.AddWithValue("@NotaFinal", CalcularNotaFinal())
        cn.Open()
        Dim i As Integer = cmd.ExecuteNonQuery()
        If i > 0 Then
            MessageBox.Show("Registro grabado...")
        Else
            MessageBox.Show("No se pudo guardar el registro...")
        End If
        cn.Close()
    End Sub

Comentando un poco el código, hemos hecho inicialmente la validación de las cajas de texto que corresponden a las notas para garantizar que estas no sean ni menor que 0 ni mayor que 100. La validación se puede hacer de diferentes maneras, la que se presenta no es la mejor pero la más simple. Nótese que el código se puede copiar cuatro veces solo cambiando el control de texto correspondiente. La función VAL convierte una expresión en un número. Se recomienda usar la funciones Convert (Ej. Convert.ToInt32(txtNotaPP.Text))

Si revisan el código, hemos utilizado una función llamada CalcularNotaFinal que calcula la nota final del estudiante en base a lo que hemos digitado en las cajas de texto. El uso de funciones simplifican el código que se escribe y lo deja más legible. La función es la siguiente:

Private Function CalcularNotaFinal() As Integer
        Dim npp, nsp, nta, nef As Integer
        npp = Val(txtNotaPP.Text)
        nsp = Val(txtNotaSP.Text)
        nta = Val(txtNotaTA.Text)
        nef = Val(txtNotaEF.Text)
        Dim notafinal As Integer
        notafinal = npp * 0.2 + nsp * 0.2 + nta * 0.2 + nef * 0.4
        Return notafinal
    End Function

Finalmente en el botón con los tres puntos (btnBuscar) hacemos la búsqueda del carnet del estudiante y mostramos los datos. Se evalúa la nota final y se coloca en la barra de titulo el estado del estudiante (APROBADO o REPROBADO)

  Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        'Validemos que ya hemos colocado un código de carnet
        If txtCarnet.Text = "" Then
            MessageBox.Show("No se ha digitado el código de carnet")
            Exit Sub
        End If

        Dim cmd As New SqlCommand("SELECT * FROM Notas WHERE Carnet = @Carnet", cn)
        cmd.Parameters.AddWithValue("@Carnet", txtCarnet.Text)
        cn.Open()
        Dim dr As SqlDataReader = cmd.ExecuteReader()
        If dr.Read() Then
            txtNombre.Text = dr("Nombre")
            txtAsignatura.Text = dr("Asignatura")
            txtNotaPP.Text = dr("NotaPP")
            txtNotaSP.Text = dr("NotaSP")
            txtNotaTA.Text = dr("NotaTA")
            txtNotaEF.Text = dr("NotaEF")
            txtNotaFinal.Text = dr("NotaFinal")

            'Colocar el estado de la nota en la barra de titulo
            If Val(txtNotaFinal.Text) >= 70 Then
                Me.Text = "Alumno : " & txtNombre.Text & " esta APROBADO "
            Else
                Me.Text = "Alumno : " & txtNombre.Text & " esta REPROBADO "
            End If
        Else
            MessageBox.Show("El carnet " & txtCarnet.Text & " no tiene notas registradas")
        End If
        cn.Close()
    End Sub

Y eso es todo. El programa completo lo pueden bajar en el siguiente enlace para que lo tengan. Es probable que lo usemos en clase.
Proyecto Completo en VB 2008
Script para crear la base de datos

El script para crear la base de datos Ejercicio2 es un archivo con las instrucciones para crear la BD.  Solo se requiere abrir en el SQL Management Studio (consola de SQL Server) y ejecutarlo.  No se preocupe si la base no aparecer, solo vaya al objeto Databases y con el botón derecho seleccione Refresh.

Hasta pronto.

jueves, 29 de julio de 2010

Ejercicio No. 1

Para este ejercicio es necesario tener en cuenta que necesitamos crear una base de datos en Sql Server 2005 ya sea  la versión gratis (SQL Server 2005 Express) o la de pago (SQL Server 2005 Standard.

1) Crear una base de datos llamada Prueba

2) Crear una tabla dentro de la base de datos Prueba con el nombre Coches.  La estructura de la tabla es la siguiente

Nombre
Campo
Tipo de Datos Tamaño Descripción
Matricula Varchar 10 Placa del vehículo.  Corresponde al identificador de la tabla
Marca Varchar 15 Marca del vehículo
Modelo Varchar 15 Modelo del vehículo
Kilómetros Int   Cantidad de Kilómetros recorridos por el vehículo
Costo Real   Costo por día del vehículo

La clave primaria de la tabla será el campo Matricula.

3) Una vez creada la tabla, procedemos a llenar algunos datos para que podamos utilizarla desde Visual Basic 2008

M-2125    Toyota        Yaris           70820    28
M-3150    Toyota        Corolla       50453    30
M-7315    Mitsubishi   Montero     15800    35
M-9817    Nissan         Sentra      140782    23

Ahora el programa.  Expliquemos primero que es lo que queremos hacer.  Imaginemos que tenemos una empresa de alquiler de vehículos y queremos hacer una pantalla donde tengamos un combo con las marcas de los vehiculos que tenemos disponibles y queremos seleccionar del combobox una marca y que en un listbox aparezcan los vehiculos disponibles.

El formulario final sería así:

Formulario1

Control Nombre
ComboBox cboMarca
Button1 btnMostrar
Button2 btnLimpiar
Button3 btnSalir
ListBox1 lstCoches
Imports System.Data
Imports System.Data.SqlClient
 
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Definir el arreglo de marcas y asignar algunos valores
        Dim aMarcas() As String = {"Mitsubishi", "Toyota", "Nissan", "Chevrolet"}
 
        'Cargar los datos en el combobox con las marcas de los vehiculos
        For i = 0 To aMarcas.Length - 1
            cboMarca.Items.Add(aMarcas(i))
        Next
 
    End Sub
 
    Private Sub btnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMostrar.Click
        'hay que validar primero que se ha seleccionado un valor
        'en el combobox
        If cboMarca.Text = "" Then
            MsgBox("No ha seleccionado una marca...")
            Exit Sub
        End If
 
        'Si llegamos hasta esta linea de código significa que ya habíamos
        'seleccionado una marca en el combo entonces nos conectamos a la base de datos
        ' y sacamos la información a través de un datareader
 
        '== Se define y abre la conexión
        Dim cn As SqlConnection = New SqlConnection("Data Source=D7PPS31\SQLEXPRESS;Initial Catalog=Prueba1;Integrated Security=true")
        cn.Open()
        '== Se crea un comando con la sentencia SELECT, INSERT, DELETE o UPDATE a utilizar
        Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM Coches WHERE Marca='" & cboMarca.Text & "'", cn)
        '== Se abre un datareader y se le asigna los datos que traerá el comando con sui
        '== metodo EXECUTEREADER
        Dim dr As SqlDataReader = cmd.ExecuteReader()
        '== Se crea un ciclo WHILE utilizando el método Read del datareader que permite
        '== obtener el valor verdadero o falso si lee o no datos
        While dr.Read()
            'Se añaden los campos que devuelve el datareader con un tabulador por medio cada
            'uno. Note que los campos que son numéricos hay que usar el método ToString()
            'al final para que los convierta a Texto
            lstCoches.Items.Add(dr("Matricula") + vbTab + dr("Modelo") + vbTab + dr("Kilometros").ToString() + dr("Costo").ToString())
        End While
 
        'Se cierra el datareader y la conexión
        dr.Close()
        cn.Close()
    End Sub
 
    Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
        'limpia el listbox
        lstCoches.Items.Clear()
    End Sub
 
    Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
        Me.Dispose()
        Me.Close()
    End Sub
End Class
  

ADO .NET y Visual Basic 2008 (Parte 3)

Para conectar una base de datos a ADO .NET y acceder a los datos, se utilizan las clases que vienen integradas al Visual Studio.  Estas clases están organizadas en varias librerías que se usan dependiendo del tipo de base de datos a utilizar.

System.Data
Se utiliza para todos las bases de datos.

System.Data.SqlClient
Para bases de datos SQL Server

System.Data.OleDb
Para acceder a fuentes de datos OLEDB como Microsoft Access, Excel, etc

ado_net_arq

En el gráfico anterior se muestra una idea de como funciona la arquitectura ADO .NET.  Se puede ver que existen objetos o clases específicas para cada proveedor de datos, estos son los objetos Connection, Command, DataReader y DataAdapter y otros que son independientes del origen de los datos, como son los DataSet.

Por ejemplo si usamos el proveedor de datos de Sql Server, los objetos se llamarán SqlConnection, SqlCommand, SqlDataReader, SqlDataAdapter.  Si usamos el OLEDB para conectar a una base de datos de Access por ejemplo, estos objetos seran OleDbConnection, OleDbDataReader, OleDbDataAdapter, OleDbCommand, etc.  Como el dataset es independiente del origen, este siempre se llamará Dataset.

De aqui en adelante usaremos el proveedor de SQL Server para ejemplificar el uso de cada objeto.

Siempre que se desee hacer uso de las librerías de acceso a datos, hay que colocar al inicio de cada clase, módulo o formulario dos instrucciones

Imports System.Data
Imports System.Data.SqlClient

La segunda instrucción cambiará dependiendo del proveedor de datos.  El siguiente código muestra un ejemplo de su uso

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub
End Class


Como puede observarse siempre se colocan las lineas Imports antes de cualquier instrucción.

 

Vamos a explicar cada uno de los objetos en forma breve

 



 

 

 

 

 

 

 

 

lunes, 19 de julio de 2010

Comentarios en el Blog

Pueden hacer comentarios en el post si tienen dudas respecto a lo impartido en clase, lo escrito en el blog o algun otro comentario.

Saludos

ADO .NET y Visual Basic 2008 (Parte 2)

Continuando con el tema anterior, el motor de un DBMS (Database Management System) o SGBD (Sistema Gestor de Base de Datos) se encarga de usar un lenguaje para la manipulación de los datos de forma eficiente.  Los datos están guardados en tablas y estas tablas a su vez tienen reglas de integridad relacional (Relaciones) y otras restricciones como clave primaria, tipos de datos, validación de columnas, etc. que permiten restringir el tipo de datos a utilizar, la seguridad de estos, etc.

Lenguaje SQL

Podemos manipular los datos desde el gestor de base de datos (en nuestro caso SQL Server) a través de las instrucciones DML (Data Manipulation Languaje).  También podemos crear objetos en la base de datos como tablas, vistas, procedimientos almacenados, disparadores, etc, a través de las instrucciones DDL (Data Definition Languaje), los dos parte del SQL.  SQL Server como tal contiene el lenguaje llamado T-SQL (Transact SQL) que contiene todas estas instrucciones.  Las instrucciones básicas de manipulación de datos son SELECT, INSERT, DELETE y UPDATE para consultar, agregar, borrar y modificar los datos respectivamente.

SELECT

Este comando se utiliza para leer una o más tablas.  Su sintaxis más sencilla se muestra a continuación

SELECT [campo1], [campo2]… [campoN]
FROM [Tabla1]
WHERE 
[campo1] = condición búsqueda
ORDER BY [campo1] ASC | DESC

Tomando como referencia la tabla creada en clase


Tablas


Por ejemplo si quisieramos obtener todos los vehículos marca Toyota de la tabla Coches tendríamos que hacer lo siguiente



SELECT * FROM Coches WHERE Marca = 'Toyota'

Tendríamos como resultado dos registros con la marca Toyota.  Para hacer esta consulta en SQL Server 2005 basta con presionar el botón “Nueva Consulta” o “New Query” y se abrirá una pantalla en blanco para ingresar este script, presionamos “Ejecutar” y listo tendremos los datos correspondientes.


image El comando SELECT tiene muchas variantes, es necesario para el curso de Programación II revisar los apuntes de Bases de Datos I y II para recordar toda su sintaxis y las diferentes formas en que se puede utilizar.


Se pueden agrupar los datos a través de las funciones de grupo, entre las cuales podremos sumar (SUM), contar (COUNT), promediar (AVG), etc


Por ejemplo si queremos tener un listado de cuantos vehiculos tenemos de cada marca podemos hacer lo siguiente



SELECT Marca, COUNT(Marca) 
FROM Coches
GROUP BY Marca

Revisen la documentación del SQL para que nos actualizemos con el uso de la sentencia SELECT


INSERT


La sentencia INSERT se utiliza para agregar nuevos registros a una tabla.  Su uso es casi siempre igual ya que su sintaxis no es muy compleja.



INSERT INTO [Tabla] ( [Campo1], [Campo2], …)
VALUES ('Valor1','Valor2',…)

Para ingresar un valor a la tabla Coches por ejemplo tendríamos que tener la siguiente instrucción



INSERT INTO Coches (Matricula, Marca, Modelo, Kilometros, CostoPorHora)
VALUES ('M-1111', 'Mitsubishi', 'Lancer',65432,7.89)





Consideraciones que hay que tener con el comando INSERT son las siguientes



  1. El comando INSERT generará un error si queremos ingresar un registro con la misma clave principal de un registro existente.

  2. Podemos omitir el ingreso de algunos campos siempre y cuando estos acepten valores nulos o no tengan referencia a claves foráneas.

  3. El orden en que se establecen los nombres de campos es el orden en que se establece los valores en la claúsula VALUES.

  4. Los datos tipo cadenas o caracteres siempre se colocan entre comillas simples. Los numéricos se escriben normal.  Los valores booleanos o lógicos se colocan como 0 para falso y 1 para verdadero.

DELETE


Es el comando más facil de usar, pero el más peligroso ya que sirve para eliminar registros de una tabla de la base de datos.  Su sintaxis es sencilla



DELETE FROM [Tabla]
WHERE [Campo1]=Condición

Si queremos por ejemplo borrar el registro ingresado en el ejemplo del insert, usaríamos la siguiente instrucción



DELETE FROM Coches
WHERE Matricula = 'M-1111'

Obsérvese que el campo utilizado en el Where corresponde a la clave primaria que identifica de forma única al registro que queremos eliminar.


Si no colocamos la sentencia WHERE eliminaríamos todos los registros de la tabla, lo cual sería un problema si no queremos ese resultado.


UPDATE


Se utiliza para actualizar uno o más campos de uno o más registros de una tabla de la base de datos.


Su sintaxis es la siguiente



UPDATE [Tabla]
SET [Campo1] = Nuevo Valor, [Campo2] = Nuevo Valor,...
WHERE [Campo1] = Condición

La claúsula WHERE se utiliza cuando queremos actualizar un solo registro y tenemos que establecer el valor de la clave principal del registro que queremos actualizar.  Por ejemplo si queremos cambiar el valor de Costo por hora del alquiler del Coche con matrícula M-3143 de 7.34 a 6.80 tendríamos que utlizar una instrucción como esta



UPDATE Coches
SET CostoPorHora = 6.80
WHERE Matricula = 'M-3143'

Si no colocáramos la claúsula WHERE la instrucción actualizaría todos los registros a 6.80.


Pero si por ejemplo quisieramos aumentar un 25% el costo por hora de los coches de marca Mitsubishi debido a un aumento de precio en los respuestos de esa marca deberiamos utilizar una instrucción como la siguiente



UPDATE Coches
SET CostoPorHora = CostoPorHora * 1.25
WHERE Marca='Mitsubishi'

La instrucción SET toma el costo por hora actual y lo multiplica po 1.25 con lo que le aumentamos el 25% al costo por hora y se lo asigna al campo con el mismo nombre.  Los vehículos que serán afectados por esta actualización son los que tengan como marca Mitsubichi.


Bueno, creo que es un resumen super rápido de lo que es el SQL y como se usan las instrucciones básicas.  Es bueno leer más sobre el T-SQL ya que es la base de las aplicaciones de Visual Basic con SQL Server y su uso con ADO.NET.


Hasta el próximo post.