Libro
Libro
Libro
CESCA
(ADO.NET)
Que es ADO.NET
Conocer los Espacios entre nombre (Namespace)
Conocer los Proveedores para los diferentes Gestores de Base de Datos
INTRODUCCION
ADO.NET.- Es un conjunto de libreras para el acceso de datos, ya sea estn en una base
de datos o en hoja de clculo o un archivo XML.
ADO.NET.- Forma parte del tercer nivel del conjunto de objetos que el .NET
Framework ofrece para trabajar dentro de esta plataforma, junto con XML constituyen
un subgrupo especfico que estn preparados para manejar datos.
En la actualidad ADO.NET ya es parte del NET. Framework quiere decir que ADO.NET
es parte del sistema operativo y no ms un redistribuible que se necesita alojar junto al
cliente o junto al instalador de un aplicacin. Esto simplifica que nosotros, como
desarrolladores, estaremos enfocados mas el acceso a datos y a la lgica para manipular
estos datos, y no tendremos porque preocuparnos en las libreras del cliente.
Pero 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 orgenes de datos expuestos mediante OLE DB y
XML.
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 existir con ADO.
ADO.NET utiliza XML como el formato para transmitir datos desde y hacia su
base datos y su aplicacin WEB.
System.Data
System.Data.SqlClient
System.Data.OleDb
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 basad 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, 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-Server 7.0, ejecutar Comandos y leer los
resultados. El espacio de nombre 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.Odbc
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.
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.
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 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 orgenes de datos y su cdigo, con lo que aumenta
el rendimiento sin sacrificar la funcionalidad.
VB.NET ADO.NET
Estudiando los Namespace
OleDb y SqlClient
Objetivo:
Al trmino de esta separata el alumno Conocer:
OleDb
Este namespace me permite conectarme a una base de datos de Microsoft ACCESS su
espacio entre nombres es:
Imports System.Data
Imports System.Data.OleDB
Cuando importamos los espacios entre nombres System.Data.OleDb importamos todas las
libreras de clases que contiene el espacio entre nombre OleDb y por consecuente las
principales clases que me carga ala hora de importacin son los siguientes:
OleDbCommand
OleDbConnection
OleDbDataAdapter
OleDbDataReader
SqlClient
El namespace SqlClient me permite conectarme a una base de dato de SQL Server su
espacio entre nombre es:
Imports System.data
Imports System.Data.SqlClient
SqlConnection
SqlDataAdapter
SqlCommand
SqlDataReader
ConnectionString
Obtiene o establece la cadena de conexin Utilizada para abrir una base de datos
SQL-Server o Microsoft Access.
Database
Obtiene el nombre de la base datos actual o de la que se va a utilizar una vez que
se abre la conexin.
DataSource
Obtiene el nombre de la instacia de SQL Server con la que se va a establecer la
conexin.
ChangeDatabase
Cambia la base de datos actual de una conexin SqlConnection abierta.
Open
Abre una conexin de base de datos con los valores de propiedad que espesifica el
connectionString o mi cadena de conexin.
Close
Cierra la cadena de conexin con la base de datos.
CreateCommand
Crea y debuelve un objeto Sqlcommand asociado a la conexin.
frmconecion
BtnAbrir BtnCerrar
3.- Debajo de frmconecion declarar una variable como la siguiente luego asigarle la
variable al objeto de Connecion en este Caso sera OleDbconeecion
Provaider: Hace la referencia que estoy usando una base de datos Microsoft Access
cn.Open()
messageBox.Show("Conexion Abierta con la base de datos")
cn.Close()
MessageBox.Show("Conexion cerrada")
Para esto el Profesor entregara una base de datos creado en SQL Server.
frmconecion
BtnAbrir
btncerrar
Se debe crear las variables que representan la cadena de conexin y el objeto conexin, en
un mbito general del formulario.
La cadena de conexin, representa la cadena que sera leida por el proveedor el cual se
comunicara con el servidor y la base de datos mencionadas en esta Cadena.
Data Source="."
Indica el nombre de mi servidor o nombre de mi PC
Nota:
El punto que se le asigo en Data Source hace referencia al nombre de mi Servidor
Integrated Security=true"
Indica que se usa seguridad integrada
Integrated Security=true"
Integrated Security=SSPI"
cn.Open()
MessageBox.Show("Conexion Abierta")
cn.Close()
MessageBox.Show("Conexion Cerrada")
VB.NET ADO.NET
Estudiando los Namespace
OleDb y SqlClient
Objetivo:
Al trmino de esta separata el alumno Conocer:
Ejemplo 01:
Imports System.Data.OleDb
Imports System.IO
cn.ConnectionString = strcon
Para recordar.
El Imports System.IO permite traer la clase Path esta clase me permite visualizar todas las
caractersticas de la ubicacin del archivo.
No solo me permite traer a la clase Path tambin me permite traer las clases que permiten
crear archivos y abrir archivos estas clases son:
1) Ingresar al Sql:
Botn Inicio/Ejecutar/ssms
1. Autenticacin Windows
2. Autenticacin Sql-Server
Diferencias.
Seccin de Trabajo.
)
Use master
Go
--Creamos la BD Ventas
Create Database Ventas
Go
--Usamos la BD ventas
Use Ventas
Go
Imports System.Data.SqlClient
Manual de ADO.NET 1
http://www.4shared.com/dir/xqEfIPhy/ADONET.html
BaseDatos Ventas
http://www.4shared.com/file/AFfP7HUz/Ventas.html
ADO.NET
Estudiando los objetos OleDbDataAdapter, SqlDataAdapter y Dataset
Objetivo:
Al trmino de esta separata el alumno ser capas de manejar los objetos:
OleDbdataAdapter
SqlDataAdapter
Dataset
El mtodo Fill de DataAdapter llena un DataSet slo con las columnas y filas de un
origen de datos.
SelectCommand
Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL
para seleccionar registros en el origen de datos.
InsertCommand
Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL
para insertar nuevos registros en el origen de datos.
DeleteCommand
UpdateCommand
Cadena de Conexin
SqlConnection
Open
SqlDataAdapter
Close Fill
Dataset
SqlDataAdapter
El objeto DATASET
Entonces se podra decir que el DATASET es una pequea base de datos relacional
mantenida en memoria en el cliente. Dispone de las capacidades de crear mltiples tablas,
rellenarlas con datos que preceden de diferentes fuentes, imponer relaciones entre pares
de tablas, etc.
ADO.NET (Lab)
Estudiando los objetos OleDbDataAdapter, SqlDataAdapter y Dataset
Objetivo:
Al trmino de esta separata el alumno ser capas de manejar los objetos:
OleDbdataAdapter
SqlDataAdapter
Dataset
Imports System.Data.SqlClient
!!!
Disear la siguiente interfaz y practicar lo aprendido
Nota: hacer uso de un solo DataSet
Laboratorio Practico
Usando las funciones Max, Min, AVG, Count desde Access:
Ejemplo 01:
Usar la BD Ventas
Imports System.Data.OleDb
da.Fill(ds, "Producto")
txtTotal.Text = CDec(ds.Tables(0).Rows(0)(0))
txtPrecioMinimo.Text = CDec(ds.Tables(0).Rows(0)(1)).ToString("n2")
txtPrecioMaximo.Text = CDec(ds.Tables(0).Rows(0)(2)).ToString("n2")
txtPrecioPromedio.Text = CDec(ds.Tables(0).Rows(0)(3)).ToString("n2")
Ejemplo 02:
Imports System.Data.OleDb
Crear el siguiente procedimiento debajo de un End Sub ojo debajo de un End Sub:
da2.Fill(ds, "Cliente")
Dim da3 As New OleDbDataAdapter("Select IdCargo,Cargo From Cargos Order by IdCargo
desc", cn)
da3.Fill(ds, "Cargo")
dgdProducto.DataSource = ds.Tables("Producto")
QuitarOrdenGrid(dgdProducto)
dgdCliente.DataSource = ds.Tables("Cliente")
QuitarOrdenGrid(dgdCliente)
dgdCargos.DataSource = ds.Tables("Cargo")
QuitarOrdenGrid(dgdCargos)
Application.Exit()
End If
DataSet
DataSet, que es una cach de memoria interna de datos recuperados de un origen de datos,
representa un componente fundamental de la arquitectura de ADO.NET. 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. Para obtener
informacin ms detallada sobre el trabajo con objetos DataSet.
Los objetos DataTable contienen los datos, mientras que 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", la cadena que se utilice para buscar una de
las tablas se considerar que 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.
AcceptChanges:
Confirma todos los cambios realizados en este DataSet desde que se ha cargado o desde la
ltima vez que se ha llamado a AcceptChanges.
Clear
Borra cualquier dato de DataSet mediante el procedimiento de quitar todas las filas de
todas las tablas.
HasChanges:
Sobrecargado. Obtiene un valor que indica si DataSet presenta cambios, incluyendo filas
nuevas, eliminadas o modificadas.
Load:
ReadXML
ReadXmlSchema
WriteXML
WhiteXmlSchema
Imports System.Data.OleDb
Un dataview me permite crear mltiples vistas de uno o ms objetos datatable los objetos
daview son los objetos de datos que se vinculan con los controles nos estamos vinculado
directamente el dataset sino alguna de vistas que el dataset puede exponer.
La clase Dataview representa una vista personalizada que une datos de un DataTable para
clasificar, filtrar, editar y navegar. Un DataView es similar a una vista de un DataTable,
que permite a los programadores establecer un orden clasificado y filtrar en una vista de
la tabla aparte.
Un DatasetView es similar a una vista en la parte superior del DataSet y permite a los
programadores establecer un orden predeterminado y filtrar las tablas individuales.
Adems permite a los Dataviews vincularse y utilizarse para DataBinding. De manera
clasifica, la unin de datos se utilizaba dentro de las aplicaciones para aprovechar los
datos almacenados en las bases de datos.
La unin de datos de Windows Forms le permite acceder a los datos desde bases de datos,
as como a los datos en otras estructuras, como arreglos y colecciones (suponiendo que se
han cumplido un mnimo de requerimientos).
Laboratorio Prctico
Ejemplo 01:
txtBuscar
Imports System.Data.OleDb
Ejemplo 02:
Imports System.Data.OleDb
dv.Sort = cboCriterio.Text
TipoDato = dv.Table.Columns(cboCriterio.Text).DataType.Name.ToString
txtBuscar.Clear()
'Creamos un Formulario
Dim frmDetalle As New Form
'Modificamos sus propiedades del frmDetalles
frmDetalle.Text = "Detalles de Pedidos"
frmDetalle.Width = 600
frmDetalle.Height = 200
frmDetalle.StartPosition = FormStartPosition.CenterScreen
'Creamos una DataGridView
Dim dgv As New DataGridView
'Modificamos sus propiedades del dgv
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect
dgv.ReadOnly = True
dgv.Dock = DockStyle.Fill
'Declaramos una variable para capturar el codigo
Dim codigo As Integer = dgvPedido.CurrentRow.Cells(0).Value
'Creamos una consulta
Dim da As New OleDbDataAdapter("Select * From [Detalles de Pedidos] Where
NumeroPedido=" & codigo, cn)
Dim ds As New DataSet
'LLenamos el DataSet
da.Fill(ds, "Detalles")
'Enlazamos el dataset con el dgv
dgv.DataSource = ds.Tables(0)
'Agregamos el dgv al Formulario frmDetalle
frmDetalle.Controls.Add(dgv)
'Mostramos el Formulario
frmDetalle.ShowDialog()
SelectionMode=FullRowSelect
ReadOnly=True
Anchor = activar todos los bordes
Imports System.Data.OleDb
Ah probar la aplicacin.
Ejemplo 01:
SelectionMode=FullRowSelect
ReadOnly=True
Anchor = activar todos los bordes
Imports System.Data.OleDb
REM procedimiento para listar los campos dentro del combobox cbocriterio
Private Sub ListarCampos()
For i As Integer = 0 To dv.Table.Columns.Count - 1
cboCriterio.Items.Add(dv.Table.Columns(i).ColumnName)
Next
End Sub
La configuracin del SqlCommand, varia al del interior en este tenemos que indicarle el
tipo de dato y adems el nombre del campo que se hace referencia.
SqlDataAdapter.SelectCommand
Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL
para seleccionar registros en el origen de datos.
SqlDataAdapter.InsertCommand
Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL
para insertar nuevos registros en el origen de datos.
SqlDataAdapter.Deletecommand
Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL
para eliminar registros de un conjunto de datos.
SqlDataAdapter.UpdateCommand
Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL
para actualizar las registros de la base de datos.
Empecemos a desarrollar:
use master
go
create database VentasPeru
go
use VentasPeru
go
Create table Productos
(
CodPro char(8)Primary key,
DesPro char(50),
StockMin int,
StockMax int,
StockActual int,
PrecVenta decimal(10,5)
)
go
Try
cn.Open()
Dim xComand As New SqlCommand("Select * From Productos", cn)
With xComand
.CommandType = CommandType.Text
End With
da.SelectCommand = xComand
da.Fill(ds, "Productos")
REM para la eliminacion
xComand = New SqlCommand("Delete From Productos Where CodPro=@CodPro", cn)
xComand.CommandType = CommandType.Text
xComand.Parameters.Add("@CodPro", SqlDbType.Char, 8, "CodPro")
da.DeleteCommand = xComand
With xComand
.CommandType = CommandType.Text
.Parameters.Add("@CodPro", SqlDbType.Char, 8, "CodPro")
dgdProductos.DataSource = ds.Tables(0)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
If ds.HasChanges Then
da.Update(ds, "Productos")
MessageBox.Show("Los canbios fueron realizados", _
"Mantenimiento Productos", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End If
Recuerda si ves en control TABControl tiene 5 pestaas bien cada pestaa tiene un
DataGridView si quieres ver el ejemplo esta junto con este ejemplo y lo chekeas o si no
pasas la voz al profesor.
Sigamos:
Imports System.Data.SqlClient
Try
da.Fill(ds, "Productos")
DgdCliente.DataSource = ds.Tables(0)
REM Vista Simple
Dim dvVista As New DataView
With dvVista
.Table = ds.Tables(0)
.AllowDelete = False
.AllowEdit = True
.AllowNew = True
.RowFilter = ""
.Sort = "CodPro Desc"
End With
Dgdfiltrado.DataSource = dvVista
BindingContext
Propiedad de la clase form que representa el contexto de enlace a datos establecido en los
controles del formulario, es decir, toda la informacin de enlaces establecida entre los
controles y objetos proveedores de datos. Devuelve un objeto de tipo
BindingManagerBase o administrador de base de enlace a datos.
Cada objeto que herede de la clase control puede tener un solo objeto BindingContext.
Ese objeto BindingContext administra los objetos de BindingManagerBase para ese
control y cualquier control que este incluido. Hay que utilizar BindingContext con el fin
de crear o devolver BindingManagerBase para un objeto de datos utilizado por los
controles con enlace a datos incluidos. Normalmente, se utiliza el objeto BindingContext
de la clase form con el fin de devolver objetos BindingManagerBase para los controles
con enlace a datos del formulario.
me.BindingContext(<Dataset>,<nombre tabla>)
Este objeto es el que mantiene la posicin actual en la lista de datos. Las dos propiedades
mas importantes de los objetos de esta clase son:
Position: Devuelve o establece la fila actual (hay que tener en cuenta que la
primera fila tiene indice 0)
DataBinding
Los controles que con regularidad se utilizan en aplicaciones Windows asi como en
aplicaciones Web tienen una propiedad DataBinding, es necesario configurar la
propiedad de cada control que contenga el enlace a los datos, luego para administrar esta
se debe utilizar la propiedad BindingContext de la clase contenedora. Al usar el
BindingContext obtiene el BindingManagerBase que mantiene sincronizados todos los
controles enlazados al mismo origen de datos, se puede utilizar la propiedad position del
BindingManagerBase para especificar el elemento actualmente seleccionado de una
lista.
Sintaxis:
Por ejemplo
Para enlazar una caja de texto con el campo NomDis de la tabla Distrito (DTDistrito)
contenida en dataset previamente utilizo la siguiente instruccin.
Luego para administrar por ejemplo la posicin actual o lo que es lo mismo el registro
activo se utiliza la siguiente instruccin.
Me.BindingContext(ds.tables(0)).Position +=0
Ejercicio:
Pasos
Codificar:
A nivel de clase:
Dim cn As New SqlConnection("User id=sa;Server=.;Database=Almacen;Integrated
security=true")
da.Fill(ds, "Cliente")
txtCodClie.DataBindings.Add("Text", ds.Tables("Cliente"), "CodClie")
txtApeClie.DataBindings.Add("Text", ds.Tables("Cliente"), "ApeClie")
txtNomClie.DataBindings.Add("Text", ds.Tables(0), "NomClie")
txtDireccion.DataBindings.Add("Text", ds.Tables("Cliente"), "DirClie")
txtDistrito.DataBindings.Add("Text", ds.Tables("Cliente"), "NomDis")
txtTelefono.DataBindings.Add("Text", ds.Tables("Cliente"), "TelClie")
txtDNI.DataBindings.Add("Text", ds.Tables("Cliente"), "DniClie")
txtEmail.DataBindings.Add("Text", ds.Tables("Cliente"), "EmaiClie")
txtRUC.DataBindings.Add("Text", ds.Tables("Cliente"), "RucClie")
dgdcliente.DataSource = ds.Tables(0)
Call Registro(Integer.Parse(Me.BindingContext(ds.Tables(0)).Position + 1))
Listbox y Combobox
Propiedades:
Displaymenver
Obtiene o establece la propiedad que se va a mostrar desde el origen de Datos
DataSource
Obtiene o establece el origen de datos.
ValueMember
Obtiene o establece la propiedad que se utilizara como valor real para los elementos del
control.
SelectedValue
Obtiene o establece el valor del control segn la configuracion..
SelectedIndex
Obtiene o establece el indice que espesifica el elemento seleccionado.
Ejemplo 01
TxtValor1 TxtValor2
Importar el NameSpace
Imports System.Data.SqlClient
Nota:
Chicos de Ate-Vitarte Cambiar la cadena de conexin de = Manera SJM
Try
REM Procedimiento para Listar Distrito
REM Consulta a la tabla Distrito
Dim da As New SqlDataAdapter("Select CodDis,NomDis From Distrito", cn)
REM espesifico el tipo de comando
da.SelectCommand.CommandType = CommandType.Text
REM LLenado de datos
da.Fill(ds, "Dis")
REM Enlazando los datos con el ListBox y configurando
ListBox1.DataSource = ds.Tables(0)
ListBox1.DisplayMember = "NomDis"
ListBox1.ValueMember = "CodDis"
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Try
txtValor1.Text = ListBox1.SelectedValue
Catch ex As Exception
End Try
Ejemplo 01
Importar el NameSpace
Imports System.Data.SqlClient
Nota:
Chicos de Ate-Vitarte Cambiar la cadena de conexin de = Manera SJM
da.SelectCommand.CommandType = CommandType.Text
da.Fill(ds, "Clientes")
DataGridView1.DataSource = ds.Tables(0)
End Sub
da.SelectCommand.CommandType = CommandType.Text
Dim dt As New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
End Sub
Try
ListarCliente()
Catch ex As Exception
End Try
ListarClientexCodigo()
Ejemplo 02
Importar el NameSpace
Imports System.Data.SqlClient
Nota:
Chicos de Ate-Vitarte Cambiar la cadena de conexin de = Manera SJM
En el evento TextChanged:
ListarArticuloxNombre()
Try
ListarArticulo()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Ejemplo 03
Importar el NameSpace
Imports System.Data.SqlClient
Nota:
Chicos de Ate-Vitarte Cambiar la cadena de conexin de = Manera SJM
Try
ListarDistrito()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Try
GetClientexDistrito()
Catch ex As Exception
REM Throw ex
End Try
Propuesto:
Ejemplo 1:
Luego en VS.NET
Crear la siguiente Interfaz:
txtUsuario
txtPassword
En el evento Load
btningresar.Enabled = False
Else
MessageBox.Show("Error Usted no es usuario del sistema", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
Resultado:
Propuesto:
En la BD almacen si haces una consulta a la tabla usuario te daras cuenta que los
campos son casi los mismos y tienes algunos registros ahora de ti depende cual BD
utilizar.
Resultado:
DataView
Para este ejemplo utilizare la base de datos Almacen.
Imports System.Data.SqlClient
Importar el namespace
Imports System.Data.SqlClient
Dim da As SqlDataAdapter
Dim ds As New DataSet
Dim dv As New DataView
Sub llenarcombo()
ComboBox1.Items.Add("Codigo")
ComboBox1.Items.Add("Descripcion")
ComboBox1.Items.Add("Marca")
ComboBox1.Items.Add("Clase")
ComboBox1.Items.Add("Modelo")
End Sub
El paradigma de la conexin.
Uso del objeto DataReader y sus diferencias.
El paradigma de la conexin
Es difcil de asumir que accin tomar en cada caso, y es que dependiendo de lo que
vayamos a realizar, a veces es ms efectiva una accin que otra, y en otras ocasiones, no
est del todo claro, ya que no existe en s una regla clara que especifique qu accin tomar
en un momento dado.
Lo que s est claro es que el modelo de datos de ADO.NET que hemos visto, quedara
resumido en cuanto a la conectividad de la manera en la que se representa en la siguiente
imagen:
El objeto DataSet nos ofrece la posibilidad de almacenar datos, tablas y bases de datos de
una determinada fuente de datos.
De esta manera, podemos trabajar con las aplicaciones estando desconectados de la fuente
de datos.
Sin embargo, a veces necesitamos trabajar con la fuente de datos estando conectados a
ella.
El objeto DataReader nos permite como hemos indicado anteriormente, establecer una
conexin con una fuente de datos y trabajar con esta fuente de datos sin desconectarnos
de ella, sin embargo, hay diferentes cualidades y particularidades que conviene conocer.
Lo que hemos dicho anteriormente, requiere sin embargo, que esta conexin se establezca
en un modo de slo lectura, al contrario de lo que se puede hacer con el objeto DataSet,
con el que podemos interactuar con la fuente de datos en modo lectura y modo escritura.
El objeto DataReader slo permite que nos desplacemos por los datos en una sola
direccin, sin vuelta atrs.
Por el contrario, el objeto DataSet nos permite movernos por los registros para adelante y
para atrs.
Adems, slo podemos utilizar el objeto DataReader con conexiones establecidas en una
sentencia SQL por ejemplo, pero no podemos variar esta.
Para hacerlo, debemos entonces modificar la conexin con el comando establecido.
DataReader es rpido
Ejemplo 01:
Para este ejemplo utilizaremos la BD almacen:
Imports System.Data.SqlClient
cmd.CommandType = CommandType.Text
If cn.State <> ConnectionState.Open Then
cn.Open()
End If
REM ejecutamos el comando ExecuteReader
Dim dr As SqlDataReader = cmd.ExecuteReader
Dim i As Integer = 0
REM Si existen datos en el DataReader
While dr.Read
DgdCliente.Rows.Add()
DgdCliente.Rows(i).Cells(0).Value = dr.GetValue(0)
DgdCliente.Rows(i).Cells(1).Value = dr.GetValue(1)
DgdCliente.Rows(i).Cells(2).Value = dr.GetValue(2)
DgdCliente.Rows(i).Cells(3).Value = dr.GetValue(3)
i += 1
End While
REM cerramos el DR
dr.Close()
REM Cerramos la conexion
cn.Close()
Ejemplo 02
Control:
Utilizar la BD Almacen.
ListView
Crear un nuevo proyecto en VS.NET y disear la siguiente interfaz:
Imports System.Data.SqlClient
LstClientes.View = View.Details
LstClientes.GridLines = True
REM Creamos las Columnas en ListView
LstClientes.Columns.Add("Codigo", "Codigo", 80)
LstClientes.Columns.Add("Nombre", "Nombre", 120)
LstClientes.Columns.Add("Apellido", "Apellido", 140)
LstClientes.Columns.Add("Direccion", "Direccion", 199)
ListarDistrito()
ListarCliente()
List.SubItems.Add(dr(1).ToString())
List.SubItems.Add(dr(2).ToString())
List.SubItems.Add(dr(3).ToString())
LstClientes.Items.Add(List)
End While
dr.Close()
cn.Close()
Catch ex As Exception
End Try
Propuesto:
Cuando seleccione una opcin ejemplo clase me mostrara el combo la lista de clases
y al seleccionar un item del combo me permitir filtrar en la grilla, Lo mismo para
marca y modelo.
Restaurar la BD Almacen
cboDistrito
Ejemplo 01:
Importar el NameSpace
Imports System.Data.SqlClient
dgdCliente
En el anbito a nivel de clase codificar lo siguiente:
Ejemplo 02:
Importar el NameSpace
Imports System.Data.SqlClient
dgdCliente
En el anbito a nivel de clase codificar lo siguiente:
Donde:
dt.Rows(0)(0) dt.Rows(0)(CodClie)
Columna
Fila
End Try
Ejemplo 03:
rbtClase rbtMarca rbtPersonal
Importar el NameSpace
dgdArticulos
Imports System.Data.SqlClient
End Sub
Rem Listar Personal
Private Sub GetPersonal()
Dim da As New SqlDataAdapter("Select CodPer,Rtrim(NomPer)+','+ Rtrim(ApePer)as
NomCom From Personal", cn)
da.SelectCommand.CommandType = CommandType.Text
Dim dt As New DataTable
da.Fill(dt)
Cboopcion.DataSource = dt
Cboopcion.DisplayMember = "NomCom"
Cboopcion.ValueMember = "CodPer"
End Sub
dgdArticulos.DataSource = dt
lblfilas.Text = dt.Rows.Count
ElseIf rbtPersonal.Checked Then
Dim da As New SqlDataAdapter("Select * From Articulo Where CodPer=@CodPer",
cn)
da.SelectCommand.CommandType = CommandType.Text
da.SelectCommand.Parameters.AddWithValue("@CodPer",
Cboopcion.SelectedValue)
Dim dt As New DataTable
da.Fill(dt)
dgdArticulos.DataSource = dt
lblfilas.Text = dt.Rows.Count
End If
Catch ex As Exception
End Try
Ejemplo 04:
Importar el NameSpace
BtnGuardar BtnEliminar
Imports
System.Data.SqlClient
Rem procedimiento para habilitar todo seguido hasta el cierre del parntesis:
Private Sub habilitar(ByVal nuevo As Boolean, ByVal Guardar As Boolean, ByVal modificar
As Boolean, ByVal Consultar As Boolean, ByVal Cancelar As Boolean, ByVal eliminar As
Boolean, ByVal salir As Boolean)
btnNuevo.Enabled = nuevo
BtnGuardar.Enabled = Guardar
btnModificar.Enabled = modificar
btnConsultar.Enabled = Consultar
btnCancelar.Enabled = Cancelar
btnEliminar.Enabled = eliminar
btnSalir.Enabled = salir
End Sub
End Try
condi = "N"
HabilitarCajas(True)
habilitar(0, 1, 0, 0, 1, 0, 0)
txtCodClie.ReadOnly = False
txtCodClie.Focus()
condi = "M"
Me.HabilitarCajas(True)
habilitar(0, 1, 0, 0, 1, 0, 1)
txtCodClie.ReadOnly = True
txtNomClie.Focus()
cmd.Parameters.AddWithValue("@CodClie", txtCodClie.Text.Trim)
cmd.Parameters.AddWithValue("@NomClie", txtNomClie.Text.Trim)
cmd.Parameters.AddWithValue("@ApeClie", txtApeClie.Text.Trim)
cmd.Parameters.AddWithValue("@DirClie", txtDirClie.Text.Trim)
cmd.Parameters.AddWithValue("@CodDis", cboDistrito.SelectedValue)
cmd.Parameters.AddWithValue("@TelClie", txtTelClie.Text.Trim)
cmd.Parameters.AddWithValue("@DniClie", txtDni.Text.Trim)
cmd.Parameters.AddWithValue("@RucClie", txtRucClie.Text.Trim)
cmd.Parameters.AddWithValue("@EmaiClie", txtemail.Text.Trim)
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
MessageBox.Show("Registro Actualizado Correctamente", "Registro Actualizado",
MessageBoxButtons.OK, MessageBoxIcon.Information)
habilitar(1, 0, 0, 1, 0, 0, 1)
Limpiar()
HabilitarCajas(False)
End If
Catch ex As Exception
MessageBox.Show("Error el codigo ingresado no existe", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
Try
Dim cmd As New SqlCommand("Delete From Cliente Where CodClie=@CodClie", cn)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@CodClie", txtCodClie.Text)
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
Limpiar()
habilitar(1, 0, 0, 1, 0, 0, 1)
HabilitarCajas(False)
Close()
End If
Clase SqlCommand
Objetivo:
Al trmino de esta separa el alumno conocer:
Sintaxis:
cmd.ExecuteNonQuery
Esto es lo que nos dice la ayuda de Visual Studio sobre el mtodo ExecuteNonQuery:
Utilice el mtodo ExecuteScalar para recuperar un nico valor (por ejemplo, un valor
agregado) de una base de datos.
Ejemplo 01
Restaurar la BD Almacen:
Importar el NameSpace:
Imports System.Data.SqlClient
Ejemplo 02
Restaurar la BD almacen y disear la siguiente interfaz: GroupBox1
Importar el NameSpace
BtnGuardar BtnEliminar
Imports System.Data.SqlClient
Rem procedimiento para habilitar todo seguido hasta el cierre del parntesis:
Private Sub habilitar(ByVal nuevo As Boolean, ByVal Guardar As Boolean, ByVal modificar
As Boolean, ByVal Consultar As Boolean, ByVal Cancelar As Boolean, ByVal eliminar As
Boolean, ByVal salir As Boolean)
btnNuevo.Enabled = nuevo
BtnGuardar.Enabled = Guardar
btnModificar.Enabled = modificar
btnConsultar.Enabled = Consultar
btnCancelar.Enabled = Cancelar
btnEliminar.Enabled = eliminar
btnSalir.Enabled = salir
End Sub
habilitar(1, 0, 0, 1, 0, 0, 1)
HabilitarCajas(False)
Catch ex As Exception
End Try
condi = "M"
Me.HabilitarCajas(True)
habilitar(0, 1, 0, 0, 1, 0, 1)
txtCodEmp.ReadOnly = True
txtDesEmp.Focus()
Try
Dim cant As Integer
cant = setEliminar(txtCodEmp.Text.Trim)
MessageBox.Show("Registro Eliminado", "Eliminado " & CStr(cant),
MessageBoxButtons.OK, MessageBoxIcon.Information)
Limpiar()
habilitar(1, 0, 0, 1, 0, 0, 1)
Catch ex As Exception
End Try
Close()
End If
Propuesto:
Que es un DataTable
Configurar el Datatable
Trabajar con Clases
Ejemplo 01
Clase Clase
Operaciones Agregada
Empecemos a trabajar:
Imports System.Data.SqlClient
Ahora una vez creado los mtodos nos dirigimos al formulario para trabajar:
En el mbito a nivel de clase declarar la variable obj de tipo operaciones:
Dim objOper As New Operaciones
Dim dt As New DataTable()
Dim drw As DataRow
Dim total As Decimal
Dim fila As Integer
Try
CboArticulo.DataSource = objOper.getArticulos().Tables(0)
CboArticulo.DisplayMember = "DesArti"
CboArticulo.ValueMember = "CodArti"
CboCliente.DataSource = objOper.getCliente().Tables(0)
CboCliente.DisplayMember = "NomCom"
CboCliente.ValueMember = "CodClie"
ConfigurarTabla()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Try
Dim dtArti As New DataTable()
dtArti = objOper.getCliente(CboCliente.SelectedValue.ToString()).Tables(0)
txtDirClie.Text = dtArti.Rows(0)(0).ToString()
txtTel.Text = dtArti.Rows(0)(1).ToString()
txtRuc.Text = dtArti.Rows(0)(2).ToString()
Catch ex As Exception
End Try
End Try
Else
txtPtot.Text = (0).ToString()
txtCant.Clear()
End If
End If
@CodPer char(6)
AS
Delete [Personal] Where CodPer = @CodPer;
Go
Abrir el Visual Studio 2008 y crear un proyecto de tipo aplicacin para Windows, y
disear la siguiente interna:
GroupBox1
BtnSalir
Clase Clase
Operaciones Agregada
Empecemos a trabajar:
Imports System.Data.SqlClient
Ahora una ves creado los mtodos nos dirigimos al formulario para trabajar:
En el mbito a nivel de clase declarar la variable obj de tipo operaciones:
Dim obj As New Operaciones
dim condi as String=""
Private Sub habilitar(ByVal nuevo As Boolean, ByVal Guardar As Boolean, ByVal modificar
As Boolean, ByVal Consultar As Boolean, ByVal Cancelar As Boolean, ByVal eliminar As
Boolean, ByVal salir As Boolean)
btnnuevo.Enabled = nuevo
btnguardar.Enabled = Guardar
btnModificar.Enabled = modificar
btnconsultar.Enabled = Consultar
btncancelar.Enabled = Cancelar
btneliminar.Enabled = eliminar
btnsalir.Enabled = salir
End Sub
cbocargo.DataSource = obj.GetCargo
cbocargo.DisplayMember = "Cargo"
cbocargo.ValueMember = "CodCargo"
LimpiarCajas()
Habilitar(1, 0, 0, 1, 0, 0, 1)
HabilitarCajas(False)
condi = "N"
HabilitarCajas(True)
habilitar(0, 1, 0, 0, 1, 0, 0)
txtApePer.Focus()
txtCodPer.ReadOnly = True
condi = "M"
Me.HabilitarCajas(True)
habilitar(0, 1, 0, 0, 1, 0, 1)
txtCodPer.ReadOnly = True
txtApePer.Focus()
Try
Dim codigo As String
codigo = InputBox("Ingrese Codigo", "Ingrese")
Dim dt As New DataTable
dt = obj.GetPersona(codigo)
Me.txtCodPer.Text = dt.Rows(0)(0).ToString.Trim
Me.txtApePer.Text = dt.Rows(0)(1).ToString.Trim
Me.txtNomPer.Text = dt.Rows(0)(2).ToString.Trim
Me.txtDirPer.Text = dt.Rows(0)(3).ToString.Trim
Me.txtTelPer.Text = dt.Rows(0)(4).ToString.Trim
Me.txtDNI.Text = dt.Rows(0)(5).ToString.Trim
Me.cbocargo.SelectedValue = dt.Rows(0)(6)
Me.txtRetirado.Text = dt.Rows(0)(7).ToString.Trim
habilitar(0, 0, 1, 0, 1, 1, 0)
HabilitarCajas(False)
txtCodPer.ReadOnly = True
Catch ex As Exception
MessageBox.Show("Error el codigo ingresado no existe")
End Try
LimpiarCajas()
habilitar(1, 0, 0, 1, 0, 0, 1)
HabilitarCajas(False)
Ejercicio:
Antes de desarrollar este ejercicio deberemos de crear los stores procedures
Desde el analizador de consultas (SQL Server) codificar:
Use Almacen
Go
--Creamos la table Factura
Create Table Factura
(
NumFact Char(8)Not null,
CodClie Char(8)not null,
FechaEmi DateTime,
CodPer Char(6),
Total Decimal(10,2),
Anula Char(1),
Emitido Char(1)
Primary key(NumFact)
Foreign key(CodPer) References [Personal]
)
Go
--Creamos la Tabla Detalle_Factura
Create Table Detalle_Factura
(
NumFact Char(8)not null,
CodArti Char(7)not null,
CantArti Int,
PreUnit Decimal(10,2),
Importe Decimal(10,2)
Primary key(NumFact,CodArti)
Foreign key(NumFact)References Factura,
Foreign key(CodArti)References Articulo
)
Go
Aqu los SP
Sp para Guardar Factura
Imports System.Data
Imports System.Data.SqlClient
A nivel de clase:
Next
Try
trans.Commit()
Return Codigo
Catch ex As Exception
trans.Rollback()
Throw ex
Finally
If cn.State <> ConnectionState.Closed Then
cn.Close()
End If
End Try
End Function
Codificar en el Formulario:
End Sub
Try
CboCliente.DataSource = Obj.GetDatosFac().Tables(0)
CboCliente.DisplayMember = "Cliente"
CboCliente.ValueMember = "CodClie"
CboCliente.Text = ""
dtProd = Obj.GetDatosFac().Tables(1)
cboProducto.DataSource = dtProd
cboProducto.DisplayMember = "DesArti"
cboProducto.ValueMember = "PrecVenta"
cboProducto.Text = ""
Me.txtPrecio.Text = ""
lblFecha.Text = DateTime.Now.ToLongDateString()
CrearTabla()
Catch ex As Exception
End Try
Catch ex As Exception
End Try
Try
CodPro = dtProd.Rows(cboProducto.SelectedIndex)(0).ToString()
Me.txtPrecio.Text = cboProducto.SelectedValue.ToString()
Catch ex As Exception
End Try
En el evento Clic del boton Adicionar
dr = dtDet.NewRow()
dr(0) = CodPro
dr(1) = cboProducto.Text
dr(2) = txtPrecio.Text
dr(3) = txtCant.Text
dr(4) = Decimal.Parse(txtCant.Text) * Decimal.Parse(txtPrecio.Text)
dtDet.Rows.Add(dr)
SubTotal += Decimal.Parse(txtPrecio.Text) * Decimal.Parse(txtCant.Text)
txtSubTotal.Text = SubTotal.ToString()
txtIGV.Text = (Convert.ToDouble(SubTotal) * 0.19).ToString("N2")
txtTotal.Text = (SubTotal + Decimal.Parse(txtIGV.Text)).ToString()
txtCant.Clear()
En el evento Clic del boton Eliminar
SubTotal -= Decimal.Parse(dtDet.Rows(dgdDetalle.CurrentCell.RowIndex)
(4).ToString())
txtSubTotal.Text = SubTotal.ToString()
txtIGV.Text = (Convert.ToDouble(SubTotal) * 0.19).ToString("N2")
txtTotal.Text = (SubTotal * Decimal.Parse(txtIGV.Text)).ToString("N2")
dtDet.Rows.RemoveAt(dgdDetalle.CurrentCell.RowIndex)
Manejo de reportes:
Paso 1
Crear un nuevo proyecto:
Paso 2
En el explorador de soluciones clic derecho / agregar / agregar nuevo elemento
Paso 3
Ubicar el icono CrystalReport y cambiar de nombre Rptcliente clien en Agregar:
Paso 4
Nos mostrara la siguiente ventana / Aceptamos la licencia damos click en el boton Ok
Paso 5:
Nos muestra la siguiente imagen como deseamos crear el informe asi q seleccionamos el
del medio el informe en blanco y luego click en el boton OK.
1) CLICK
2) yluego pulsa el
boton OK
Origen de Datos
Pie de pagina.
Paso 7:
Click derecho sobre Campos de base de datos:
Darle Click
Aqui
Darle Click
Darle Click
Darle Click
PASAR
Aceptamos
Control
CrystalReportViewr
Lo llamaremos
Name=CRVCliente
Una vez agregado el control codificamos en el evento Load del formulario Ojo evento
LOAD:
Dim report As New RptCliente
report.SetDatabaseLogon("sa", "1234")
CRVCliente.ReportSource = report
Y por ultimo probamos la aplicacin con un F5