Anda di halaman 1dari 23

I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.

NET

Arquitectura y funcionalidad de ADO .NET

INTRODUCCIN

La mayora de las aplicaciones escritas en Visual Basic y Visual C# giran en


torno a la lectura y actualizacin de informacin de bases de datos. Para
permitir la integracin de datos en aplicaciones distribuidas y escalables,
Visual Studio .NET es compatible con una nueva generacin de tecnologa de
acceso a datos: ADO.NET.

El problema es comunicar un programa o aplicacin con una base de datos y


ms que comunicar se pretende que el programa o aplicacin realice una serie
de procesos u operaciones con la base de datos o mejor aun con el conjunto
de tablas que contiene una base de datos.

La primera nota a recordar es que una base de datos puede estar fsicamente
en el servidor y en algn flder o directorio del disco duro de dicha maquina.
Otra cosilla que debemos recordar es que as como existen servidores de
paginas (Web Server), servidores de correo (Mail Server), servidores de ftp (ftp
Server),..., tambin existen servidores de bases de datos (DataBase Server),
los ms comunes son el SqlServer de Microsoft, Oracle, MySql, y muchos ms,
estos servidores tambin pueden crear, administrar y procesar una base de
datos.

El modo de comunicacin entre nuestra aplicacin y la base de datos implica


que ambos manejen un lenguaje de programacin comn, es decir no se
puede mandar una instruccin en csharp .net, o en visual Basic .net o en Basic
o pascal...o en cualquier otro lenguaje, a la base de datos y adems esperar
que esta ltima la entienda. Para entender esto, una razn muy sencilla es que
la base de datos tendra que conocer o comprender todos los lenguajes de
programacin, ahora dime, no sera ms fcil que exista un lenguaje
comn...?, entonces para resolver este problema de comunicacin es que se
usa un lenguaje comn de bases de datos que tanto los lenguajes de
programacin existentes como las bases de datos entienden, este lenguaje
comn de bases de datos es el SQL (Structured Query Languaje) o lenguaje
estructurado de consultas.

La pregunta es ahora como mandamos las instrucciones SQL a la base de


datos, la respuesta es mediante los OBJETOS ADO.NET, las cuales proporcionan
acceso coherente a orgenes de datos como Microsoft SQL Server, as como a
orgenes de datos expuestos mediante OLE DB y XML.

En la actualidad ADO .NET ya es parte del .NET Framework, esto quiere decir
que es, de alguna manera, parte del sistema operativo y no ms un
redistribuible de 4 5 MB que se necesita alojar junto al cliente o junto al
instalador de una aplicacin. Esto significa que nosotros, como desarrolladores,
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

estaremos enfocados ms al acceco a datos y a la lgica para manipular estos


datos, y no tendremos porqu precuparnos en cmo a los clientes la librera.

La mayora de las aplicaciones necesitan algn mecanismo de acceso a datos.


Si est creando una aplicacin nueva, dispone de tres opciones excelentes
para obtener acceso a los datos: ADO.NET, ADO y OLE DB. Si necesita
modificar el mecanismo de acceso a datos de una aplicacin existente, debera
seguir utilizando la tecnologa actual de acceso a datos de la aplicacin por
cuestiones de mantenimiento.

Si usted prev que la aplicacin va a tener un ciclo de vida largo, entonces


debe considerar la posibilidad de redisear la tecnologa de acceso a datos de
la aplicacin y utilizar ADO.NET en aplicaciones administradas o ADO en
aplicaciones nativas. A largo plazo, el uso de las tecnologas ms modernas de
acceso a datos reduce el tiempo de desarrollo, simplifica el cdigo y
proporciona un rendimiento excelente.

A continuacin detallar muchos conceptos importantes a cerca de ADO .NET

Acceso a datos con ADO.NET

ADO.NET es una tecnologa de acceso a datos que se basa en los


objetos ADO (Objetos de Datos ActiveX) anteriores.

Es una manera nueva de acceder a los datos construida sobre ADO.


ADO.NET puede coexistir con ADO.

Tambin podemos decir que ADO.NET es un conjunto de clases que


exponen servicios de acceso a datos al programador de .NET.

ADO.NET proporciona un conjunto variado de componentes para crear


aplicaciones distribuidas de uso compartido de datos. Forma parte
integral de .NET Framework, y proporciona acceso a datos relacionales,
datos XML y datos de aplicaciones.

ADO.NET es compatible con diversas necesidades de programacin,


incluida la creacin de clientes de bases de datos clientes y objetos
empresariales de nivel medio utilizados por aplicaciones, herramientas,
lenguajes o exploradores de Internet.

ADO.NET utiliza un modelo de acceso pensado para entornos


desconectados. Esto quiere decir que la aplicacin se conecta al origen
de datos, hace lo que tiene que hacer, por ejemplo seleccionar registros,
los carga en memoria y se desconecta del origen de datos.
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

ADO.NET es un conjunto de clases que usted utiliza para acceder y


manipular orgenes de datos como por ejemplo, una base de datos en
SQL Server o una planilla Excel.

ADO.NET utiliza XML como el formato para transmitir datos desde y


hacia su base de datos y su aplicacin Web.

Hay 3 espacios de nombres que se importar en un formulario Web o


