Sunteți pe pagina 1din 26

Acceso a Datos

Visual Basic .NET 2005




Captulo I
Acceso a datos
Lectura de datos
Insercin
Actualizacin
Eliminacin
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

2
Acceso a datos
En este captulo realizaremos una conexin, lectura, insercin, actualizacin y eliminacin de datos
creandoaplicacionesenVisualBasic.NET2005conelFramework2.0atravsdelSQLServer2000.
Crear un nuevo proyecto denominado WAccesoDatos, la tabla a consultar ser Products de la BD
NorthWind.
DespusdecrearelproyectoagregarlasReferenciasparapoderaccederalosDatoscomoloindicaen
laFig.01:

Fig.01:AgregarReferenciasalProyecto
Respectoalcdigodelformulario,primerovamosadeclararvariosobjetosdeaccesoadatosanivelde
laclaseparapodertenerlosdisponiblesendiversosmtodos.VeamoselCdigofuenteenlaFig.02:

Fig.02:VariablesdeclaradasconlosObjetosparaelAccesoaDatos
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

3
En el formulario del proyecto agregamos un DataGridView para poder mostrar los datos a enlazar,
quedandoelForm1delasiguientemaneracomosemuestraenlaFig.03:

Fig.03:Formulario(Form1)conelDataGridView(dgVer)
En el siguiente paso escribiremos el cdigo dentro del evento Load del formulario, el cual se ocupa de
crear la conexin con la BD, crear el DataAdapter con la consulta, cargar el DataSet, y asignrselo al
DataGridatravsdesupropiedadDataSource.VerlaFig.04
UnavezescritoelcdigocorrectamentecomoseencuentraenlaFig.04sepasaaejecutarelformulario
ydebedemostrarlosdatosconsultadostalcomosemuestranenlaFig.05

Fig.05:FormularioconlosDatosmostradosenelDataGrid
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

Fig.04:CdigoparapoderAccederalosDatosdelaTablaProductsdeNorthwind
Noolvidarqueenlalneadecdigodeconexin:
cnx = ("server=Srv01;database=Northwind;Trusted_Connection=True")
En la parte donde se encuentra el nombre del server debe de ir el nombre de tu servidor de base de
datosenestecasoelmoesSrv01.

AccesoaDatosconVB.NET2005
Ing.EduardoReyes

5
Lectura de datos
DataReader
En esta parte realizaremos una lectura (consulta de datos) utilizando objetos DataReader, un objeto
DataReader permite la navegacin hacia delante y de slo lectura, de los registros devueltos por una
consulta.
Ahora crearemos dentro del proyecto denominado WAccesoDatos un nuevo formulario al cual lo
llamaremosfrmLeerDatos,luegoagregamoslossiguientescontrolesloscualesnosmostraranelusode
objetosDataReader.
Control Name
Button1 btnEmpleados
Button2 btnCliProd
ListBox1 lstEmpleados
ListBox2 lstClientes
ListBox3 lstProductos

Despus de agregar los controles que describimos anteriormente, el formulario frmLeerDatos debe de
quedarcomosemuestraenlaFig.06.

Fig.06:FormulariofrmLeerDatos
Ahora realizaremos la codificacin del botn Empleados creando a partir de un comando, un objeto
DataReader que recorreremos para llenar un ListBox (lstEmpleados) con los valores de una de las
columnasdelatablaqueinternamentecontieneelDataReader.VerlaFig.07.
DespusrealizamoslacodificacindelbotnClientes/ProductosquetendrunobjetoCommandelcual
puedeestarbasadoenmltiplessentenciasSQL,separadasporelcarcterdepuntoycoma(;),quese
ejecutenenlote.AlcrearunDataReaderdesdeuncomandodeestetipo,podemosrecorrerelconjunto
deconsultasmedianteelmtodoNextResult()delDataReader.Unejemplodeestetipolotenemosal
pulsarelbotnClientes/Productosdelformulario,cuyafuentevemosacontinuacinenlaFig.08.
La Fig. 09 muestra al formulario despus de haber rellenado los controles ListBox usando objetos
DataReader.
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

Fig.07:CdigodelBotnEmpleados.

Fig.08:CdigodelBotnClientes/Productos.

