Download ACCESO A DATOS DESDE VB .NET

Document related concepts

ADO.NET wikipedia , lookup

SQL Server Compact wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

Tabla (base de datos) wikipedia , lookup

Language Integrated Query wikipedia , lookup

Transcript
CONEXIÓN VB. NET - SQL SERVER
ACCESO A DATOS DESDE VB .NET
1. INTRODUCION:
Las aplicaciones de acceso a datos, forman casi de forma habitual, parte de una aplicación Windows
estándar. Sin lugar a dudas, en muchas ocasiones, nos resultará imprescindible acceder a fuentes de
datos. En esta sesión, veremos como acceder a fuentes de datos de forma sencilla, desde nuestro
entorno de desarrollo.
Desde Vb Net 2005 se puede acceder a las siguientes bases de datos, utilizando las clases adecuadas.
Oracle
SQL Server
Access
Las que se puedan acceder a través de ODBC.
2. ADO.NET
Si conoce el desarrollo de aplicaciones con versiones anteriores de Visual Basic a la tecnología .NET,
entonces le sonará algunos aspectos entre otros como ADO, DAO.
Visual Basic 2005 por su lado, ha visto de cerca el nacimiento de ADO.NET. Sin embargo, no es
recomendable comparar ADO.NET con los anteriores métodos de conexión a fuentes de datos. Nos
centraremos en la forma de conectar de Visual Basic 2005 con fuentes de datos a través de ADO.NET
2.0.
ADO.NET es por lo tanto, un conjunto de clases que nos permiten leer e interactuar con fuentes de datos
almacenadas en bases de datos y otras fuentes de almacenamiento de datos.
Estas clases de ADO.NET, las encontraremos dentro de System.Data. Entre todas las clases de este nombre
de espacio, destacaremos la clase DataView, DataSet y DataTable.
Si usted sabe, conoce o ha trabajado con RecordSet en anteriores versiones de Visual Basic, debe saber que
ahora, podremos hacer lo mismo con los objetos DataSet y DataReader.
Pero sobre todo, algo que destaca a ADO.NET sobre otros métodos de acceso, es que nos permite el
desarrollo de aplicaciones en n-capas. Todo esto, unido a la posibilidad de trabajar con estándares como
documentos XML, nos proporciona una intercomunicación entre entornos y dispositivos que está
asegurada.
Aún y así, existe otro detalle a tener en cuenta a la hora de trabajar con fuentes de datos junto a las
clases y objetos de la tecnología .NET, y es que podemos trabajar con fuentes de datos conectadas o
fuentes de datos desconectadas. La diferencia entre ellas, es la que veremos de forma breve a
continuación.
¿Acceso conectado o acceso desconectado?
Cuando trabajamos con fuentes de datos dentro de la tecnología .NET, podemos trabajar con fuentes de datos
conectadas o fuentes de datos desconectadas.
La diferencia entre ambos métodos de conexión es clara. Por un lado, el trabajo con fuentes de datos
conectadas, requiere que exista un canal de comunicación existente entre la aplicación y la fuente de datos
en todo momento. De esta manera, la conectividad con la aplicación, la apertura de la conexión, etc., que es
la tarea más pesada en la comunicación de una aplicación con una fuente de datos, permanece abierta
mientras se trabaja con la fuente de datos, estemos en un instante dado manipulando datos de la fuente de
datos o no. Por decirlo de otra forma, la puerta de acceso la hemos dejado abierta y pasaremos de una
habitación a otra y viceversa cuando queramos.
Por otro lado, el trabajo con fuentes de datos desconectadas, requiere que cuando se accede a la
base de datos, se recoja no sólo una copia de los datos con los que vamos a trabajar, sino que además
se almacene una copia de la estructura de la tabla o tablas que hemos decidido descargar y otros datos
relacionados con las tablas. En sí, es una copia exacta o una foto exacta de los datos de la tabla o tablas
~1~
Ing. Henry M. Arévalo Flores
CONEXIÓN VB. NET - SQL SERVER
y de todas las características de la tabla o tablas. Por lo tanto, se abre un canal de comunicación, se
recogen los datos para trabajar con ellos y se cierra nuevamente el canal de comunicación. Esos datos se
almacenan en memoria, y se trabaja por lo tanto, con los datos de memoria, no con la fuente de datos
directamente como en el caso anterior dónde trabajábamos con fuentes de datos conectadas.
La única particularidad a tener en cuenta en este último caso, es que como lógicamente haremos una
copia de la estructura, propiedades, características y datos de la tabla o tablas con las que queremos
trabajar de forma desconectada, no es muy recomendable por no decir totalmente prohibido, hacer una
copia de cualquier tabla, ya que podemos sobrecargar la aplicación y afectar considerablemente en el
rendimiento de ésta.
3. LAS CLASES.
Cada base de datos dispone de una clase especializada en el manejo de la misma.
Oracle
OracleClient
SQL
SQLClient
Access
OleDb
Odbc
ODBC
Genérico
DB
Y estas clases están disponibles en el espacio de nombres System.Data. Como vamos a centrarnos en SQL,
la clase que utilizaremos será SQLClient.
Imports System.Data.SqlClient
4. LOS OBJETOS.
Podemos clasificarlos o agruparlos en
Conexión.
Almacenamiento.
Visualización.
Otros.
3.1. Conexión.
El objeto de conexión en SQL Server es el SqlConnection. Permite definir los datos necesarios
para acceder a cada tipo de base de datos.
Otro objeto de conexión, es el DataAdapter. Este objeto permite realizar el acceso a la base de
datos para el intercambio de información en los dos sentidos, digamos que gestiona los datos
entre la base de datos y la aplicación a partir de los datos facilitados en la conexión.
Pertenece a Imports System.Data.Odbc.OdbcDataAdapter.
Cada objeto de almacenamiento debe tener un objeto DataAdapter asignado, pues es el que a
través del cual puede hacerse luego el proceso de actualización.
3.2. Almacenamiento.
Los objetos de almacenamiento son:
DataReader System.Data.Odbc.OdbcDataReader
El objeto DataReader es un objeto ágil y que esta especializado en almacenar datos para solo lectura,
lo que le quita la gestión de las actualizaciones y le permite ser más rápido en los accesos a los
datos de la base de datos.
DataTable System.Data.DataTable
El objeto DataTable, es lo más parecido a una tabla de la base de datos, dispone de la posibilidad de
definir clave primaria de uno o varios campos.
El DataTable puede ser la imagen de una tabla de la base de datos, o puede ser el resultado de una SQL
que combine varias tablas en la SQL, o tabla virtual si queremos llamarla así. Este objeto en el uso
del DataSet es usado como parte del DataSet.
DataSet System.Data.DataSet
El objeto DataSet es lo que hemos dado en llamar antes un subconjunto de la base de datos de
nuestra aplicación. Al iniciar el programa se carga con aquellos datos que sean necesarios para el
~2~
Ing. Henry M. Arévalo Flores
CONEXIÓN VB. NET - SQL SERVER
mismo, se cierra la conexión y luego se realiza la actualización de los datos en la base de datos con
los cambios que haya habido en el programa.
DataRow System.Data.DataRow
El objeto DataRow, lo hemos incorporado como elemento de almacenamiento, aunque hace
referencia a una fila, registro de la base de datos, porque hemos comprobado lo útil que llega a ser el
uso del mismo, y al fin y al cabo almacena datos, un registro, pero datos.
3.3. Visualización.
Los objetos de visualización puede ser cualquiera de los que tenemos disponibles en el entorno de
programación.
Lo importante aquí es como utilizarlos a la hora de visualizar los datos de nuestra fuente de
almacenamiento.
Podríamos hablar de dos posibilidades.
Asignación clásica de los datos, o enlazarlos a nuestra fuente de datos. Las dos son
válidas evidentemente, pero hay que ver la practicidad.
El enlazado de un DataDrid a nuestro DataTable es comodísimo, pues se encarga de representar los datos
que vamos incluyendo en la tabla, sea la origen o una virtual.
El enlazado de un TextBox a un objeto crea el mismo código que hacer una asignación manual o
clásica.
La clase DataView, por otro lado, nos permite crear múltiples vistas de nuestros datos para
presentar los datos de su correspondiente DataTable posteriormente. Adicionalmente a esto,
también podemos ordenar y filtrar los datos, buscar y navegar un conjunto de datos dado,
etc.
4.4. Otros.
Estos objetos pueden ser:
BindingSource
CommandBuilder
Command
BindingSource, este objeto es el que hace de puente entre aquellos objetos que no disponen de la
propiedad DataSource y el objeto fuente de los datos.
CommandBuilder, genera de forma automática código SQL para las opciones Insert, Update y
Delete, tanto para el uso normal, como para cuando se utiliza el DataAdapter en el entorno de un
DataSet.
Command, sirve para indicar, almacenar y ejecutar cuando proceda, la instrucción SQl, sea
almacenada o incrustada, para un objeto DataReader o DataAdapter.
Tiene dos formatos de utilización,
ExecuteNonQuery se ejecuta y no devuelve datos, borrado por ejemplo.
ExecuteReader se ejecuta y devuelve una colección de datos que se asignan a un objeto.
~3~
Ing. Henry M. Arévalo Flores
CONEXIÓN VB. NET - SQL SERVER
Crear un nuevo proyecto:
Y lo guardamos en una carpeta de trabajo:
Y agregamos un modulo para crear la cadena de conexión:
En la parte donde se encuentra el nombre del server debe de ir el nombre de tu servidor de base de
datos.
~4~
Ing. Henry M. Arévalo Flores
CONEXIÓN VB. NET - SQL SERVER
Diseñar el siguiente Menú Principal, recuerde que el formulario debe de ser un contenedor MDI.
Opciones del Menú Mantenimiento.
Adjunte la Base de Datos que se encuentra guardado en su carpeta de trabajo.
~5~
Ing. Henry M. Arévalo Flores
CONEXIÓN VB. NET - SQL SERVER
DISEÑO DE INTERFAZ PROPUESTA
Formulario que permitirá el mantenimiento de la tabla Alumno.
txtCodigo
Nombre: cboSexo
Items:
- Masculino
- Femenino
txtApellidos
txtNombres
dtFecha
Format: short
txtDireccion
txtEmail
btnPrimero
btnAnterior
btnSiguiente
btnUltimo
btnBuscar
btnNuevo
btnEditar
btnGuardar btnDeshacer
btnEliminar
dtgAlumno
~6~
Ing. Henry M. Arévalo Flores
CONEXIÓN VB. NET - SQL SERVER
CÓDIGO PARA CONECTAR EL FORMULARIO A LA TABLA ALUMNO
'importamos el SqlClient
Imports System.Data.SqlClient
Public Class FrmAlumno
'DECLARAMOS LAS VARIABLES
Dim conn As New SqlConnection
Dim objDataAdapter As SqlDataAdapter
Dim objDataSet As DataSet
Public posicion, flag As Integer
'CREAMOS LOS PROCEDMIENTOS
‘ Crear los siguientes Procedimientos
Private Sub conexion()
'crear la cadena de conexion
conn.ConnectionString = cadena
'crear el dataAdapter
Me.objDataAdapter = New SqlDataAdapter("SELECT * FROM ALUMNO", conn)
'genera de forma automática código SQL para las opciones Insert, Update y Delete() Dim
comandbuilder As SqlCommandBuilder = New SqlCommandBuilder(objDataAdapter)
'instanciar el dataSet
objDataSet = New DataSet()
'abrir conexion
conn.Open()
'agrega las filas al dataset recuperadas desde la tabla
Me.objDataAdapter.Fill(objDataSet, "ALUMNO")
'cierra la conexion
conn.Close()
'indica la posicion actual del registro
posicion = 0
'llamar el procedimiento
Me.cargadatos()
End Sub
Private Sub cargadatos()
'obtener un objeto con la fila actual
Dim fila As DataRow 'obtener fila actual
'obtener la fila actual
fila = Me.objDataSet.Tables("ALUMNO").Rows(Me.posicion) 'PASAR
CONTENIDO A LOS CAMPOS
Me.txtCodigo.Text = fila("alu_codi")
Me.TxtApellidos.Text = fila("alu_apel")
Me.TxtNombres.Text = fila("alu_nomb")
Me.cboSexo.Text = fila("alu_sexo")
Me.txtDireccion.Text = fila("alu_dire")
Me.txtEmail.Text = fila("alu_mail")
Me.dtfecha.Value = fila("alu_fnac")
'conectar
el dataGridView con la tabla
Me.DtgAlumno.DataSource = objDataSet.Tables(0)
'SELECCIONAR TODA LA FILA del dataGridView With
dtgAlumno
.MultiSelect = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
End With
'Asignar el estilo del DatagridView
Me.dtgAlumno.Font = _
New Drawing.Font("Tahoma", 8, FontStyle.Regular, GraphicsUnit.Point)
'RELACIONAR REGISTRO CON DATAGRIDVIEW
dtgAlumno.Rows(posicion).Selected = True
dtgAlumno.Rows(posicion).Cells(0).Selected = True
'Cambiando de Nombre
a los encabezados
dtgAlumno.Columns("alu_codi").HeaderText
dtgAlumno.Columns("alu_apel").HeaderText
dtgAlumno.Columns("alu_nomb").HeaderText
dtgAlumno.Columns("alu_sexo").HeaderText
dtgAlumno.Columns("alu_dire").HeaderText
dtgAlumno.Columns("alu_fnac").HeaderText
dtgAlumno.Columns("alu_mail").HeaderText
'estableciendo el ancho de las columnas
dtgAlumno.Columns("alu_codi").Width
=
dtgAlumno.Columns("alu_apel").Width = 80
~7~
de las columnas
= "Código"
= "Apellidos"
= "Nombres"
= "Sexo"
= "Dirección"
= "Fecha Nac"
=
"Correo
Electronico"
40
Ing. Henry M. Arévalo Flores
CONEXIÓN VB. NET - SQL SERVER
dtgAlumno.Columns("alu_nomb").Width
=
80
dtgAlumno.Columns("alu_sexo").Width
=
30
dtgAlumno.Columns("alu_dire").Width = 80
dtgAlumno.Columns("alu_fnac").Width = 40
dtgAlumno.Columns("alu_mail").Width = 80 End
Sub
‘llamamos al procedimiento conexion()desde el evento Load del Formulario
Private Sub FrmAlumno_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
conexion()
End Sub
CODIGO PARA LOS BOTONES DE DESPLAZAMIENTO
Private Sub btnPrimero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnPrimero.Click
Me.posicion = 0
Me.cargadatos()
End Sub
Private Sub btnAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnAnterior.Click
'si estamos en el ultimo registro no hacer movimiento If
Me.posicion = 0 Then
MessageBox.Show("Primer
Registro")
Else
'incrementar el marcador de registro y actualizar los controladores con lños datos del registro
actual
Me.posicion -= 1
Me.cargadatos() End If
End Sub
Private Sub btnSiguiente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnSiguiente.Click
'si estamos en el ultimo registro no hacer movimiento
If Me.posicion = (Me.objDataSet.Tables("ALUMNO").Rows.Count - 1) Then
MessageBox.Show("Ultimo Registro")
Else
'incrementar el marcador de registro y actualizar los controladores con los datos del registro
actual
Me.posicion += 1
Me.cargadatos() End If
End Sub
Private Sub btnUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnUltimo.Click
Me.posicion
= (Me.objDataSet.Tables("ALUMNO").Rows.Count
- 1)
Me.cargadatos()
End Sub
~8~
Ing. Henry M. Arévalo Flores