formulario windows si esta usando ADO.NET:

o System.Data.

o System.Data.SqlClient.

o System.Data.OleDb.

El modelo de objetos ADO.NET provee una estructura de acceso a


distintos orgenes de datos. Tiene 2 componentes principales: El Dataset
y el proveedor de Datos .NET

Espacios de nombres para datos en el .NET Framework

Entre los espacios de nombres de .NET Framework relativos a datos y XML se


incluyen:

System.Data: consiste en las clases que constituyen la arquitectura


ADO.NET, que es el mtodo primario para tener acceso a los datos de las
aplicaciones administradas. La arquitectura ADO.NET permite crear
componentes que administran eficientemente datos procedentes de mltiples
orgenes. ADO.NET tambin proporciona las herramientas necesarias para
solicitar, actualizar y reconciliar datos en aplicaciones distribuidas.

System.Data.Common: contiene las clases que comparten los proveedores


de datos .NET Framework. Dichos proveedores describen una coleccin de
clases que se utiliza para obtener acceso a un origen de datos, como una base
de datos, en el espacio administrado.

System.Xml: clases que proporcionan funcionalidad basada en estndares


para procesar cdigo XML.

System.Data.OleDb: clases que componen el proveedor de datos de .NET


Framework para orgenes de datos compatibles con OLE DB. Estas clases
permiten conectarse a un origen de datos OLE DB, ejecutar comandos en el
origen y leer los resultados.

System.Data.SqlClient: clases que conforman el proveedor de datos de .NET


Framework para SQL Server, que permite conectarse a un origen de datos SQL
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Server 7.0, ejecutar comandos y leer los resultados. El espacio de nombres


System.Data.SqlClient es similar al espacio de nombres System.Data.OleDb,
pero optimizado para el acceso a SQL Server 7.0 y versiones posteriores.

System.Data.SqlTypes: proporciona clases para tipos de datos nativos de


SQL Server. Estas clases ofrecen una alternativa ms segura y ms rpida a
otros tipos de datos.

System.Data.OleDb: clases que componen el proveedor de datos de .NET


Framework para OLE DB. Estas clases permiten el acceso a orgenes de datos
ODBC en el espacio administrado.

System.Data.OracleClient: clases que componen el proveedor de datos


de .NET Framework para Oracle. Estas clases permiten el acceso a orgenes de
datos Oracle en el espacio administrado.

EL PROVEEDOR DE DATOS .NET

Provee del enlace entre el Origen de Datos y el DataSet.

Un proveedor de datos de .NET Framework sirve para conectarse a una base


de datos, ejecutar comandos y recuperar resultados. Esos resultados se
procesan directamente o se colocan en un DataSet de ADO.NET con el fin de
exponerlos al usuario para un propsito especfico, junto con datos de varios
orgenes, o de utilizarlos de forma remota entre niveles. El diseo del
proveedor de datos de .NET Framework hace que sea ligero, de manera que
cree un nivel mnimo entre el origen de datos y su cdigo, con lo que aumenta
el rendimiento sin sacrificar la funcionalidad.

Proveedor de datos de .NET Framework

Proveedor de datos de .NET para SQL Server

Proveedor de datos de .NET para OLE DB

Proveedor de datos de .NET para ODBC

Proveedor de datos de .NET para Oracle

Objetos provistos por distintos proveedores de datos .NET

Los objetos Connection, Command, DataReader y DataAdapter son los


elementos fundamentales del modelo de proveedor de datos de .NET
Framework. En la tabla siguiente se describen estos objetos.

Objeto Descr

Connection Estable
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Command Ejecuta

DataReader Lee un

DataAdapter Llena u

Ver ejemplo de aplicacin usando los objetos Connection, Command,


DataReader

La siguiente ilustracin muestra los componentes principales de una aplicacin


ADO.NET.

La siguiente tabla resume los componentes ADO.NET que se ilustran


anteriormente. Adems puede revisar el ejemplo de aplicacin

Componente u objeto