AccesoaDatosconVB.NET2005
Ing.EduardoReyes

Fig.09:ListBoxllenadosconlosobjetosDataReader
DataSet
DataSet pertenece al conjunto comn de clases de ADO .NET, emplendose para todo tipo de
proveedores,porloquenoexisteunaversinparticularparaSqlClientuOleDb.
En el formulario frmLeerDatos agregar los siguientes controles el cual nos servir para realizar un
sencilloejemplodecreacindeunobjetoDataSetquellenaremosconunDataAdapter.Unavezlistoel
DataSet,recorreremoslatablaquecontieneymostraremosvaloresdesuscolumnasenunListBox.
Control Name
Button1 btnCustomers
ListBox1 lstCustomers

Despusdeagregarloscontrolesquedescribimosanteriormenteelformulariodebedequedarcomose
muestraenlaFig.10.

Fig.10:FormulariofrmLeerDatos
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

8
AhoracodificamosdelbotnCustomerscreandounaconsultaapartirdeunDataAdapter,unavezlisto
el DataSet recorreremos el ListBox (lstCustomers) para recorrer y mostrar los datos de una de las
columnasdelatablaCustomers.VerlaFig.11.

Fig.11:CdigodelBotnCustomers

La Fig. 12 muestra al formulario despus de haber rellenado los controles ListBox usando objetos
DataSet.

Fig.12:ListBoxllenadosmedianteunDataSet

AccesoaDatosconVB.NET2005
Ing.EduardoReyes

9
Insercin
DataAdapter
Los objetos DataAdapter (SqlDataAdapter y OleDbDataAdapter) van a desempear el papel de puente
entreelorigendedatosyelDataSet,permitindonoscargarelDataSetconlainformacindelafuente
dedatos,yposteriormente,actualizarelorigendedatosconlainformacindelDataSet.
Un objeto DataAdapter puede contener desde una sencilla sentencia SQL, como hemos visto en el
apartadoanterior,hastavariosobjetosCommand.
La clase DataAdapter dispone de cuatro propiedades, que nos van a permitir asignar a cada una, un
objeto Command (SqlCommand u OleDbCommand) con las operaciones estndar de manipulacin de
datos.Estaspropiedadessonlassiguientes.
InsertCommand.ObjetodelaclaseCommand,quesevaautilizarpararealizarunainsercinde
datos.
SelectCommand.ObjetodelaclaseCommandquesevaautilizarparaejecutarunasentencia
SelectdeSQL.
UpdateCommand. Objeto de la clase Command que se va a utilizar para realizar una
modificacindelosdatos.
DeleteCommand.ObjetodelaclaseCommandquesevaautilizarpararealizarunaeliminacin
dedatos.
UnmtododestacabledelasclasesSqlDataAdapter/OleDbDataAdaptereselmtodoFill(),queejecuta
elcomandodeseleccinqueseencuentraasociadoalapropiedadSelectCommand,losdatosobtenidos
delorigendedatossecargarnenelobjetoDataSetquepasamosporparmetro.
Para ver el uso de los objetos DataAdapter vamos a crear un formulario y lo llamaremos
frmInsertaDatosluegoagregamoslossiguientescontroles.
Control Name
DataGridView grdDatos
TextBox1 txtPrograma
TextBox2 txtDescripcion
Label1 lblPrograma
Label2 lblDescripcion
Button btnGrabar

En esta aplicacin vamos a utilizar el objeto DataAdapter para realizar una consulta en la tabla Region
delaBDNorthwindconlacualvenimostrabajandoeinsertarnuevasfilasenesamismatabla.Despus
deagregarloscontrolesquedescribimosanteriormenteelformulariodebedequedarcomosemuestra
enlaFig.13.
Respectoalcdigodelformulario,enprimerlugar,vamosadeclararvariosobjetosdeaccesoadatosa
niveldelaclaseparapodertenerlosdisponiblesendiversosmtodos.VeamoslaFig.14.
EnelsiguientepasoescribiremoselprocedimientodeleventoLoaddelformulariofrmInsertaDatos,yel
mtodo CargaDatos( ), que se ocupa de cargar el DataSet, y asignrselo al DataGrid a travs de su
propiedad DataSource. Observe el lector que en el mtodo CargarDatos( ) lo primero que hacemos es
vaciarelDataSet,puestoqueesteobjetoconservalosdatosdetablasyregistros;enelcasodequeno
limpiramoselDataSet,seacumularanlassucesivasoperacionesdellenadodefilassobrelatablaque
contiene.VeamoslaFig.15.
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

