Vb net

10,094 views

Published on

Published in: Technology
2 Comments
1 Like
Statistics
Notes
  • ¡Fantastico!

    Muchas gracias.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Inventory Management System Source Code
    http://www.inventoryinvbdotnet.blogspot.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
10,094
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
658
Comments
2
Likes
1
Embeds 0
No embeds

No notes for slide

Vb net

  1. 1.       Acceso a Datos Visual Basic .NET 2005              
  2. 2. Capítulo I • Acceso a datos • Lectura de datos • Inserción • Actualización • Eliminación
  3. 3.     Acceso a Datos con VB .NET 2005 Acceso a datosEn  este  capítulo  realizaremos  una  conexión,  lectura,  inserción,  actualización  y  eliminación  de  datos creando aplicaciones en Visual Basic .NET 2005 con el Framework 2.0 a través del SQL Server 2000. Crear  un  nuevo  proyecto  denominado  WAccesoDatos,  la  tabla  a  consultar  será  Products  de  la  BD NorthWind. Después de crear el proyecto agregar las Referencias para poder acceder a los Datos como lo indica en la Fig. 01:    Fig. 01: Agregar Referencias al Proyecto Respecto al código del formulario, primero vamos a declarar varios objetos de acceso a datos a nivel de la clase para poder tenerlos disponibles en diversos métodos. Veamos el Código fuente en la Fig. 02:    Fig. 02: Variables declaradas con los Objetos para el Acceso a Datos Ing. Eduardo Reyes  2 
  4. 4.     Acceso a Datos con VB .NET 2005 En  el  formulario  del  proyecto  agregamos  un  DataGridView  para  poder  mostrar  los  datos  a  enlazar, quedando el Form1 de la siguiente manera como se muestra en la Fig. 03:    Fig. 03: Formulario (Form1) con el DataGridView (dgVer) En el siguiente paso escribiremos el código dentro del evento Load del formulario, el cual se ocupa de crear  la  conexión  con  la  BD,  crear  el  DataAdapter  con  la  consulta,  cargar  el  DataSet,  y  asignárselo  al DataGrid a través de su propiedad DataSource. Ver la Fig. 04 Una vez escrito el código correctamente como se encuentra en la Fig. 04 se pasa a ejecutar el formulario y debe de mostrar los datos consultados tal como se muestran en la Fig. 05    Fig. 05: Formulario con los Datos mostrados en el DataGrid Ing. Eduardo Reyes  3 
  5. 5.     Acceso a Datos con VB .NET 2005    Fig. 04: Código para poder Acceder a los Datos de la Tabla Products de Northwind No olvidar que en la línea de código de conexión: 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 datos en este caso el mío es Srv01.           Ing. Eduardo Reyes  4 
  6. 6.     Acceso a Datos con VB .NET 2005 Lectura de datosDataReader En  esta  parte  realizaremos  una  lectura  (consulta  de  datos)  utilizando  objetos  DataReader,  un  objeto DataReader  permite  la  navegación  hacia  delante  y  de  sólo  lectura,  de  los  registros  devueltos  por  una consulta.  Ahora  crearemos  dentro  del  proyecto  denominado  WAccesoDatos  un  nuevo  formulario  al  cual  lo llamaremos frmLeerDatos, luego agregamos los siguientes controles los cuales nos mostraran el uso de objetos DataReader.  Control  Name Button1  btnEmpleados Button2  btnCliProd ListBox1  lstEmpleados ListBox2  lstClientes ListBox3  lstProductos Después de agregar los controles que describimos anteriormente, el formulario frmLeerDatos debe de quedar como se muestra en la Fig. 06.    Fig. 06: Formulario frmLeerDatos Ahora  realizaremos  la  codificación  del  botón  Empleados  creando  a  partir  de  un  comando,  un  objeto DataReader  que  recorreremos  para  llenar  un  ListBox  (lstEmpleados)  con  los  valores  de  una  de  las columnas de la tabla que internamente contiene el DataReader. Ver la Fig. 07. Después realizamos la codificación del botón Clientes/Productos que tendrá un objeto Command el cual puede estar basado en múltiples sentencias SQL, separadas por el carácter de punto y coma ( ; ), que se ejecuten en lote. Al crear un DataReader desde un comando de este tipo, podemos recorrer el conjunto de consultas mediante el método NextResult( ) del DataReader. Un ejemplo de este tipo lo tenemos al pulsar el botón Clientes/Productos del formulario, cuya fuente vemos a continuación en la Fig. 08. La  Fig.  09  muestra  al  formulario  después  de  haber  rellenado  los  controles  ListBox  usando  objetos DataReader. Ing. Eduardo Reyes  5 
  7. 7.     Acceso a Datos con VB .NET 2005    Fig. 07: Código del Botón Empleados.    Fig. 08: Código del Botón Clientes/Productos.   Ing. Eduardo Reyes  6 
  8. 8.     Acceso a Datos con VB .NET 2005    Fig. 09: ListBox llenados con los objetos DataReader DataSet DataSet  pertenece  al  conjunto  común  de  clases  de  ADO  .NET,  empleándose  para  todo  tipo  de proveedores, por lo que no existe una versión particular para SqlClient u OleDb. En  el  formulario  frmLeerDatos  agregar  los  siguientes  controles  el  cual  nos  servirá  para  realizar  un sencillo ejemplo de creación de un objeto DataSet que llenaremos con un DataAdapter. Una vez listo el DataSet, recorreremos la tabla que contiene y mostraremos valores de sus columnas en un ListBox.  Control  Name Button1  btnCustomers ListBox1  lstCustomers Después de agregar los controles que describimos anteriormente el formulario debe de quedar como se muestra en la Fig. 10.    Fig. 10: Formulario frmLeerDatos Ing. Eduardo Reyes  7 
  9. 9.     Acceso a Datos con VB .NET 2005 Ahora codificamos del botón Customers creando una consulta a partir de un DataAdapter, una vez listo el  DataSet  recorreremos  el  ListBox  (lstCustomers)  para  recorrer  y  mostrar  los  datos  de  una  de  las columnas de la tabla Customers. Ver la Fig. 11.    Fig. 11: Código del Botón Customers  La  Fig.  12  muestra  al  formulario  después  de  haber  rellenado  los  controles  ListBox  usando  objetos DataSet.     Fig. 12: ListBox llenados mediante un DataSet   Ing. Eduardo Reyes  8 
  10. 10.     Acceso a Datos con VB .NET 2005 InserciónDataAdapter Los objetos DataAdapter (SqlDataAdapter y OleDbDataAdapter) van a desempeñar el papel de puente entre el origen de datos y el DataSet, permitiéndonos cargar el DataSet con la información de la fuente de datos, y posteriormente, actualizar el origen de datos con la información del DataSet. Un  objeto  DataAdapter  puede  contener  desde  una  sencilla  sentencia  SQL,  como  hemos  visto  en  el apartado anterior, hasta varios objetos Command. 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  estándar  de  manipulación  de datos. Estas propiedades son las siguientes.  • InsertCommand. Objeto de la clase Command, que se va a utilizar para realizar una inserción de  datos.  • SelectCommand. Objeto de la clase Command que se va a utilizar para ejecutar una sentencia  Select de SQL.  • UpdateCommand.  Objeto  de  la  clase  Command  que  se  va  a  utilizar  para  realizar  una  modificación de los datos.  • DeleteCommand. Objeto de la clase Command que se va a utilizar para realizar una eliminación  de datos. Un método destacable de las clases SqlDataAdapter/OleDbDataAdapter es el método Fill( ), que ejecuta el comando de selección que se encuentra asociado a la propiedad SelectCommand, los datos obtenidos del origen de datos se cargarán en el objeto DataSet que pasamos por parámetro. Para  ver  el  uso  de  los  objetos  DataAdapter  vamos  a  crear  un  formulario  y  lo  llamaremos frmInsertaDatos luego agregamos los siguientes controles.   Control  Name DataGridView  grdDatos TextBox1  txtPrograma TextBox2  txtDescripcion Label1  lblPrograma Label2  lblDescripcion Button  btnGrabar En esta aplicación vamos a utilizar el objeto DataAdapter para realizar una consulta en la tabla Region de la BD Northwind con la cual venimos trabajando e insertar nuevas filas en esa misma tabla. Después de agregar los controles que describimos anteriormente el formulario debe de quedar como se muestra en la Fig. 13. Respecto al código del formulario, en primer lugar, vamos a declarar varios objetos de acceso a datos a nivel de la clase para poder tenerlos disponibles en diversos métodos. Veamos la Fig. 14. En el siguiente paso escribiremos el procedimiento del evento Load del formulario frmInsertaDatos, y el método  CargaDatos(  ),  que  se  ocupa  de  cargar  el  DataSet,  y  asignárselo  al  DataGrid  a  través  de  su propiedad DataSource. Observe el lector que en el método CargarDatos( ) lo primero que hacemos es vaciar el DataSet, puesto que este objeto conserva los datos de tablas y registros; en el caso de que no limpiáramos el DataSet, se acumularían las sucesivas operaciones de llenado de filas sobre la tabla que contiene. Veamos la Fig. 15. Ing. Eduardo Reyes  9 
  11. 11.     Acceso a Datos con VB .NET 2005    Fig. 13: Formulario frmInsertaDatos      Fig. 14: Variables declaradas dentro del frmInsertaDatos   Private Sub frmInsertaDatos_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load crear conexión 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   Ing. Eduardo Reyes  10 
  12. 12.     Acceso a Datos con VB .NET 2005 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: Código del evento Load del frmInsertaDatos Finalmente,  en  el  botón  Grabar,  escribiremos  las  instrucciones  para  insertar  un  nuevo  registro  en  la tabla Region, el cual se codificara como se ve en la Fig. 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 Añadidos:" & iResultado)End Sub  Fig. 15: Código del Botón Grabar para Insertar nuevas Regiones Una vez codificado todos los procedimientos ejecutamos la aplicación la cual vemos en la Fig. 16.    Fig. 16: Formulario con un Nuevo Registro Insertado Ing. Eduardo Reyes  11 
  13. 13.     Acceso a Datos con VB .NET 2005 ActualizaciónPara  poder  realizar  una  actualización  de  datos,  crearemos  dentro  del  evento  Load  un  objeto CommandBuilder,  pasándole  como  parámetro  el  DataAdapter.  Como  ya  sabemos,  un  DataAdapter contiene una serie de objetos Command para las operaciones de consulta, inserción, etc. La misión en este  caso  del  objeto  CommandBuilder,  es  la  de  construir  automáticamente  tales  comandos  y asignárselos al DataAdapter, ahorrándonos ese trabajo de codificación. Para  poder  hacer  uso  de  un  objeto  CommandBuilder  vamos  a  crear  un  formulario  y  lo  llamaremos frmActualizaDatos luego agregamos los siguientes controles.   Control  Name DataGridView  grdDatos Button  btnActualizar En esta aplicación 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.  Después  de agregar los controles que describimos anteriormente el formulario debe de quedar como se muestra en la Fig. 17.    Fig. 17: Formulario frmActualizaDatos En el siguiente paso escribiremos el procedimiento del evento Load del formulario frmActualizaDatos, cargamos el DataSet, y lo asignamos al DataGrid a través de su propiedad DataSource y DataMember, luego codificamos el evento click del btnActualiza. Veamos la Fig. 18. Una vez codificado el evento load del frmActualizaDatos y el evento click del btnActualiza ejecutamos la aplicación la cual vemos en la Fig. 19.     Ing. Eduardo Reyes  12 
  14. 14.     Acceso a Datos con VB .NET 2005  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: Código del evento Load del Formulario  el evento click del Botón Actualizar      Fig. 19: Formulario frmActualizaDatos con un Registro Modificado         Ing. Eduardo Reyes  13 
  15. 15.     Acceso a Datos con VB .NET 2005 EliminaciónPara poder realizar la eliminación de filas es algo diferente a lo que venimos haciendo anteriormente, a la hora de obtener la fila a borrar tenemos que hacerlo mediante un objeto DataRow, procediendo a su borrado con el método Delete( ).  Para  actualizar  los  borrados  realizados,  empleamos  el  método  GetChanges(  )  del  objeto  DataTable, obteniendo  a  su  vez  un  objeto  table  sólo  con  las  filas  borradas,  dicha  información  que  pasaremos  al DataAdapter, para que actualice la información en el origen de datos. Para poder hacer uso de un objeto DataRow y DataTable vamos a crear un formulario y lo llamaremos frmEliminaDatos luego agregamos los siguientes controles.   Control  Name DataGridView  grdDatos Button  btnEliminar Después de agregar los controles que describimos anteriormente, el formulario debe de quedar como se muestra en la Fig. 20.    Fig. 20: Formulario frmEliminaDatos En el siguiente paso escribiremos el código del evento Load del formulario frmEliminaDatos, cargamos el DataSet,  y  lo  asignamos  al  DataGrid  a  través  de  su  propiedad  DataSource  y  DataMember,  luego codificamos  el  evento  click  del  btnEliminar,  declarando  una  variable  para  poder  identificar  la  fila  del datagrid a eliminar a travez del uso de  sus propiedades. Veamos la Fig. 21. Una  vez  codificado  el  evento  load  del  frmEliminaDatos  y  el  evento  click  del  btnElimina  ejecutamos  la aplicación la cual vemos en la Fig. 22.     Ing. Eduardo Reyes  14 
  16. 16.     Acceso a Datos con VB .NET 2005  Dim oCn As SqlConnection Dim oDs As DataSet Dim oDa As SqlDataAdapter Private Sub frmEliminaDatos_Load(ByVal sender As Object, ByVal e AsSystem.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 AsSystem.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 método GetChanges(), obtenemos una tabla con las filas borradas Dim oTablaBorrados As DataTable oTablaBorrados = oDs.Tables("Region").GetChanges(DataRowState.Deleted) actualizar en el almacén de datos las filas borradas oDa.Update(oTablaBorrados) confirmar los cambios realizados oDs.Tables("Region").AcceptChanges() End Sub     Fig. 21: Código del evento Load del Formulario  el evento click del Botón Eliminar         Fig. 22: Formulario frmEliminaDatos con un Registro EliminadoIng. Eduardo Reyes  15 
  17. 17. Capítulo II • Navegación de registros • Relacionar tablas • Filtrar tablas • Seleccionar y mostrar registros                                                      
  18. 18.     Acceso a Datos con VB .NET 2005   Navegación de registrosPara realizar la navegación a través de los registros de una tabla, debemos de saber que la arquitectura de  ADO  .NET está  orientada  a  un  modelo de  trabajo  desconectado  sobre  el  almacén de  datos,  al  que recurriremos sólo cuando necesitemos obtener los datos para su consulta y manipulación. El  objeto  DataSet,  combinado  con  un  grupo  de  objetos  enfocados  al  mantenimiento  de  datos desconectados, como son DataAdapter, DataTable, DataRow, etc., nos va a permitir realizar la tarea de navegar entre los registros de una tabla del DataSet. El proyecto se denominara WAccesoDatos, la tabla a consultar será Customers de la BD NorthWind. Una vez creado el nuevo proyecto en VB.NET, importaremos el espacio de nombres System.Data.SqlClient, y declararemos  a  nivel  de  clase  un  conjunto  de  variables  para  la  manipulación  de  los  datos.  Veamos  la figura 23.  Imports System.Data.SqlClient Public Class frmNavegaRegistros Inherits System.Windows.Forms.Form Variables a nivel de clase para la manipulación de los datos Private oDa As SqlDataAdapter Private oDs As DataSet Private iPosFilaActual As Integer End Class      Fig. 23: Variables declaradas Ahora diseñaremos el formulario denominado frmNavegaRegistros, para eso agregamos los siguientes controles, los cuales nos permitirá realizar las operaciones mencionadas.   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   Después de agregar los controles que describimos anteriormente, el formulario debe de quedar como se muestra en la Fig. 24. Ing. Eduardo Reyes  17 
  19. 19.     Acceso a Datos con VB .NET 2005    Fig. 24: Formulario frmNavegaRegistros Como  siguiente  paso,  escribiremos  el  manipulador  del  evento  Load  del  formulario  y  un  método  para cargar los datos del registro actual en los controles del formulario, el Código se muestra en la figura  25.  Private Sub frmNavegaRegistros_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load crear conexión 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 posición actual del registro y el número total del registros Me.lblRegistro.Text = "Cliente: " & _ Me.iPosFilaActual + 1 & " de " & _ Me.oDs.Tables("Customers").Rows.Count End Sub   Fig. 25: Código del Evento Load y el Procedimiento Cargar Datos Ing. Eduardo Reyes  18 
  20. 20.     Acceso a Datos con VB .NET 2005 Observar que en el evento Load se ha creado un objeto CommandBuilder, pasándole como parámetro el DataAdapter.  Como  ya  sabemos,  un  DataAdapter  contiene  una  serie  de  objetos  Command  para  las operaciones  de  consulta,  inserción,  etc.  La  misión  en  este  caso  del  objeto  CommandBuilder,  es  la  de construir automáticamente tales comandos y asignárselos al DataAdapter, ahorrándonos ese trabajo de codificación. En cuanto a las operaciones de navegación por la tabla, no hay un objeto, como ocurría con el  Recordset  de  ADO,  que  disponga  de  métodos  específicos  de  movimiento  como  MoveNext(  ), MoveLast( ), etc. Lo que debemos hacer en ADO .NET, tal y como muestra el método CargarDatos(), es obtener del DataSet, la tabla que necesitemos mediante su colección Tables, y a su vez, a la colección Rows de esa tabla, pasarle el número de fila/registro al que vamos a desplazarnos. En nuestro ejemplo utilizaremos la variable iPosFilaActual, definida a nivel de clase, para saber en todo momento, la fila de la  tabla  en  la  que  nos  encontramos.  El  Código  fuente  de  cada  botón  de  navegación  se  muestra  en  la figura 26.  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 número de filas que contiene la tabla menos uno Me.iPosFilaActual = (Me.oDs.Tables("Customers").Rows.Count - 1) Me.CargarDatos() End Sub   Fig. 26: Código de los botones de navegación Una vez codificado el evento load del frmNavegaRegistros, el procedimiento Cargar Datos y los eventos click de los botones de navegación ejecutamos la aplicación la cual vemos en la Fig. 27. Ing. Eduardo Reyes  19 
  21. 21.     Acceso a Datos con VB .NET 2005    Fig. 27: Formulario frmNavegaRegistros   Ing. Eduardo Reyes  20 
  22. 22.     Acceso a Datos con VB .NET 2005 Relacionar tablasPara llevar a cabo la relación entre dos tablas, ambas tablas deben de tener un campo en común para realizar la relación, en esta oportunidad realizaremos la relación entre las tablas Customers y Orders por su campo clave (CustomerID) (ambas se encuentran dentro de la BD Northwind). Después llenamos un ComboBox con datos de la tabla Customers. Al seleccionar un valor del ComboBox, se tomarán las filas relacionadas de la tabla Orders y se llenará con ellas un ListBox. Una  vez  conocido  lo  que  se  desea  hacer  lo  primero  es  crear  un  proyecto  al  cual  llamaremos WAccesoDatos, las tablas a consultar seran Customers y Orders de la BD NorthWind. Una vez creado el nuevo proyecto en VB.NET, importaremos el espacio de nombres System.Data.SqlClient, y declararemos a nivel de clase un conjunto de variables para la manipulación de los datos. Veamos la figura 28.  Imports System.Data Imports System.Data.SqlClient Public Class frmNavegaRegistros Variables a nivel de clase para la manipulación 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: Variables declaradas Ahora diseñaremos el formulario denominado frmRelacionaTablas, para eso agregamos los siguientes controles, los cuales nos permitirá realizar las operaciones mencionadas.  Control  Name GroupBox  gbxClientes ComboBox  cboClientes ListBox  lstOrdenes   Después de agregar los controles que describimos anteriormente, el formulario debe de quedar como se muestra en la Fig. 29.    Fig. 29: Formulario frmRelacionaTablas Ing. Eduardo Reyes  21 
  23. 23.     Acceso a Datos con VB .NET 2005 Como  siguiente  paso,  escribiremos  el  código  del  evento  Load  del  frmRelacionaTablas  y  el  evento SelectedIndexChanged del cboClientes, el Código se muestra en la figura  30.  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 común 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 SubEnd Class     Fig. 30: Código del frmRelacionaTablas Una  vez  codificado  el  evento  load  del  frmRelacionaTablas  y  el  evento  del  cboClientes  ejecutamos  la aplicación la cual vemos en la Fig. 31. Ing. Eduardo Reyes  22 
  24. 24.     Acceso a Datos con VB .NET 2005    Fig. 31: Formulario frmRelacionaTablas                                                                               Ing. Eduardo Reyes  23 
  25. 25.     Acceso a Datos con VB .NET 2005 Filtrar tablasPara realizar el filtrado a través de los registros de una tabla, utilizaremos la clase DataView la cual nos permite la aplicación de vistas personalizadas a partir de una tabla contenida en un DataSet, así como la ordenación y búsqueda de filas. En ADO clásico, para disponer de varias vistas de una misma tabla, debíamos crear diferentes objetos Recordset, lo cual provocaba el consumo de una gran cantidad de recursos. Este aspecto ha cambiado profundamente en ADO .NET, ya que partiendo de un objeto DataTable situado en un DataSet, vamos a definir varias vistas simultáneamente, ordenar y buscar registros, con la ventaja de que el consumo de recursos es menor, puesto que los objetos DataView se alimentan del mismo DataTable.  El proyecto se denominara WAccesoDatos, la tabla a consultar será Customers de la BD NorthWind. Una vez creado el nuevo proyecto en VB .NET, importaremos los espacio de nombres y declararemos a nivel de clase un conjunto de variables para la manipulación de los datos. Veamos la figura 32.  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: Variables declaradas Ahora  diseñaremos  el  formulario  denominado  frmFiltroClientes,  para  eso  agregamos  los  siguientes controles, los cuales nos permitirá realizar las operaciones mencionadas.  Control  Name Label1  lblContacto GroupBox1  gbxClientes TextBox1  txtContacto DataGridView  dgFiltro   Después de agregar los controles que describimos anteriormente, el formulario debe de quedar como se muestra en la Fig. 33.    Fig. 33: Formulario frmFiltroClientes Ing. Eduardo Reyes  24 
  26. 26.     Acceso a Datos con VB .NET 2005 La  propiedad  RowFilter  de  la  clase  DataView  nos  permite  asignar  a  este  objeto,  una  cadena  con  la expresión  de  filtro,  que  en  una  consulta  en  lenguaje  SQL  sería  la  parte  correspondiente  a  la  cláusula Where. Como  hemos  comentado  anteriormente,  a  partir  de  un  DataTable  podemos  obtener  varios  filtros mediante distintos objetos DataView, sin que ello suponga una penalización en el consumo de recursos. Para  demostrar  este  punto,  en  el  frmFiltroClientes,  se  crea  una  vista  basada  en  un  filtro  y  una  vista normal.  A  continuación  escribiremos  el  código  del  evento  Load  del  frmFiltroClientes  y  el  evento Keypress del txtContacto, el Código se muestra en la figura  34.  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 IfEnd Sub     Fig. 34: Código del frmFiltroClientes Una  vez  codificado  el  evento  load  del  frmFiltroClientes  y  el  evento  del  txtContacto  ejecutamos  la aplicación la cual vemos en la Fig. 35.    Fig. 35: Formulario frmFiltroClientes Ing. Eduardo Reyes  25 

×