Conjunto de datos (DataSet, DataTable, DataColumm, DataRow, DataRelation, constrain

Adaptador de datos (OleDbDataAdapter,SqlDataAdapter, OdbcDataAdapter,OracleData

Conexin de datos (SqlConnection,OleDbConnection, OdbcConnection,OracleConnection

Formulario Windows Forms


I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Pgina de Formulario Web Forms

Ahora trataremos algunos conceptos sobre la funcionalidad del DataSet,


adems veremos lo importante que es este objeto.

DATASET

Un DataSet guarda informacin en un entorno desconectado. Despus de que


usted establece una conexin con una Base de Datos entonces puede acceder
a sus datos.

Practicamente un DataSet viene a ser una cach de memoria interna de datos


recuperados de un origen de datos, representa un componente fundamental
de la arquitectura de ADO.NET. As mismo un DataSet est compuesto por una
coleccin de objetos DataTable que se pueden relacionar entre ellos mediante
objetos DataRelation. Tambin se puede imponer la integridad de los datos de
DataSet mediante los objetos UniqueConstraint y ForeignKeyConstraint.

El Dataset est formado por uno o ms objetos de tipo DataTables. fue


pensado para acceder a datos independientemente del origen. Por ejemplo, un
DataSet puede obtener datos de SQL Server, Oracle o de un archivo XML.
Puede utilizar un objeto llamada DataView para ver los datos de distintas
maneras. Mientras que los objetos DataTable contienen los datos,
DataRelationCollection permite desplazarse por la jerarqua de la tabla. Las
tablas estn incluidas en un DataTableCollection al que se obtiene acceso a
travs de la propiedad Tables. Al obtener acceso a los objetos DataTable, hay
que tener en cuenta que stos distinguen entre maysculas y minsculas
condicionalmente. Por ejemplo, si un objeto DataTable se denomina
"mydatatable" y otro "Mydatatable", se considerar que una cadena utilizada
para buscar una de las tablas distingue entre maysculas y minsculas. Sin
embargo, si existe "mydatatable" pero no existe "Mydatatable", se considerar
que la cadena de bsqueda no distingue entre maysculas y minsculas. Para
mejor comprensin de la importancia del DataSet, vea el Mejorando el
rendimiento de la aplicacin trabajando en modo desconectado en la cual se
detalla de forma clara mediante un ejemplo cmo se obtiene beneficios
usando el DataSet.

Un DataSet puede leer y escribir datos y esquemas como documentos XML.


Los datos y esquemas pueden transportarse, a continuacin, a travs de HTTP
y cualquier aplicacin puede utilizarlos en cualquier plataforma que sea
compatible con XML. Los esquemas se pueden guardar como esquemas XML
mediante el mtodo WriteXmlSchema, y tanto los esquemas como los datos se
pueden guardar mediante el mtodo WriteXml. Hay que utilizar el mtodo
ReadXml para leer un documento XML que incluya esquema y datos.
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

El DataSet es la principal forma de guardar datos cuando usted utiliza


ADO.NET El DataSet le permite a usted guardar datos que se obtuvieron de un
origen de datos. Los datos en un DataSet pueden ser manipulados sin
necesidad que el formulario Web mantenga la conexin con el origen de datos.
La conexin se reestablece recin cuando usted necesita actualizar los
cambios

Hay tpicamente 3 pasos para acceder a los datos.

1. Acceder al Origen de Datos y mostrar los datos en el formulario Web

2. Manipular los Datos

3. Retornar los datos para actualizar la base de datos

Ejemplo: Manipular una base de datos de manera conectada

ueno hemos llegado a la parte final de este artculo. Este ejemplo que detallar
a continuacin le ayudar a comprender mejor los conceptos que expliqu
anteriormente. La aplicacin que implement se basa en trabajar con una base
de datos u origen de datos de manera desconectada, donde para realizar
determinadas operaciones en el origen de datos, procederemos de la siguiente
manera: 1) nos conectamos a la base de datos y mostramos los datos en el
formulario 2)Manipulamos los Datos 3) finalmente retornamos los datos para
actualizar la base de datos.

Por motivos de tiempo, tan slo me limito a manejar una tabla(con 7 registros)
dentro de una base de datos. Manejar una sla tabla(slo con fines de ilustrar
el ejemplo, opcionalmente pueden usarse ms tablas), la cual ser
previamente creada en la Base de Datos northwind ,luego realizaremos
algunas operaciones como por ejemplo insertar registros en la tabla,
visualizarlos, actualizar los datos, eliminar registros y modificarlos de acuerdo
a la situacin.

Algo a resaltar es que este tipo de acceso a la base de datos, es decir trabajar
en modo conectado, puede consumir grande recursos sacrificando el
rendimiento al mantener conexiones abiertas a la base de datos. Cada
enfoque, modo conectado o desconectado, ofrece una serie de beneficios y
desventajas. La eleccin del enfoque depende en gran medida de las
caractersticas de la arquitectura y las plataformas que vayan a utilizarse para
el intercambio de los datos.

Expongo el cdigo de la aplicacin, la cual voy detallando paso a paso,


explicando los mtodos usados y cuales son los resultados. Para entender este
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

cdigo usted debe tener conocimientos previos respecto al manejo de


instrucciones Transact-SQL. Espero sinceramente que sea de utilidad lo poco
que estoy aportando, deseo que comprendas muchas cosillas referente a
ADO .NET, por eso inclu conceptos muy importantes las cuales debes asimilar
con cuidado. Si encuentras alguna manera de mejorar la aplicacin no dudes
en escribirme al correo, ya que todos somos eternos aprendices. Bueno ahora
te dejo que revises el cdigo.

Imports System.Data
Imports System.Data.SqlClient