10

Fig.13:FormulariofrmInsertaDatos

Fig.14:VariablesdeclaradasdentrodelfrmInsertaDatos


Private Sub frmInsertaDatos_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'crear conexin
oConexion = New SqlConnection
oConexion.ConnectionString = "Server=Srv01;Database=Northwind;uid=sa;pwd=;"
'crear adaptador
oDataAdapter = New SqlDataAdapter
'crear comandos de insercion
'consulta con sus parametros y asignarlos al adaptador
Dim oCmdInsercion As New SqlCommand("INSERT INTO Region" & _
"(RegionId, RegionDescription) VALUES(@IdRegion,@Region)", oConexion)
oDataAdapter.InsertCommand = oCmdInsercion
oDataAdapter.InsertCommand.Parameters.Add(New SqlParameter("@IdRegion",
SqlDbType.Int))
oDataAdapter.InsertCommand.Parameters.Add(New SqlParameter("@Region",
SqlDbType.NVarChar))
Dim oCmdConsulta As New SqlCommand("SELECT * FROM Region", oConexion)
oDataAdapter.SelectCommand = oCmdConsulta
'crear conjunto de datos
oDataSet = New DataSet
'llamar procedimiento
Me.CargaDatos()
End Sub

AccesoaDatosconVB.NET2005
Ing.EduardoReyes

11

Private Sub CargaDatos()
'limpiamos el conjunto de datos
oDataSet.Clear()
'abrir conexion
oConexion.Open()
'utilizar el adaptador para llenar el dataset con la tabla
oDataAdapter.Fill(oDataSet, "Region")
'cerrar conexion
oConexion.Close()
'enlazar el dataset con el datagrid
'en DataSource se asigna el dataset
'en DataMember el nombre de la tabla del dataset que mostrar el datagrid
Me.grdDatos.DataSource = oDataSet
Me.grdDatos.DataMember = "Region"
End Sub

Fig.15:CdigodeleventoLoaddelfrmInsertaDatos
Finalmente, en el botn Grabar, escribiremos las instrucciones para insertar un nuevo registro en la
tablaRegion,elcualsecodificaracomoseveenlaFig.16.

Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnGrabar.Click
Dim iResultado As Integer
'asignar los valores a los parametros para el comando insercion
oDataAdapter.InsertCommand.Parameters("IdRegion").Value = Me.txtRegion.Text
oDataAdapter.InsertCommand.Parameters("Region").Value = Me.txtRegion.Text
'abrir conexion
oConexion.Open()
'ejecutar comando de insercion del adaptador
iResultado = oDataAdapter.InsertCommand.ExecuteNonQuery()
'cerrar conexion
oConexion.Close()

Me.CargaDatos()

MessageBox.Show("Registros Aadidos:" & iResultado)
End Sub

Fig.15:CdigodelBotnGrabarparaInsertarnuevasRegiones
UnavezcodificadotodoslosprocedimientosejecutamoslaaplicacinlacualvemosenlaFig.16.

Fig.16:FormularioconunNuevoRegistroInsertado
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

12
Actualizacin
Para poder realizar una actualizacin de datos, crearemos dentro del evento Load un objeto
CommandBuilder, pasndole como parmetro el DataAdapter. Como ya sabemos, un DataAdapter
contiene una serie de objetos Command para las operaciones de consulta, insercin, etc. La misin en
este caso del objeto CommandBuilder, es la de construir automticamente tales comandos y
asignrselosalDataAdapter,ahorrndonosesetrabajodecodificacin.
Para poder hacer uso de un objeto CommandBuilder vamos a crear un formulario y lo llamaremos
frmActualizaDatosluegoagregamoslossiguientescontroles.
Control Name
DataGridView grdDatos
Button btnActualizar

En esta aplicacin vamos a utilizar el objeto DataAdapter para realizar una consulta en la tabla Region
de la BD Northwind con la cual venimos trabajando y actualizar filas en esa misma tabla. Despus de
agregarloscontrolesquedescribimosanteriormenteelformulariodebedequedarcomosemuestraen
laFig.17.

Fig.17:FormulariofrmActualizaDatos
En el siguiente paso escribiremos el procedimiento del evento Load del formulario frmActualizaDatos,
cargamos el DataSet, y lo asignamos al DataGrid a travs de su propiedad DataSource y DataMember,
luegocodificamoseleventoclickdelbtnActualiza.VeamoslaFig.18.
UnavezcodificadoeleventoloaddelfrmActualizaDatosyeleventoclickdelbtnActualizaejecutamosla
aplicacinlacualvemosenlaFig.19.


AccesoaDatosconVB.NET2005
Ing.EduardoReyes

13
Dim oCn As SqlConnection
Dim oDs As DataSet
Dim oDa As SqlDataAdapter


Private Sub frmActualizaDatos_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
'crea conexion
oCn = New SqlConnection
oCn.ConnectionString = "Server=Srv01;Database=Northwind;uid=sa;pwd=;"
'crear adaptador y realizar la consulta
oDa = New SqlDataAdapter("SELECT * FROM Region", oCn)
'crear command builder
Dim oCb As SqlCommandBuilder = New SqlCommandBuilder(oDa)
'crear dataset
oDs = New DataSet
oDa.Fill(oDs, "Region")
'agregar dataset al datagrid
Me.grdDatos.DataSource = oDs
Me.grdDatos.DataMember = "Region"
End Sub

Private Sub btnActualiza_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles btnActualiza.Click
oDa.Update(oDs, "Region")
End Sub

Fig.18:CdigodeleventoLoaddelFormularioeleventoclickdelBotnActualizar

Fig.19:FormulariofrmActualizaDatosconunRegistroModificado

AccesoaDatosconVB.NET2005
Ing.EduardoReyes

14
Eliminacin
Parapoderrealizarlaeliminacindefilasesalgodiferentealoquevenimoshaciendoanteriormente,a
lahoradeobtenerlafilaaborrartenemosquehacerlomedianteunobjetoDataRow,procediendoasu
borradoconelmtodoDelete().
Para actualizar los borrados realizados, empleamos el mtodo GetChanges( ) del objeto DataTable,
obteniendo a su vez un objeto table slo con las filas borradas, dicha informacin que pasaremos al
DataAdapter,paraqueactualicelainformacinenelorigendedatos.
ParapoderhacerusodeunobjetoDataRowyDataTablevamosacrearunformularioylollamaremos
frmEliminaDatosluegoagregamoslossiguientescontroles.
Control Name
DataGridView grdDatos
Button btnEliminar

Despusdeagregarloscontrolesquedescribimosanteriormente,elformulariodebedequedarcomose
muestraenlaFig.20.

Fig.20:FormulariofrmEliminaDatos
EnelsiguientepasoescribiremoselcdigodeleventoLoaddelformulariofrmEliminaDatos,cargamosel
DataSet, y lo asignamos al DataGrid a travs de su propiedad DataSource y DataMember, luego
codificamos el evento click del btnEliminar, declarando una variable para poder identificar la fila del
datagridaeliminaratravezdelusodesuspropiedades.VeamoslaFig.21.
Una vez codificado el evento load del frmEliminaDatos y el evento click del btnElimina ejecutamos la
aplicacinlacualvemosenlaFig.22.

AccesoaDatosconVB.NET2005
Ing.EduardoReyes

15

Dim oCn As SqlConnection
Dim oDs As DataSet
Dim oDa As SqlDataAdapter

Private Sub frmEliminaDatos_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
'crea conexion
oCn = New SqlConnection
oCn.ConnectionString = "Server=Srv01;Database=Northwind;uid=sa;pwd=;"
'crear adaptador y realizar la consulta
oDa = New SqlDataAdapter("SELECT * FROM Region", oCn)
'crear commandbuilder
Dim oCb As SqlCommandBuilder = New SqlCommandBuilder(oDa)
'crear dataset
oDs = New DataSet
oDa.Fill(oDs, "Region")
'agregar dataset al datagrid
Me.grdDatos.DataSource = oDs
Me.grdDatos.DataMember = "Region"
End Sub

Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnEliminar.Click
Dim oDataRow As DataRow
Dim iPosicFilaActual As Integer