Module Module1
Public Estado As New Boolean
Public Reader As SqlDataReader
Public conection As New SqlConnection("data source=(local); integrated
security=SSPI; initial catalog=northwind")
End Module

Public Class Form1


Inherits System.Windows.Forms.Form
Private Sub Btnsalir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Btnsalir.Click
Me.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Try
'Nos conctamos a la base de datos.
conection.Open()
'Creamos la tabla.
Dim comando As New SqlCommand("create table vendedores(codigo
int not null primary " + _
" key identity, nombres varchar(25),apellidos varchar(25),direccin
varchar(60)," + _
" e_civil char(1),sexo integer, sueldo numeric(10,2),retirado bit)",
conection)
comando.ExecuteNonQuery()
'Confirmamos con un mensaje al cliente la creacin de la tabla.
MsgBox("Tabla creada satisfactoriamente...")
'Nos desconectamos de la base de datos.
conection.Close()
Catch ex As Exception
'Si sucede alguna excepcin, entonces nos desconectamos de todas
'maneras de la base de datos.
conection.Close()
MsgBox(ex.Message)
End Try
End Sub

Private Sub BtnRefrescar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) _
Handles BtnRefrescar.Click
Try
ListView1.Items.Clear()
'Nos conctamos a la base de datos.
conection.Open()
'Instanciamos un objeto Command para ejecutar la instruccin sql en
'el origen de datos. Este objeto recibe dos parmetros:la instruccin
'sql y el objeto Connection para establecer la coneccin.
Dim Micomando As New SqlCommand("select * from vendedores",
conection)
'Mediante el objeto Reader procedemos a leer los resultados de la
consulta sql.
Reader = Micomando.ExecuteReader
Dim oreg As New ListViewItem
While Reader.Read = True
oreg = ListView1.Items.Add(Reader("codigo"))
oreg.SubItems.Add(Reader("nombres"))
oreg.SubItems.Add(Reader("apellidos"))
oreg.SubItems.Add(Reader("direccin"))

Select Case Reader("e_civil")


I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Case "C" : oreg.SubItems.Add("Casado")


Case "S" : oreg.SubItems.Add("soltero")
Case "D" : oreg.SubItems.Add("Divorciado")
Case "V" : oreg.SubItems.Add("Viudo")
End Select

Select Case Reader("sexo")


Case 1 : oreg.SubItems.Add("Masculino")
Case 0 : oreg.SubItems.Add("Femenino")
End Select

oreg.SubItems.Add(Reader("Sueldo"))

Select Case Reader("Retirado")


Case "0" : oreg.SubItems.Add("No")
Case "1" : oreg.SubItems.Add("S")
End Select
End While
'Nos desconctamos de la base de datos.
conection.Close()
Reader.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub BtnNuevo_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) _
Handles BtnNuevo.Click
instanciar_form(True)
End Sub

Private Sub BtnModificar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) _
Handles BtnModificar.Click
instanciar_form(False)
End Sub