iPosicFilaActual = 0
iPosicFilaActual = CInt(grdDatos.Item(0, grdDatos.CurrentRow.Index - 1).Value)
' obtener el objeto fila, de la tabla del dataset
' en el que estamos posicionados
oDataRow = oDs.Tables("Region").Rows(iPosicFilaActual)
oDataRow.Delete() ' borrar la fila
' mediante el mtodo GetChanges(), obtenemos una tabla
' con las filas borradas
Dim oTablaBorrados As DataTable
oTablaBorrados = oDs.Tables("Region").GetChanges(DataRowState.Deleted)
' actualizar en el almacn de datos las filas borradas
oDa.Update(oTablaBorrados)
' confirmar los cambios realizados
oDs.Tables("Region").AcceptChanges()
End Sub

Fig.21:CdigodeleventoLoaddelFormularioeleventoclickdelBotnEliminar

Fig.22:FormulariofrmEliminaDatosconunRegistroEliminado




Captulo II
Navegacin de registros
Relacionar tablas
Filtrar tablas
Seleccionar y mostrar registros

AccesoaDatosconVB.NET2005
Ing.EduardoReyes

17

Navegacin de registros
Pararealizarlanavegacinatravsdelosregistrosdeunatabla,debemosdesaberquelaarquitectura
de ADO .NET est orientada a un modelo de trabajo desconectado sobre el almacn de datos, al que
recurriremosslocuandonecesitemosobtenerlosdatosparasuconsultaymanipulacin.
El objeto DataSet, combinado con un grupo de objetos enfocados al mantenimiento de datos
desconectados,comosonDataAdapter,DataTable,DataRow,etc.,nosvaapermitirrealizarlatareade
navegarentrelosregistrosdeunatabladelDataSet.
ElproyectosedenominaraWAccesoDatos,latablaaconsultarserCustomersdelaBDNorthWind.Una
vezcreadoelnuevoproyectoenVB.NET,importaremoselespaciodenombresSystem.Data.SqlClient,y
declararemos a nivel de clase un conjunto de variables para la manipulacin de los datos. Veamos la
figura23.

Imports System.Data.SqlClient

Public Class frmNavegaRegistros
Inherits System.Windows.Forms.Form
'Variables a nivel de clase
'para la manipulacin de los datos
Private oDa As SqlDataAdapter
Private oDs As DataSet
Private iPosFilaActual As Integer

End Class

Fig.23:Variablesdeclaradas
Ahora disearemos el formulario denominado frmNavegaRegistros, para eso agregamos los siguientes
controles,loscualesnospermitirrealizarlasoperacionesmencionadas.

Control Name
Label1 lblIDCliente
Label2 lblCliente
Label3 lblContacto
Label4 lblDireccion
Label5 lblFono
TextBox1 txtIDCliente
TextBox2 txtCliente
TextBox3 txtContacto
TextBox4 txtDireccion
TextBox5 txtFono
Button1 btnPrimero
Button2 btnAvanza
Button3 btnRetrocede
Button4 btnUltimo
GroupBox1 gbxClientes
GroupBox2 gbxNavegar

Despusdeagregarloscontrolesquedescribimosanteriormente,elformulariodebedequedarcomose
muestraenlaFig.24.
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

18

Fig.24:FormulariofrmNavegaRegistros
Como siguiente paso, escribiremos el manipulador del evento Load del formulario y un mtodo para
cargarlosdatosdelregistroactualenloscontrolesdelformulario,elCdigosemuestraenlafigura25.

Private Sub frmNavegaRegistros_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' crear conexin
Dim oConexion As SqlConnection
oConexion = New SqlConnection()
oConexion.ConnectionString = "Server=Srv01;" & _
"Database=Northwind;uid=sa;pwd=;"
' crear adaptador
Me.oDa = New SqlDataAdapter("SELECT * FROM Customers", oConexion)
' crear commandbuilder
Dim oCommBuild As SqlCommandBuilder = New SqlCommandBuilder(oDa)
' crear dataset
Me.oDs = New DataSet()
oConexion.Open()
' llenar con el adaptador el dataset
Me.oDa.Fill(oDs, "Customers")
oConexion.Close()
' establecer el indicador del registro a mostrar de la tabla
Me.iPosFilaActual = 0
' cargar columnas del registro en los controles del formulario
Me.CargarDatos()
End Sub
Private Sub CargarDatos()
' obtener un objeto con la fila actual
Dim oDataRow As DataRow
oDataRow = Me.oDs.Tables("Customers").Rows(Me.iPosFilaActual)
' cargar los controles del formulario con
' los valores de los campos del registro
Me.txtIDCliente.Text = oDataRow("CustomerID")
Me.txtCliente.Text = oDataRow("CompanyName")
Me.txtContacto.Text = oDataRow("ContactName")
Me.txtDireccion.Text = oDataRow("Address")
Me.txtFono.Text = oDataRow("Phone")
' mostrar la posicin actual del registro y el nmero total del registros
Me.lblRegistro.Text = "Cliente: " & _
Me.iPosFilaActual + 1 & " de " & _
Me.oDs.Tables("Customers").Rows.Count
End Sub

Fig.25:CdigodelEventoLoadyelProcedimientoCargarDatos
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

19
ObservarqueeneleventoLoadsehacreadounobjetoCommandBuilder,pasndolecomoparmetroel
DataAdapter. Como ya sabemos, un DataAdapter contiene una serie de objetos Command para las
operaciones de consulta, insercin, etc. La misin en este caso del objeto CommandBuilder, es la de
construirautomticamentetalescomandosyasignrselosalDataAdapter,ahorrndonosesetrabajode
codificacin.Encuantoalasoperacionesdenavegacinporlatabla,nohayunobjeto,comoocurracon
el Recordset de ADO, que disponga de mtodos especficos de movimiento como MoveNext( ),
MoveLast(),etc.LoquedebemoshacerenADO.NET,talycomomuestraelmtodoCargarDatos(),es
obtener del DataSet, la tabla que necesitemos mediante su coleccin Tables, y a su vez, a la coleccin
Rowsdeesatabla,pasarleelnmerodefila/registroalquevamosadesplazarnos.Ennuestroejemplo
utilizaremoslavariableiPosFilaActual,definidaaniveldeclase,parasaberentodomomento,lafilade
la tabla en la que nos encontramos. El Cdigo fuente de cada botn de navegacin se muestra en la
figura26.

Private Sub btnPrimero_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnPrimero.Click
' establecer el marcador de registro en el primero
Me.iPosFilaActual = 0
Me.CargarDatos()
End Sub

Private Sub btnAvanza_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAvanza.Click
' si estamos en el primer registro,
' no hacer movimiento
If Me.iPosFilaActual = 0 Then
MessageBox.Show("Primer registro")
Else
' disminuir el marcador de registro
' y actualizar los controles con los
' datos del registro actual
Me.iPosFilaActual -= 1
Me.CargarDatos()
End If
End Sub

Private Sub btnRetrocede_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnRetrocede.Click
' si estamos en el ltimo registro,
' no hacer movimiento
If Me.iPosFilaActual = _
(Me.oDs.Tables("Customers").Rows.Count - 1) Then
MessageBox.Show("ltimo registro")
Else
' incrementar el marcador de registro
' y actualizar los controles con los
' datos del registro actual
Me.iPosFilaActual += 1
Me.CargarDatos()
End If

End Sub

Private Sub btnUltimo_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnUltimo.Click
' establecer el marcador de registro en el primero
' obteniendo el nmero de filas que contiene la tabla menos uno
Me.iPosFilaActual = (Me.oDs.Tables("Customers").Rows.Count - 1)
Me.CargarDatos()
End Sub

Fig.26:Cdigodelosbotonesdenavegacin
UnavezcodificadoeleventoloaddelfrmNavegaRegistros,elprocedimientoCargarDatosyloseventos
clickdelosbotonesdenavegacinejecutamoslaaplicacinlacualvemosenlaFig.27.
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

20