Private Sub BtnEliminar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) _
Handles BtnEliminar.Click
'Capturamos el cdigo del registros a eliminar.
Dim cod_eliminar As String = InputBox("Por favor asegrese de ingresar
el cdigo correcto" _
+ vbCrLf + vbCrLf + vbCrLf + "Ingrese cdigo", "Eliminar registro", "1",
Me.Width / 2, Me.Height / 2)
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Dim respuesta As MsgBoxResult = MsgBox("Seguro de eliminar",


MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, "Aviso")
'En caso de confirmar la eliminacin del registro, entonces...
If respuesta = MsgBoxResult.Yes Then
'...Eliminamos el registro conctandonos al origen de datos
Dim sql As New String("delete from vendedores where
codigo=@codigo")
Dim ocmd As New SqlCommand
ocmd.Parameters.Add(New SqlParameter("@codigo",
SqlDbType.Int)).Value = cod_eliminar
'Nos conctamos a la base de datos.
conection.Open()
ocmd.CommandText = sql
ocmd.Connection = conection
ocmd.ExecuteNonQuery()
MsgBox("El registro ha sido eliminado con xito")
conection.Close()
End If
End Sub
Sub instanciar_form(ByVal valor_estado As Boolean)
Dim oForma As New auxiliar
Estado = valor_estado
oForma.ShowDialog()
End Sub
End Class
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Private Sub BtnCancelar_Click(ByVal sender As System.Object, ByVal e _


As System.EventArgs) Handles BtnCancelar.Click
Me.Close()
End Sub

Private Sub Guardar_cambios_Click(ByVal sender As System.Object, ByVal e _


As System.EventArgs) Handles BtnGuardar_cambios.Click
'guardamos los cambios realizados
Dim sqlcadena As String
sqlcadena = New String("update vendedores set
nombres=@nombres,apellidos=@apellidos," + _
"direccin=@direccin,e_civil=@civil,sexo=@sexo,
sueldo=@sueldo,retirado=@retirado where codigo=@codigo")
Dim ocmd As New SqlCommand
ocmd.Parameters.Add(New SqlParameter("@codigo", SqlDbType.Int)).Value
= CboCodigo.Text
ocmd.Parameters.Add(New SqlParameter("@nombres", SqlDbType.Text,
25)).Value = Txtnom.Text.ToString
ocmd.Parameters.Add(New SqlParameter("@apellidos", SqlDbType.Text,
25)).Value = Txtapel.Text.ToString
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

ocmd.Parameters.Add(New SqlParameter("@direccin", SqlDbType.VarChar,


60)).Value = Txtdir.Text
ocmd.Parameters.Add(New SqlParameter("@sueldo",
SqlDbType.Decimal)).Value = Txtsueldo.Text
Select Case CboCivil.Text
Case Is = "Casado"
ocmd.Parameters.Add("@civil", SqlDbType.Char, 1).Value = "C"
Case Is = "Soltero"
ocmd.Parameters.Add("@civil", SqlDbType.Char, 1).Value = "S"
Case Is = "Viudo"
ocmd.Parameters.Add("@civil", SqlDbType.Char, 1).Value = "V"
Case Is = "Divorciado"
ocmd.Parameters.Add("@civil", SqlDbType.Char, 1).Value = "D"
End Select

If CboSexo.Text = "Masculino" Then


ocmd.Parameters.Add("@sexo", SqlDbType.Int, 1).Value = 1
ElseIf CboSexo.Text = "Femenino" Then
ocmd.Parameters.Add("@sexo", SqlDbType.Int, 1).Value = 0
End If
If chkRetirado.Checked = True Then
ocmd.Parameters.Add("@retirado", SqlDbType.Bit, 1).Value =
chkRetirado.Checked
ElseIf chkRetirado.Checked = False Then
ocmd.Parameters.Add("@retirado", SqlDbType.Bit, 1).Value =
chkRetirado.Checked
End If
conection.Open()
ocmd.CommandText = sqlcadena
ocmd.Connection = conection
ocmd.ExecuteNonQuery()
conection.Close()
End Sub
'Este evento lo que hace es guardar los datos del nuevo registro en la base de
datos
Private Sub BtnGuardar_nuevo_Click(ByVal sender As System.Object, ByVal e
As _
System.EventArgs) Handles BtnGuardar_nuevo.Click
Dim ocmd As New SqlCommand
Dim sqlcadena As New String("Insert into vendedores(nombres,apellidos," +
_
"direccin,e_civil,sexo,sueldo,retirado) values
(@nombres,@apellidos,@direccin," + _
"@e_civil,@sexo,@sueldo,@retirado)")
ocmd.Parameters.Add(New SqlParameter("@nombres", SqlDbType.Text,
25)).Value = Txtnom.Text.ToString
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

ocmd.Parameters.Add(New SqlParameter("@apellidos", SqlDbType.Text,


25)).Value = Txtapel.Text.ToString
ocmd.Parameters.Add(New SqlParameter("@direccin", SqlDbType.VarChar,
60)).Value = Txtdir.Text.ToString
ocmd.Parameters.Add(New SqlParameter("@sueldo", SqlDbType.Real)).Value
= CDbl(Txtsueldo.Text)
Select Case CboCivil.Text
Case "Casado"
ocmd.Parameters.Add("@e_civil", SqlDbType.Char, 1).Value = "C"
Case "Soltero"
ocmd.Parameters.Add("@e_civil", SqlDbType.Char, 1).Value = "S"
Case "Viudo"
ocmd.Parameters.Add("@e_civil", SqlDbType.Char, 1).Value = "V"
Case "Divorciado"
ocmd.Parameters.Add("@e_civil", SqlDbType.Char, 1).Value = "D"
End Select
If CboSexo.Text = "Masculino" Then
ocmd.Parameters.Add("@sexo", SqlDbType.Int).Value = 1
ElseIf CboSexo.Text = "Femenino" Then
ocmd.Parameters.Add("@sexo", SqlDbType.Int).Value = 0
End If
If chkRetirado.Checked = True Then
ocmd.Parameters.Add("@retirado", SqlDbType.Bit).Value = 1
ElseIf chkRetirado.Checked = False Then
ocmd.Parameters.Add("@retirado", SqlDbType.Bit).Value = 0
End If
conection.Open()
ocmd.CommandText = sqlcadena
ocmd.Connection = conection
'el mtodo ExecuteNonQuery() del objeto Command ejecuta una instruccin
'de Transact-SQL en la conexin y devuelve el nmero de filas afectadas.
ocmd.ExecuteNonQuery()
conection.Close()
End Sub

Private Sub BtnMostrar_datos_Click(ByVal sender As System.Object, ByVal e As


_
System.EventArgs) Handles BtnMostrar_datos.Click
'Muestra los datos del registro tomando como parmetro el cdigo.
Dim sql As New String("select * from vendedores where codigo=@codigo")
Dim ocmd As New SqlCommand(sql, conection)
conection.Open()
'Haciendo uso de parmetros
ocmd.Parameters.Add("@codigo", SqlDbType.Int).Value = CboCodigo.Text
Reader = ocmd.ExecuteReader
Reader.Read()
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

'A continuacin leemos todos los campos, excepto el campo cdigo, del
'registro dnde el cdigo se especific en la instruccin Transact-SQL

'Leemos el campo "nombres"


Txtnom.Text = Reader("nombres")
'Leemos el campo "apellidos"
Txtapel.Text = Reader("apellidos")
'Leemos el campo "direccin"
Txtdir.Text = Reader("direccin")
'Leemos el campo "sueldo"
Txtsueldo.Text = Reader("sueldo")
'Leemos el campo "e_civil"
Select Case Reader("e_civil")
Case Is = "C" : CboCivil.SelectedIndex = 0
Case Is = "S" : CboCivil.SelectedIndex = 1
Case Is = "V" : CboCivil.SelectedIndex = 2
Case Is = "D" : CboCivil.SelectedItem = 3
End Select

'Leemos el campo "sexo"


Select Case Reader("sexo")
Case Is = 1 : CboSexo.SelectedIndex = 0
Case Is = 0 : CboSexo.SelectedIndex = 1
End Select
'Leemos el campo "retirado"
chkRetirado.Checked = Reader("retirado")
Reader.Close()
conection.Close()
End Sub

Private Sub auxiliar_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) _
Handles MyBase.Load
If Estado = True Then
CboCodigo.Visible = False
Label1.Visible = False
BtnMostrar_datos.Visible = False
BtnGuardar_cambios.Visible = False
Else

BtnGuardar_nuevo.Visible = False
Dim o As New SqlCommand("select * from vendedores", conection)
conection.Open()
'El mtodo ExecuteReader() enva CommandText a Connection y crea un
SqlDataReader.
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Reader = o.ExecuteReader
While Reader.Read = True
'Leemos el campo "codigo" de cada uno de los registros.
CboCodigo.Items.Add(Reader("codigo"))
End While
conection.Close()
CboCodigo.SelectedIndex = 0
End If

End Sub
End Class

Filtrar las columnas de una tabla y realizar bsquedas en un DataSet


[Mejorando el rendimiento de la aplicacin y ralizando bsquedas
rpidas trabajando en modo desconectado]

Una de las caractersticas de esta nueva tecnologa .NET es que los


desarrolladores podemos construir aplicaciones cada vez ms escalables, esto
es debido a que podemos trabajar en modo desconectado; es decir,
reduciendo al mximo el nmero de "conexiones abiertas" en la base de
datos. Adems sabemos que anteriormente se obtena mejor rendimiento
manteniendo una conexin abierta para la conexin a la fuente de datos, esto
era utilizando ADO, pero como todo cambia conforme avanza la tecnologa y la
ciencia, es as que gracias a los famosos DataSets nos damos ese privilegio de
tomar una parte de los datos y trabajar con ellos mantenindolos en memoria
en forma relacional. Todo esto se lo debemos a Microsoft por haber
considerado en su gran lista de prioridades para ADO .NET lo antes
mencionado. Para entender todos estos conceptos, creo conveniente que debe
quedar claro algunas cosillas con respecto a ADO .NET.
ADO .NET Constituye la interfaz fundamental de las aplicaciones para
proporcionar servicios de acceso a datos en la plataforma Microsoft .NET.
ADO.NET proporciona acceso coherente a orgenes de datos como Microsoft
SQL Server, as como a orgenes de datos expuestos mediante OLE DB y XML.
Las aplicaciones para usuarios que comparten datos pueden utilizar ADO.NET
para conectar a estos orgenes de datos y recuperar, manipular y actualizar los
datos.

ADO.NET separa limpiamente el acceso a datos de la manipulacin de datos y


crea componentes discretos que se pueden usar por separado o
conjuntamente. ADO.NET incluye proveedores de datos de .NET Framework
para conectarse a una base de datos, ejecutar comandos y recuperar
resultados. Esos resultados se procesan directamente o se colocan en un
objeto DataSet de ADO.NET con el fin de exponerlos al usuario para un
propsito especfico, junto con datos de varios orgenes, o de utilizarlos de
forma remota entre niveles. El objeto DataSet de ADO.NET tambin puede
utilizarse independientemente de un proveedor de datos de .NET Framework
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

para administrar datos que son locales de la aplicacin o que proceden de un


origen XML.

Las clases de ADO.NET se encuentran en System.Data.dll y se integran con las


clases de XML incluidas en System.Xml.dll. Al compilar cdigo que utiliza el
espacio de nombres System.Data, haga referencia tanto a System.Data.dll
como a System.Xml.dll. ADO.NET proporciona a los programadores que
escriben cdigo administrado una funcionalidad parecida a la que ADO
proporciona a los programadores de COM nativo. Para obtener una descripcin
de las diferencias entre ADO y ADO.NET, te invito a ver "ADO.NET para el
programador de ADO" en http://msdn.microsoft.com/library/en-
us/dndotnet/html/ADONETProg.asp.

El DataSet de ADO.NET es una representacin de datos residente en memoria


que proporciona un modelo de programacin relacional coherente
independientemente del origen de datos que contiene. Un DataSet representa
un conjunto completo de datos, incluyendo las tablas que contienen, ordenan
y restringen los datos, as como las relaciones entre las tablas.

El objetivo de este artculo no es explicar a fondo todo respecto a ADO .NET,


sino ms bien poner en prctica algunos conceptos arriba explicados. A
continuacin vamos directo al grano; es decir al ejemplo. Tratar de no ser tan
bruto para explicarles lo que implement en mi preferido lenguaje Visual
Basic .NET. Mostrar un ejemplo donde se trabajar con todas la tablas de la
base de datos Northwind, donde despus de "vaciar" las tablas de la base de
datos en una dataset procederemos a visualizar en una grilla tan slo las
columnas que el usuario seleccione. Luego haremos la consulta en la tabla
Customers de todos los clientes de acuerdo al pas, para nuestro ejemplo ser
"France".Los resultados se visualizarn en otra grilla.

En la parte baja de este artculo se encuentra el fichero con el cdigo de la


aplicacin que implement, donde podrs chekear mejor el programa. A
continuacin sigue el cdigo en Visual Basic .Net:

'La cadena de conexin se declara en un mdulo.


Module Module1
Public StringConexion As String = "Data Source=(Local);Initial
Catalog=Northwind; Integrated Security=SSPI"
End Module

Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Public Shared MiDataset As New DataSet
Public i As Integer = 0
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
BtnFiltrarColumnas.Enabled = False
GroupBox1.Enabled = False
'Establecemos las cadenas de comandos y conexiones para
'acceder a cada una de las tablas de la base de datos
Dim Adaptador1 As New SqlDataAdapter("SELECT * FROM Products",
StringConexion)
Dim Adaptador2 As New SqlDataAdapter("SELECT * FROM
customercustomerdemo", StringConexion)
Dim Adaptador3 As New SqlDataAdapter("SELECT * FROM
customerdemographics", StringConexion)
Dim Adaptador4 As New SqlDataAdapter("SELECT * FROM
employeeterritories", StringConexion)
Dim Adaptador5 As New SqlDataAdapter("SELECT * FROM territories",
StringConexion)
Dim Adaptador6 As New SqlDataAdapter("SELECT * FROM suppliers",
StringConexion)
Dim Adaptador7 As New SqlDataAdapter("SELECT * FROM employees",
StringConexion)
Dim Adaptador8 As New SqlDataAdapter("SELECT * FROM shippers",
StringConexion)
Dim Adaptador9 As New SqlDataAdapter("SELECT * FROM region",
StringConexion)
Dim Adaptador10 As New SqlDataAdapter("SELECT * FROM Customers",
StringConexion)
Dim Adaptador11 As New SqlDataAdapter("SELECT * FROM orders",
StringConexion)
Dim Adaptador12 As New SqlDataAdapter("SELECT * FROM [Order
Details]", StringConexion)
Dim Adaptador13 As New SqlDataAdapter("SELECT * FROM Categories",
StringConexion)
'Ahora instanciamos una DataSet.
MiDataset = New DataSet
'enlazando al dataset con el adapter correspondiente.
Adaptador1.Fill(miDataset, "Products")
Adaptador2.Fill(MiDataset, "customercustomerdemo")
Adaptador3.Fill(miDataset, "customerdemographics")
Adaptador4.Fill(miDataset, "[employeeterritories]")
Adaptador5.Fill(miDataset, "territories")
Adaptador6.Fill(miDataset, "suppliers")
Adaptador7.Fill(miDataset, "employees")
Adaptador8.Fill(miDataset, "shippers")
Adaptador9.Fill(miDataset, "region")
Adaptador10.Fill(miDataset, "Customers")
Adaptador11.Fill(miDataset, "orders")
Adaptador12.Fill(miDataset, "[Order Details]")
Adaptador13.Fill(miDataset, "Categories")
For i = 0 To miDataset.Tables.Count - 1
CboLista.Items.Add(MiDataset.Tables(i).TableName)
Next
'Seleccionamos por defecto la tabla [employeeterritories].
CboLista.SelectedIndex = 0
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

'Ahora establecemos el texto correspondiente al ttulo


'de la ventana de nuestro DataGrid1 como "[employeeterritories]".
DataGrid1.CaptionText = CboLista.Text
For i = 0 To (Me.miDataset.Tables(CboLista.Text).Columns.Count - 1)
'Procedemos a llenar nuestro ListBox1 con los nombres de la
'tabla [employeeterritories], los cuales sern usados para
'elegir en que tabla realizaremos la respectivas bsquedas.

Me.ListBox1.Items.Add(Me.miDataset.Tables(CboLista.Text).Columns.Item(i).Ca
ption)
Next
MostrarColumnas(CboLista.Text)
End Sub
'Esta funcin servir para mostrar todas las columnas del DataSet
'que fueron checkeadas en LstColumnas.
Private Function FiltrarDataSet() As DataSet
Try
Dim TemporalDataSet As New DataSet
Dim Columna As DataColumn
TemporalDataSet = Me.MiDataset.Copy()
'Filtraremos todos los Chek que no estn selecionados,
'para despus eliminarmos.
For i = 0 To Me.Lstcolumnas.Items.Count - 1
If Not Me.Lstcolumnas.GetItemChecked(i) Then
' Recuperamos el nombre para determinar la columna a eliminar.
Columna =
TemporalDataSet.Tables(CboLista.Text).Columns(Me.Lstcolumnas. _
GetItemText(Me.Lstcolumnas.Items.Item(i)))
'Ahora borramos la columna.

TemporalDataSet.Tables(CboLista.Text).Columns.Remove(Columna)
End If
Next
CboLista.Enabled = True
Return TemporalDataSet
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As


System.EventArgs) _
Handles Timer1.Tick
Label1.Visible = False
Timer2.Enabled = True
Timer1.Enabled = False
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) _
Handles Timer2.Tick
Label1.Visible = True
Timer1.Enabled = True
Timer2.Enabled = False
End Sub
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal


e As _
System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles
LinkLabel1.LinkClicked
Dim NewProcess As New Process
'Este es el cdigo Html que nos permite llamar al Outlook Express.
NewProcess.Start("mailto:Withoutlimits2983@hotmail.com?
subject=(ninguno)")
End Sub

Private Sub BtnSalir_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) _
Handles BtnSalir.Click
Dim respuesta As DialogResult
respuesta = MsgBox(" Seguro que desea salir?",
MsgBoxStyle.DefaultButton3 + _
MsgBoxStyle.YesNo + MsgBoxStyle.Question, "Cerrar Aplicacin")
If respuesta = DialogResult.Yes Then
Me.Close()
End If
End Sub

Private Sub BtnTodos_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) _
Handles BtnTodos.Click
'Recordemos que la DataGrid para llenar los resultados es Datagrid2.
Me.DataGrid2.DataSource = Me.MiDataset.Tables(CboLista.Text)
Dim j As Integer = 0
Try
'Bscamos en cada fila de acuerdo a la columna especificada en el
Listbox1.
For i = 0 To (Me.MiDataset.Tables(CboLista.Text).Rows.Count - 1)
If Not
(Me.TxtConsulta.Text.Equals(Me.MiDataset.Tables(CboLista.Text).Rows. _
Item(i).Item(ListBox1.SelectedIndex))) Then
'Los registros no encontrados sern eliminados. De esta manera
se ir
'filtrando los registros encontrados.
Me.MiDataset.Tables(CboLista.Text).Rows.Item(i).Delete()
j=j+1
End If
Next
Me.DataGrid2.Visible = True
Catch ex As IndexOutOfRangeException
MsgBox(ex.Message & "Seleccione una opcin de bsqueda por
campo", MsgBoxStyle.Critical, _
"Aviso Al Usuario")
Me.DataGrid2.Visible = False
End Try
Dim MiDataSetTemporal As New DataSet
'Despus de filtrar los registros encontrados, haremos
'una copia de esta tabla en MiDataSetTemporal.
MiDataSetTemporal.Tables.Add(Me.MiDataset.Tables(CboLista.Text).Copy)
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

'Para no modificar el contenido original de MiDataSet,


'cancelaremos los cambios efectuados ms arriba.
Me.MiDataset.Tables(CboLista.Text).RejectChanges()
'Visualizamos los resultados, vaciando los registros
'de MiDataSetTemporal a la DataGrid2.
Me.DataGrid2.DataSource = MiDataSetTemporal.Tables(CboLista.Text)
'Contabilizamos los registros encontrados.
Me.DataGrid2.CaptionText =
MiDataSetTemporal.Tables(CboLista.Text).Rows.Count - _
j & " registros encontados."
'Cerramos o eliminamos MiDataSetTemporal.
MiDataSetTemporal.Dispose()
End Sub
Public Sub MostrarColumnas(ByVal NombreTabla As String)
For i = 0 To (MiDataset.Tables(NombreTabla).Columns.Count - 1)

Me.ListBox1.Items.Add(MiDataset.Tables(NombreTabla).Columns.Item(i).Captio
n)
Next
End Sub

Private Sub ChkTodos_CheckedChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) _
Handles ChkTodos.CheckedChanged
If ChkTodos.Checked = True Then
'Marcamos todos las casillas
For i = 0 To Lstcolumnas.Items.Count - 1
Lstcolumnas.SetItemChecked(i, True)
Next
Else
'Desmarcamos todos las casillas
For i = 0 To Lstcolumnas.Items.Count - 1
Lstcolumnas.SetItemChecked(i, False)
Next
End If
End Sub
Private Sub TxtConsulta_TextChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) _
Handles TxtConsulta.TextChanged
BtnTodos.Enabled = True
End Sub