Fig.27:FormulariofrmNavegaRegistros



















AccesoaDatosconVB.NET2005
Ing.EduardoReyes

21
Relacionar tablas
Para llevar acabo la relacin entre dostablas, ambas tablas debende tener uncampo en comnpara
realizarlarelacin,enestaoportunidadrealizaremoslarelacinentrelastablasCustomersyOrderspor
sucampoclave(CustomerID)(ambasseencuentrandentrodelaBDNorthwind).Despusllenamosun
ComboBoxcondatosdelatablaCustomers.AlseleccionarunvalordelComboBox,setomarnlasfilas
relacionadasdelatablaOrdersysellenarconellasunListBox.
Una vez conocido lo que se desea hacer lo primero es crear un proyecto al cual llamaremos
WAccesoDatos,lastablasaconsultarseranCustomersyOrdersdelaBDNorthWind.Unavezcreadoel
nuevoproyectoenVB.NET,importaremoselespaciodenombresSystem.Data.SqlClient,ydeclararemos
aniveldeclaseunconjuntodevariablesparalamanipulacindelosdatos.Veamoslafigura28.

Imports System.Data
Imports System.Data.SqlClient

Public Class frmNavegaRegistros
'Variables a nivel de clase
'para la manipulacin de los datos
Dim Cn As SqlConnection
Private DaC As SqlDataAdapter
Private DaO As SqlDataAdapter
Private Ds As DataSet
Dim str As String
End Class


Fig.28:Variablesdeclaradas
Ahora disearemos el formulario denominado frmRelacionaTablas, para eso agregamos los siguientes
controles,loscualesnospermitirrealizarlasoperacionesmencionadas.
Control Name
GroupBox gbxClientes
ComboBox cboClientes
ListBox lstOrdenes

Despusdeagregarloscontrolesquedescribimosanteriormente,elformulariodebedequedarcomose
muestraenlaFig.29.

Fig.29:FormulariofrmRelacionaTablas
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

22
Como siguiente paso, escribiremos el cdigo del evento Load del frmRelacionaTablas y el evento
SelectedIndexChangeddelcboClientes,elCdigosemuestraenlafigura30.

Private Sub frmRelacionaTablas_Load(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles MyBase.Load
'crear conexion
Cn = New SqlConnection()
str = "Server=EDUARD;database=Northwind;uid=sa;password=master"
Cn.ConnectionString = str
'creamos los dos data adapter
Me.DaC = New SqlDataAdapter("Select * from Customers", Cn)
Me.DaO = New SqlDataAdapter("Select * from Orders", Cn)
'instaciar dataset
Me.Ds = New DataSet
'abrir la conexion
Cn.Open()
'utilizamos los DataAdapters para llenar los DataSets
Me.DaC.Fill(Me.Ds, "Customers")
Me.DaO.Fill(Me.Ds, "Orders")
'cerramos la conexion
Cn.Close()
'relacionamos las tablas del DataSet por campo comn
Me.Ds.Relations.Add("Customers Orders", Ds.Tables _
("Customers").Columns("CustomerID"), _
Ds.Tables("Orders").Columns("CustomerID"))
'llenar el combobox con los nombres del cliente
Dim Dr As DataRow
For Each Dr In Ds.Tables("Customers").Rows
Me.cboClientes.Items.Add(Dr("CustomerID") & _
" - " & Dr("CompanyName"))
Next
End Sub

Private Sub cboClientes_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cboClientes.SelectedIndexChanged
'limpiar los valores del combo
Me.lstOrdenes.Items.Clear()
Dim DrC As DataRow
'obtener la fila de tabla Customers
DrC = Ds.Tables("Customers").Rows(Me.cboClientes.SelectedIndex)
Dim DrO() As DataRow
'obtener las filas de la tabla Orders
DrO = DrC.GetChildRows("Customers Orders")
Dim DrFila As DataRow
'rellenar el listbox con los valores de la tabla Orders
For Each DrFila In DrO
Me.lstOrdenes.Items.Add(DrFila("CustomerID") & _
" - " & DrFila("OrderID") & " - " & DrFila("OrderDate"))
Next
End Sub
End Class

Fig.30:CdigodelfrmRelacionaTablas
Una vez codificado el evento load del frmRelacionaTablas y el evento del cboClientes ejecutamos la
aplicacinlacualvemosenlaFig.31.
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

23

Fig.31:FormulariofrmRelacionaTablas

AccesoaDatosconVB.NET2005
Ing.EduardoReyes

24
Filtrar tablas
Pararealizarelfiltradoatravsdelosregistrosdeunatabla,utilizaremoslaclaseDataViewlacualnos
permitelaaplicacindevistaspersonalizadasapartirdeunatablacontenidaenunDataSet,ascomola
ordenacinybsquedadefilas.
En ADO clsico, para disponer de varias vistas de una misma tabla, debamos crear diferentes objetos
Recordset, lo cual provocaba el consumo de una grancantidad de recursos. Este aspecto ha cambiado
profundamenteenADO.NET,yaquepartiendodeunobjetoDataTablesituadoenunDataSet,vamosa
definirvariasvistassimultneamente,ordenarybuscarregistros,conlaventajadequeelconsumode
recursosesmenor,puestoquelosobjetosDataViewsealimentandelmismoDataTable.
ElproyectosedenominaraWAccesoDatos,latablaaconsultarserCustomersdelaBDNorthWind.Una
vezcreadoelnuevoproyectoenVB.NET,importaremoslosespaciodenombresydeclararemosanivel
declaseunconjuntodevariablesparalamanipulacindelosdatos.Veamoslafigura32.

Imports System.Data
Imports System.Data.SqlClient

Public Class frmFiltroClientes

Dim Cn As SqlConnection
Private Da As SqlDataAdapter
Private Ds As DataSet
Dim Str As String

End Class

Fig.32:Variablesdeclaradas
Ahora disearemos el formulario denominado frmFiltroClientes, para eso agregamos los siguientes
controles,loscualesnospermitirrealizarlasoperacionesmencionadas.
Control Name
Label1 lblContacto
GroupBox1 gbxClientes
TextBox1 txtContacto
DataGridView dgFiltro

Despusdeagregarloscontrolesquedescribimosanteriormente,elformulariodebedequedarcomose
muestraenlaFig.33.

Fig.33:FormulariofrmFiltroClientes
AccesoaDatosconVB.NET2005
Ing.EduardoReyes

25
La propiedad RowFilter de la clase DataView nos permite asignar a este objeto, una cadena con la
expresin de filtro, que en una consulta en lenguaje SQL sera la parte correspondiente a la clusula
Where.
Como hemos comentado anteriormente, a partir de un DataTable podemos obtener varios filtros
mediantedistintosobjetosDataView,sinqueellosupongaunapenalizacinenelconsumoderecursos.
Para demostrar este punto, en el frmFiltroClientes, se crea una vista basada en un filtro y una vista
normal. A continuacin escribiremos el cdigo del evento Load del frmFiltroClientes y el evento
KeypressdeltxtContacto,elCdigosemuestraenlafigura34.

Private Sub frmFiltroClientes_Load(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles MyBase.Load

'creamos la conexion
Cn = New SqlConnection
Str = "Server=Srv01;DataBase=Northwind;UID=sa"
Cn.ConnectionString = Str
'crear el adaptador (consulta)
Me.Da = New SqlDataAdapter("Select * From Customers", Cn)
'agregar consulta al dataset
Me.Ds = New DataSet()
Me.Da.Fill(Ds, "Customers")
Me.Da = Nothing
End Sub

Private Sub txtContacto_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtContacto.KeyPress
Dim Dv As DataView

If Asc(e.KeyChar) = 13 Then
Dv = New DataView
'filtrar por el campo y llenar el datagridview
Dv.Table = Ds.Tables("Customers")
Dv.RowFilter = "ContactName LIKE '%" & txtContacto.Text & "%'"
'agregar el filtro para mostrar en el Grid
dgFiltro.DataSource = Dv
End If
End Sub

Fig.34:CdigodelfrmFiltroClientes
Una vez codificado el evento load del frmFiltroClientes y el evento del txtContacto ejecutamos la
aplicacinlacualvemosenlaFig.35.

Fig.35:FormulariofrmFiltroClientes

S-ar putea să vă placă și