Private Sub BtnMostrarColumnas_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) _
Handles BtnMostrarColumnas.Click
Dim NumeroColumnas As Integer
Dim NombreColumnas As String
GroupBox1.Enabled = True
ChkTodos.Enabled = True
NumeroColumnas = MiDataset.Tables(CboLista.Text).Columns.Count
Lstcolumnas.Items.Clear()
For i = 0 To (NumeroColumnas - 1)
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

'Llenamos LstColumnas con todas los campos de la tabla seleccionada


en CboLista.
NombreColumnas =
MiDataset.Tables(CboLista.Text).Columns.Item(i).Caption
Lstcolumnas.Items.Add(NombreColumnas)
Next
DataGrid1.CaptionText = CboLista.Text
BtnMostrarColumnas.Enabled = False
BtnFiltrarColumnas.Enabled = True
CboLista.Enabled = False
ListBox1.Items.Clear()
'Llamamos al procedimiento para llenar el ListBox1.
MostrarColumnas(CboLista.Text)
End Sub

Private Sub BtnFiltrarColumnas_Click(ByVal sender As System.Object, ByVal


e As System.EventArgs) _
Handles BtnFiltrarColumnas.Click
BtnMostrarColumnas.Enabled = True
BtnFiltrarColumnas.Enabled = False
Dim opcion As String = CboLista.SelectedItem
'Llenamos la DataGrid1 con los datos filtrados.
DataGrid1.DataSource = Me.FiltrarDataSet()
DataGrid1.DataMember = CboLista.Text
End Sub
End Class
Aqu les muestro la interface de la aplicacin, donde se puede observar todo
los resultados.
I. E. S. T. PRIVADO SELVA SYSTEM VISUAL BASIC / ADO.NET

Anda mungkin juga menyukai