Está en la página 1de 68

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-401-

CAPITULO 6 USANDO PROCEDIMIENTOS ALMACENADOS


Los procedimientos almacenados son instrucciones SQL que permiten realizar una tarea
repetidamente. Puede crear un procedimiento de una vez y volver a utilizarlo cualquier
nmero de veces en su programa.
6.1 PROCEDIMIENTOS ALMACENADOS CON LA BASE DE DATOS ALUMNOS
1 Crear un procedimiento almacenado que seleccione todos los registros de la tabla
alumnos

Aparece lo siguiente

Modifique y Ponga Update


Debe aparecer lo siguiente

Grabe el procedimiento y se modifica a

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-402-

Ejecutar con:

Puede ver el procedimiento almacenado y modificarlo si es necesario


Tambin modifica el procedimiento a
USE [E:\DATOS\ALUMNOS.MDF]
GO
DECLARE @return_value Int
EXEC @return_value = [dbo].[PA_Alumnos]
SELECT
'Return Value' = @return_value
GO
2. Modifique el procedimiento almacenado anterior que solo Iiste el cdigo y el nombre
del alumno

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-403-

ALTER PROCEDURE PAlumnos


AS select codalumno ,Nombrealumno from alumnos
RETURN

Puede crear tambin un procedimiento con nueva consulta

Ejercicio 2 crear un procedimiento almacenado para obtener subtotales por curso


CREATE PROCEDURE PA_PagosCursos
AS select codcurso, count (monto) as cantidad ,sum(monto) as total
from pagos group by codcurso
RETURN 0
Al ejecutar
execute PA_PagosCursos

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-404-

Ejercicio 3: Crear un procedimiento almacenado con un parmetro de salida BD


ALUMNOS.
Que liste los alumnos que contenga su cdigo en el parmetro
CREATE PROCEDURE Pagos_Alumno
@CodAlumno char(10)
As
Select * From Pagos Where
CodAlumno = @CodAlumno
execute Pagos_Alumno 'A1'

Ejecutar un procedimiento almacenado de pagos por ao

6.1.1 Procedimientos con Parmetros de Salida y Valor de Retorno

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-405-

Los procedimientos con parmetros de salida y los de valor de retorno se usan de forma
parecida, es decir, primero se definen, luego se ejecutan y finalmente se lee el valor devuelto
en el parmetro.
create procedure Alumnos1b
@Codalumno Nchar(10),
@Pagoscuenta int = 0 output
as
select CodAlumno,Monto
from Pagos
where Codalumno = @Codalumno;
select @PagosCuenta = count(*)
from PAGOS
where CodAlumno = @CodAlumno
return @PagosCuenta

Su ejecucin
Declare @ValorRetornado int,
@CuentaPagos int
Execute @ValorRetornado=Alumnos1b
@CodAlumno='A1',
@PagosCuenta=@CuentaPagos output
Select @CuentaPagos as '@CuentaPagos'
Select 'ValorRetorno' =@ValorRetornado

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-406-

6.1.2 Mostrar definiciones de procedimientos almacenados.


SQL Server ofrece un mecanismo de ver la definicin de los objetos creados en la base
de datos. Esto se conoce como recuperacin de metadatos. La informacin acerca de los
objetos se almacena en los procedimientos almacenados del sistema predefinidos que
pueden ser obtenidos siempre que sea necesario.
Para ver la definicin de su procedimiento almacenado, siga estos pasos:
1. Introduzca la instruccin siguiente en la ventana de consulta:
Execute sp_helptext 'PA_Alumnos'

6-1-4 Cambiar el nombre de procedimientos almacenados.


SQL Server permite cambiar el nombre de objetos mediante el procedimiento
almacenado predefinidos sp_rename. En el siguiente ejemplo, ver cmo utilizar para
cambiar el nombre de un procedimiento almacenado.
Pruebe: Cambiar el nombre de un procedimiento almacenado.
Para cambiar el nombre de un procedimiento almacenado, siga estos pasos:
1. Introduzca la instruccin siguiente en la ventana de consulta:

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-407-

Execute sp_rename 'PA_Alumnos', 'PA_Alumnos1'.


Puede modificar con nueva consulta

2. Haga clic en ejecutar, y ver el siguiente mensaje en la ventana de resultados, a


pesar de que se ha ejecutado correctamente sp_rename:
Precaucin: al cambiar cualquier parte del nombre de un objeto pueden dejar de
ser vlidas secuencias de comandos y procedimientos almacenados.
3. Ahora vaya al explorador de objetos, expanda el nodo de base de datos Alumnos y, a
continuacin, expanda el nodo de programacin. Seleccione el nodo, con el botn
derecho y seleccione Actualizar (refresh)procedimientos almacenados.
4. Expanda el nodo de procedimientos almacenados y observe que PA_Alumnos ha
cambiado a PA_Alumnos1. La pantalla debe parecerse a la figura 6-8.

Note sp_rename funciona muy bien con la mayora de los objetos, como tablas,
columnas y otros para cambiar su nombre.
6.1.4 Trabajar con procedimientos almacenados en VB.NET.
Pruebe: Ejecutar un procedimiento almacenado sin parmetros de entrada.
Ejecutar el procedimiento almacenado PA_Aumnos que lista todos los registros de la
tabla alumnos
Ingrese a visual estudio 2012 nuevo proyecto / aplicacin de consola
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim col As Integer
Dim conn As New SqlConnection
conn.ConnectionString = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandType = CommandType.StoredProcedure

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-408-

cmd.CommandText = "PA_Alumnos"
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim ncampos = rdr.FieldCount
While rdr.Read()
For col = 0 To ncampos - 1
Console.Write("{0}{1}", rdr(col), vbTab)
Next
Console.WriteLine()
End While
Console.ReadLine()
rdr.Close()
conn.Close()
End Sub
End Module

Realizar lo mismo sin procedimientos almacenados


Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim col As Integer
Dim conn As New SqlConnection
conn.ConnectionString = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandType = CommandType.Text
cmd.CommandText = "SELECT * FROM ALUMNOS"
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim ncampos = rdr.FieldCount
While rdr.Read()
For col = 0 To ncampos - 1
Console.Write("{0}{1}", rdr(col), vbTab)
Next
Console.WriteLine()
End While
Console.ReadLine()
rdr.Close()
conn.Close()
End Sub
End Module
Cambie la cadena de conexin

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-409-

conn.ConnectionString = "Data Source=(local);Initial Catalog=ALUMNOS;Integrated


Security=True"
grabar en archivo
Imports System.Data.SqlClient
Imports System.IO
Module Module1
Sub Main()
Dim archivo As StreamWriter
archivo = New StreamWriter("E:\datos\consulta1.txt")
Dim col As Integer
Dim conn As New SqlConnection
conn.ConnectionString = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandType = CommandType.Text
cmd.CommandText = "SELECT * FROM ALUMNOS"
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim ncampos = rdr.FieldCount
While rdr.Read()
For col = 0 To ncampos - 1
archivo.Write("{0}{1}", rdr(col), vbTab)
Next
archivo.WriteLine()
End While
rdr.Close()
conn.Close()
archivo.Close()
Console.ReadLine()
End Sub
End Module
6.1.5 Procedimientos almacenados con parmetros

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim conn As New SqlConnection
conn.ConnectionString = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandType = CommandType.StoredProcedure

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-410-

cmd.CommandText = "Pagos_Alumno"
Dim CodAlumno1 As SqlParameter = cmd.Parameters.Add("@CodAlumno",
SqlDbType.VarChar, 5)
CodAlumno1.Direction = ParameterDirection.Input
CodAlumno1.Value = "A1"
' create el procedimiento de salida
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim nc As Integer = rdr.FieldCount
Dim col As Integer
While rdr.Read()
For col = 0 To nc - 1
Console.Write("{0}{1}", rdr(col), vbTab)
Next
Console.WriteLine()
End While
rdr.Close()
Console.ReadLine()
End Sub
End Module
Lo mismo pero con consultas

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim codalu As String
Dim conn As New SqlConnection
conn.ConnectionString = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
Console.Write(" ingrese codigo del alumno ")
codalu = Console.ReadLine()
cmd.CommandType = CommandType.Text
| cmd.CommandText = "SELECT * FROM PAGOS WHERE CODALUMNO='" & codalu &
"' "
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim nc As Integer = rdr.FieldCount
Dim col As Integer
While rdr.Read()
For col = 0 To nc - 1
Console.Write("{0} {1}", rdr(col), vbTab)
Next
Console.WriteLine()
End While

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-411-

rdr.Close()
Console.ReadLine()
End Sub
End Module
Para modificar y eliminar procedimientos use delete
6.1.6 EJEMPLO DE procedimientos almacenados en el sistema de ventas
Crear la tabla clientes
CREATE TABLE CLIENTE
(IdCliente int,
Nombre varchar(50),
Apellidos VarChar (50),
Direccion varchar(50),
Telefono varchar(9),
Dni varchar(8)
primary key (idcliente)
)
Mnu De modo conectado con sentencias SQL de sistema de ventas

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\VENTAS3.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Dim sqlqry As String = "select count(*) from cliente"
Dim Opcion As Integer
Dim codcliente As String
Dim nombrecliente As String
Dim Apellidoscliente As String
Dim Direccioncliente As String
Dim telefonocliente As String
Dim dnicliente As String
Dim comando As SqlCommand = New SqlCommand(sqlqry, conn)
Dim rdr As SqlDataReader
Dim nrocol As Integer
Dim i As Integer
Try

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-412-

Do
Console.WriteLine(" 1. listar 2. modificar 3 Agregar 4 Eliminar 5 salir ")
Console.Write(" Ingrese opcion ")
Opcion = Console.ReadLine()
Select Case Opcion
Case 1
conn.Open()
Console.WriteLine("Conneccion ABIERTA.")
comando.CommandText = sqlqry
Console.WriteLine(": Numero de clientes {0}", comando.ExecuteScalar())
comando.CommandText = " SELECT * FROM cliente"
rdr = comando.ExecuteReader
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
nrocol = rdr.FieldCount
While (rdr.Read)
For i = 0 To nrocol - 1
Console.Write("{0}
", rdr.GetValue(i).ToString.PadRight(10))
Next
Console.WriteLine()
End While
conn.Close()
Case 2
conn.Open()
Console.WriteLine("Ingrese el codigo del cliente a modificar")
codcliente = Console.ReadLine()
Console.WriteLine("Ingrese el NUEVO NOMBRE del cliente a modificar")
nombrecliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Apellido a Modificar")
Apellidoscliente = Console.ReadLine()
Console.WriteLine("Ingrese la Nueva Direccion a Modificar")
Direccioncliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Telefono a Modificar")
telefonocliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Dni ")
dnicliente = Console.ReadLine()
comando.CommandText = " UPDATE CLIENTE SET idcliente= " & codcliente & _
" , nombre= '" & nombrecliente & "', apellidos= '" & Apellidoscliente &
"',Direccion = '" & _
Direccioncliente & "', telefono= '" & telefonocliente & "', dni='" & dnicliente & "'"
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
Case 3
conn.Open()
Console.WriteLine("Ingrese el codigo del cliente a Agregar")
codcliente = Console.ReadLine()
Console.WriteLine("Ingrese el NUEVO NOMBRE del cliente a agregar")
nombrecliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Apellido a agregar")
Apellidoscliente = Console.ReadLine()
Console.WriteLine("Ingrese la Nueva Direccion a agregar")

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-413-

Direccioncliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Telefono a agregar")
telefonocliente = Console.ReadLine()
Console.WriteLine("Ingrese el Dni a agregar")
dnicliente = Console.ReadLine()
comando.CommandText = _
" INSERT INTO CLIENTE
(Idcliente,nombre,Apellidos,direccion,telefono,dni) values ( '" & _
codcliente & "' , '" & nombrecliente & "' , '" & Apellidoscliente & "' , '" &
Direccioncliente & _
"' ,'" & telefonocliente & "' ,'" & dnicliente & "')"
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
Case 4
conn.Open()
Console.WriteLine("Ingrese el codigo del cliente a eliminar")
codcliente = Console.ReadLine()
comando.CommandText = " DELETE FROM CLIENTE WHERE Idcliente
= '" & codcliente & "' "
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
End Select
Loop Until Opcion = 5
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
procedimientos almacenados
procedimiento insertar cliente
ALTER proc insertar_cliente
@IdCliente int,
@nombre varchar (50),
@apellidos varchar (50),
@direccion varchar (100),
@telefono varchar (10),
@dni varchar (8)
as
insert into cliente (IdCliente,nombre,apellidos,direccion,telefono,dni) values
(@IdCliente,@nombre,@apellidos,@direccion,@telefono,@dni)
Procedimiento almacenado eliminar_cliente

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-414-

ALTER proc eliminar_cliente


@idcliente integer
as
delete from cliente where idcliente=@idcliente
Procedimiento almacenado mostrar_cliente
ALTER proc mostrar_cliente
As
Select * from cliente order by idcliente desc
Procedimiento almacenado Editar_cliente
ALTER proc editar_cliente
@idcliente integer,
@nombre varchar (50),
@apellidos varchar (50),
@direccion varchar (100),
@telefono varchar (9),
@dni varchar (8)
as
update cliente set
nombre=@nombre,apellidos=@apellidos,direccion=@direccion,telefono=@telefono,dni=
@dni
where idcliente=@idcliente
MENU MODO CONECTADO DE SISTEMA DE VENTAS CON PROCEDIMIENTOS
ALMACENADOS

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\VENTAS3.mdf;Integrated
Security=True;Connect Timeout=30"

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-415-

Dim conn As SqlConnection = New SqlConnection(cadenaconexion)


Dim Opcion As Integer
Dim codcliente As String
Dim nombrecliente As String
Dim Apellidoscliente As String
Dim Direccioncliente As String
Dim telefonocliente As String
Dim dnicliente As String
Dim comando As SqlCommand = New SqlCommand("", conn)
comando.CommandType = CommandType.StoredProcedure
Dim rdr As SqlDataReader
Dim nrocol As Integer
Dim i As Integer
Try
Do
Console.WriteLine(" 1. listar 2. modificar 3 Agregar 4 Eliminar 5 salir ")
Console.Write(" Ingrese opcion ")
Opcion = Console.ReadLine()
Select Case Opcion
Case 1
conn.Open()
Console.WriteLine("Conneccion ABIERTA.")
comando = New SqlCommand("Mostrar_cliente")
comando.Connection = conn
comando.CommandType = CommandType.StoredProcedure
rdr = comando.ExecuteReader
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
nrocol = rdr.FieldCount
While (rdr.Read)
For i = 0 To nrocol - 1
Console.Write("{0}
", rdr.GetValue(i).ToString.PadRight(8))
Next
Console.WriteLine()
End While
conn.Close()
Case 2
' editar
conn.Open()
comando = New SqlCommand("editar_cliente")
comando.CommandType = CommandType.StoredProcedure
comando.Connection = conn
Console.WriteLine("Ingrese el codigo del cliente a modificar")
codcliente = Console.ReadLine()
Console.WriteLine("Ingrese el NUEVO NOMBRE del cliente a modificar")
nombrecliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Apellido a Modificar")
Apellidoscliente = Console.ReadLine()
Console.WriteLine("Ingrese la Nueva Direccion a Modificar")
Direccioncliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Telefono a Modificar")
telefonocliente = Console.ReadLine()

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-416-

Console.WriteLine("Ingrese el Nuevo Dni ")


dnicliente = Console.ReadLine()
comando.Parameters.AddWithValue("@idcliente", codcliente) ' enviar los
parametros
comando.Parameters.AddWithValue("@nombre", nombrecliente)
comando.Parameters.AddWithValue("@apellidos", Apellidoscliente)
comando.Parameters.AddWithValue("@direccion", Direccioncliente)
comando.Parameters.AddWithValue("@telefono", telefonocliente)
comando.Parameters.AddWithValue("@dni", dnicliente)
comando.ExecuteNonQuery()
conn.Close()
Case 3
conn.Open()
Console.WriteLine("Ingrese el codigo del cliente a Agregar")
codcliente = Console.ReadLine()
Console.WriteLine("Ingrese el NUEVO NOMBRE del cliente a agregar")
nombrecliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Apellido a agregar")
Apellidoscliente = Console.ReadLine()
Console.WriteLine("Ingrese la Nueva Direccion a agregar")
Direccioncliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Telefono a agregar")
telefonocliente = Console.ReadLine()
Console.WriteLine("Ingrese el Dni a agregar")
dnicliente = Console.ReadLine()
comando = New SqlCommand("insertar_cliente")
comando.Connection = conn
comando.CommandType = CommandType.StoredProcedure
' los 6 paramtros
comando.Parameters.AddWithValue("@IdCliente", codcliente)
comando.Parameters.AddWithValue("@nombre", nombrecliente)
comando.Parameters.AddWithValue("@apellidos", Apellidoscliente)
comando.Parameters.AddWithValue("@direccion", Direccioncliente)
comando.Parameters.AddWithValue("@telefono", telefonocliente)
comando.Parameters.AddWithValue("@dni", dnicliente)
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
Case 4
conn.Open()
Console.WriteLine("Ingrese el codigo del cliente a eliminar")
codcliente = Console.ReadLine()
comando = New SqlCommand("eliminar_cliente")
comando.CommandType = CommandType.StoredProcedure
comando.Connection = conn ' establece la conexion
comando.Parameters.Add("@idcliente", SqlDbType.NVarChar, 50).Value = codcliente
comando.ExecuteNonQuery()
conn.Close()
End Select
Loop Until Opcion = 5
Catch ex As SqlException
Console.WriteLine(ex)

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-417-

Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
6.1.7 ADO.NET ( de Wikipedia)
Esta tecnologa es una parte del.NET Framework 3.0 (habiendo sido parte del framework
desde la versin 1.0).

ADO.NET es un conjunto de componentes del software que pueden ser usados por los
programadores para acceder a datos y a servicios de datos. Es una parte de la biblioteca
de clases base que estn incluidas en el Microsoft .NET Framework. Es comnmente
usado por los programadores para acceder y para modificar los datos almacenados en
un Sistema Gestor de Bases de DatosRelacionales, aunque tambin puede ser usado
para acceder a datos en fuentes no relacionales. ADO.NET es a veces considerado como
una evolucin de la tecnologa ActiveX Data Objects (ADO), pero fue cambiado tan
extensivamente que puede ser concebido como un producto enteramente nuevo.

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-418-

Arquitectura[editar]
ADO.NET consiste en dos partes primarias:

Data provider[editar]

Estas clases proporcionan el acceso a una fuente de datos, como Microsoft SQL
Server y Oracle. Cada fuente de datos tiene su propio conjunto de objetos del proveedor,
pero cada uno tienen un conjunto comn de clases de utilidad:

Connection: Proporciona una conexin usada para comunicarse con la fuente de


datos. Tambin acta como Abstract Factory para los objetos command.
Command: Usado para realizar alguna accin en la fuente de datos, como lectura,
actualizacin, o borrado de datos relacionales.
Parameter: Describe un simple parmetro para un command. Un ejemplo comn
es un parmetro para ser usado en un procedimiento almacenado.
DataAdapter: "Puente" utilizado para transferir data entre una fuente de datos y un
objeto DataSet (ver abajo).
DataReader: Es una clase usada para procesar eficientemente una lista grande de
resultados, un registro a la vez.

DataSets[editar]

Los objetos DataSets, son un grupo de clases que describen una simple base de datos
relacional en memoria, fueron la estrella del show en el lanzamiento inicial (1.0) del
Microsoft .NET Framework. Las clases forman una jerarqua de contencin:

Un objeto DataSet representa un esquema (o una base de datos entera o un


subconjunto de una). Puede contener las tablas y las relaciones entre esas tablas.

Un objeto DataTable representa una sola tabla en la base de datos. Tiene


un nombre, filas, y columnas.

Un objeto DataView "se sienta sobre" un DataTable y ordena los


datos (como una clusula "order by" de SQL) y, si se activa un filtro, filtra los
registros (como una clusula "where" del SQL). Para facilitar estas operaciones
se usa un ndice en memoria. Todas las DataTables tienen un filtro por defecto,
mientras que pueden ser definidos cualquier nmero de DataViews adicionales,
reduciendo la interaccin con la base de datos subyacente y mejorando as el
desempeo.

Un DataColumn representa una columna de la tabla,


incluyendo su nombre y tipo.

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-419-

Un objeto DataRow representa una sola fila en la tabla, y


permite leer y actualizar los valores en esa fila, as como la recuperacin de
cualquier fila que est relacionada con ella a travs de una relacin de
clave primaria - clave extranjera.

Un DataRowView representa una sola fila de un DataView, la


diferencia entre un DataRow y el DataRowView es importante cuando se
est interactuando sobre un resultset.
Un DataRelation es una relacin entre las tablas, tales como una relacin
de clave primaria - clave ajena. Esto es til para permitir la funcionalidad del
DataRow de recuperar filas relacionadas.
Un Constraint describe una propiedad de la base de datos que se debe
cumplir, como que los valores en una columna de clave primaria deben ser nicos.
A medida que los datos son modificados cualquier violacin que se presente
causar excepciones.

Un DataSet es llenado desde una base de datos por un DataAdapter cuyas propiedades
Connection y Command que han sido iniciados. Sin embargo, un DataSet puede guardar
su contenido a XML (opcionalmente con un esquema XSD), o llenarse a s mismo desde
un XML, haciendo esto excepcionalmente til para los servicios web, computacin
distribuida, y aplicaciones ocasionalmente conectadas desconectados.

6.1.8 Trabajar con el proveedor de datos SQL Server


El.Proveedor de datos de red
System.Data.SqlClient.

de

SQL Server es el espacio de nombres

Table 9-2. Clases de SqlClient usados comumente


Classes
Description
SqlCommand
Ejecuta consultas SQL ,sentencias o procedimientos almacenados
SqlConnection
Representa una coneccion hac ia SQL Server database
SqlDataAdapter Representa un puente entre un conjunto de datos y un origen de
datos
SqlDataReader Proporciona una secuencia de datos de slo avance, de slo lectura
de los resultados
SqlError
Contiene informacin de errores de SQL Server y advertencias
SqlException
Define la excepcin que se produce en una advertencia o un error de
SQL Server
SqlParameter
Representa un parametro de comando
SqlTransaction
Representa una trnsaccion SQL Server
Listar la tabla alumnos usando proveedor de datos SQLServer OLEDb Y ODBC
Trabajar con el proveedor de datos ODBC.(Ver Copias)
6.1.9 Mostrar informacin de conexin.
Escribir un programa en modo consola para mostrar informacin de conexin.

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-420-

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim CadenaConexion As String
CadenaConexion = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(CadenaConexion)
Try
conn.Open()
Console.WriteLine(" Conexion abierta")
'Displaya las propiedades de la conexin
Console.WriteLine("propiedades de la conexion")
Console.WriteLine("cadena de conexion: {0}", conn.ConnectionString)
Console.WriteLine("base de datos: {0}", conn.Database)
Console.WriteLine("fuente de datos: {0}", conn.DataSource)
Console.WriteLine("ServerVersion: {0}", conn.ServerVersion)
Console.WriteLine("State: {0}", conn.State)
Console.WriteLine("WorkstationId: {0}", conn.WorkstationId)
Console.WriteLine("tiempo de conexion: {0}", conn.ConnectionTimeout)
Catch e As SqlException
Console.WriteLine("Error:" & e.ToString)
Finally
conn.Close()
Console.WriteLine("Connection closed.")
End Try
Console.ReadLine()
End Sub
End Module
Inteligence sense de vb 2012 nos ayuda a obtener propiedades y metodos de un evento

Cambie la conexin y vea el resultado


CadenaConexion = "Data Source=(local);Initial Catalog=ALUMNOS;Integrated
Security=True "

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-421-

Podra poner la cadena de conexin de la siguiente manera


Dim conn As SqlConnection = New SqlConnection()
conn.ConnectionString = CadenaConexion
6.1.8 Conectar a SQL Server Express con OleDbConnection. ( cambio que se debe
hacer)
Microsoft proporciona a los proveedores de datos de OLE DB para Microsoft SQL Server,
Microsoft Access (Jet), Oracle y una variedad de otros formatos de archivo de base de
datos y datos.
Conectar a SQL Server Express con el proveedor de datos OLE DB.

Imports System.Data.OleDb
Module Module1
Sub Main()
Dim connstring As String
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=E:\DATOS\alumnos.accdb"
Dim conn As OleDbConnection = New OleDbConnection(connstring)
Try
conn.Open()
Console.WriteLine(" Conexion abierta")
Console.WriteLine("propiedades de la conexion")
Console.WriteLine("cadena de conexion: {0}", conn.ConnectionString)
Console.WriteLine("base de datos: {0}", conn.Database)
Console.WriteLine("fuente de datos: {0}", conn.DataSource)
Console.WriteLine("ServerVersion: {0}", conn.ServerVersion)
Console.WriteLine("State: {0}", conn.State)
Console.WriteLine("Proveedor: {0}", conn.Provider)
Catch e As OleDbException
Console.WriteLine("Error:" & e.ToString)
Finally
conn.Close()
Console.WriteLine("Coneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
6.2 CAPITULO 11 EJECUTANDO COMANDOS

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-422-

Una vez que haya establecido una conexin a la base de datos, que desea empezar a
interactuar con l y hacerlo haciendo algo til para usted. Puede que necesite agregar,
actualizar, o eliminar algunos datos, o tal vez modificar la base de datos de alguna otra
forma, generalmente mediante la ejecucin de una consulta. Cualquiera que sea la tarea,
inevitablemente implicar un comando.
6.2.1 Creando un comando
Puede crear un comando utilizando el constructor SqlCommand o utilizando mtodos para
la creacin de comandos
Crear un comando con un Constructor y Asociar un comando con una conexin
. ( Ver en el listado 2)
Dim cmd As SqlCommand = New SqlCommand("select count(*) from pagos", con)
para ejecutar en una base de datos, cada comando debe estar asociado con una
conexin a la base de datos. Para ello, establezca la propiedad de conexin del comando,
y a fin de ahorrar recursos, varios comandos pueden utilizar la misma conexin.
6.2.2 Configuracin de la propiedad CommandText.( Asignacin de texto a un
comando.)
cmd.CommandText = "select sum(monto) as total from pagos"
6.2.3 Ejecucin de comandos.
Los comandos no son usados a menos que se puede ejecutar, Las diferencias entre
estos mtodos dependen de los resultados esperados de la instruccin SQL. Las
consultas devuelven filas de datos (conjuntos de resultados), pero las declaraciones
INSERT, UPDATE y DELETE no. Determinar qu mtodo utilizar teniendo en cuenta los
valores devueltos
Table 11-1. Metodos de ejecucin de comandos
Si el commando retorna. . .
Nothing (no es una consulta)
cero o mas filas
XML

Usted debe Usar . . .


ExecuteNonQuery
ExecuteReader
ExecuteXmlReader

Si se quiere obtener un solo valor


se debe utilizar el mtodo ExecuteScalar de
SqlCommand para devolver uno de los resultados.
6.2.4 Utilizando el mtodo ExecuteScalar ( retorna un solo valor).

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-423-

Imports System.Data.SqlClient
Module Module1
Dim cadenaConexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Sub Main()
Dim con As SqlConnection = New SqlConnection(cadenaConexion)
Dim cmd As SqlCommand = New SqlCommand("select count(*) from pagos", con)
Console.WriteLine("Comando creado y conectado .")
Try
con.Open()
Console.WriteLine("numero de pagos {0}", cmd.ExecuteScalar())
cmd.CommandText = "select sum(monto) as total from pagos"
Dim total As Single = cmd.ExecuteScalar()
Console.WriteLine("Total de pagos {0} ", total)
cmd.CommandText = "select * from alumnos"
Console.WriteLine("Total de pagos {0} ", cmd.ExecuteScalar())
Catch ex As SqlException
Console.WriteLine(ex)
Finally
con.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
ExecuteScalar() slo devuelve la primera fila del resultado y omite el resto.
6.3. CAPITULO 12 USANDO DATA READERS
6.3.1 Comprender los lectores de datos en General.
El tercer componente de un proveedor de datos, adems de conexiones y comandos, es
el lector de datos. Una vez que se haya conectado a una base de datos y se necesita
acceder alguna foma de conjunto de resultados. Aqu es donde entra el lector de datos
Un lector de datos es un flujo conectado rpido, sin memoria intermedia, slo hacia
delante, de slo lectura que recupera datos por fila. Lee una fila en un momento en que
recorre un conjunto de resultados.
ExecuteReader() devuelve un lector de datos, una instancia de la clase SqlDataReader
6.3.2 Utilizando el mtodo ExecuteReader.
El objeto SqlDataReader tiene un mtodo de lectura que obtiene cada fila a su vez y un
mtodo GetValue que obtiene el valor de una columna de la fila.
Utilizando indizadores ordinales

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-424-

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = _
"Data Source=(LocalDB)\v11.0; AttachDbFilename=E:\DATOS\ALUMNOS.mdf;
Integrated Security=True;Connect Timeout=30"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Dim nc As Integer
Dim cmd As SqlCommand = New SqlCommand("select * from pagos", con)
Try
con.Open()
Dim rdr As SqlDataReader = cmd.ExecuteReader
nc = rdr.FieldCount
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr.GetName(i))
Next
Console.WriteLine()
While (rdr.Read)
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr(i))
Next
Console.WriteLine()
End While
rdr.Close()
cmd.CommandText = "select sum (monto) as total from pagos "
Dim suma As Single = cmd.ExecuteScalar()
Console.WriteLine("total pagos {0}", suma)
Catch ex As SqlException
Console.WriteLine(ex)
Finally
con.Close()
End Try
Console.ReadLine()
End Sub
End Module
Utilizando los indizadores ordinales.
Utilice un indizador ordinal para recuperar datos de la columna del conjunto de
resultados.
rdr.GetValue(0)

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-425-

es una referencia a la propiedad de elemento del lector de datos y devuelve el valor de la


columna especificada para la fila actual. El valor se devuelve como un objeto
Se desea los campos variables entonces tiene que hacer uno por uno
En el listado 3 modifique
For i = 0 To nc - 1
'Console.Write("{0,8} ", rdr(i))
Console.Write("{0,8} ", rdr.GetValue(i))
Next
Uso de columnas indexado por nombre
Utiliza el nombre de columna indexacin especificando nombres de columna en lugar de
nmeros de ndice ordinales.
En listado 2 cambie los siguiente
Console.WriteLine()
While (rdr.Read)
Console.WriteLine("{0} {1,5} {2,8} {3,8} {4}", rdr("Nro").ToString,
rdr("CodAlumno").ToString, _
rdr("FechaPago").ToString, rdr("Monto"), rdr("codcurso"))
End While
Utilizando los mtodos de descriptor de acceso con tipo.
Cuando un lector de datos devuelve un valor de un origen de datos, los valores
resultantes se recuperan y se almacenan localmente en un.NET escribe en lugar de tipo
de origen de datos originales. Esta funcin de conversin de tipo en el lugar es un
equilibrio entre la coherencia y la velocidad, as que darle algo de control sobre los datos
que se est recuperados, los mtodos de descriptor de acceso con tipo de datos lector
expone que se pueden utilizar si conoce el tipo especfico del valor que devuelve
En el listado 3 cambie a
While (rdr.Read)
Console.WriteLine(" {0} {1} {2} {3} {4} ", rdr.GetInt32(0), _
rdr.GetSqlDateTime(1), rdr.GetString(2), rdr.GetDecimal(3), rdr.GetString(4))
End While
Use intelligence sense para los tipos de datos

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-426-

Puede listar cualquier consulta por ejemplo

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Dim sql As String = "select codalumno ,sum(monto) as total from pagos group by
codalumno"
Dim nc As Integer
Dim cmd As SqlCommand = New SqlCommand(sql, con)
Try
con.Open()
Dim rdr As SqlDataReader = cmd.ExecuteReader
nc = rdr.FieldCount
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr.GetName(i))
Next
Console.WriteLine()
While (rdr.Read)
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr(i))
Next
Console.WriteLine()
End While
Catch ex As SqlException
Console.WriteLine(ex)
Finally
con.Close()

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-427-

End Try
con.Open()
cmd.CommandText = "select sum (monto) as total from pagos "
Dim suma As Single = cmd.ExecuteScalar()
Console.WriteLine("total pagos {0}", suma)
con.Close()
Console.ReadLine()
End Sub
End Module
Usando varios comandos abriendo y cerrando el data reader

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Dim nc As Integer
Dim comando1 As SqlCommand = New SqlCommand("select * from pagos", con)
Try
con.Open()
Console.WriteLine(" consulta {0} ", comando1.CommandText)
Dim rdr1 As SqlDataReader = comando1.ExecuteReader
nc = rdr1.FieldCount
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr1.GetName(i))
Next
Console.WriteLine()
While (rdr1.Read)
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr1(i))
Next
Console.WriteLine()
End While
rdr1.Close()
comando1.CommandText = "select * from alumnos"
Console.WriteLine(" consulta {0} ", comando1.CommandText)
rdr1 = comando1.ExecuteReader
nc = rdr1.FieldCount

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-428-

For i = 0 To nc - 1
Console.Write("{0,10} ", rdr1.GetName(i))
Next
Console.WriteLine()
While (rdr1.Read)
For i = 0 To nc - 1
Console.Write("{0,10} ", rdr1(i))
Next
Console.WriteLine()
End While
Catch ex As SqlException
Console.WriteLine(ex)
Finally
con.Close()
End Try
Console.ReadLine()
End Sub
End Module
6.3.3 Obtener datos sobre datos.
Hasta ahora, todo lo que has hecho es recuperar datos de un origen de datos. Una vez
que tenga un lector de datos poblada en sus manos, puede hacer mucho ms. Hay un
nmero de mtodos tiles para recuperar informacin de esquema o recuperar
informacin relacionada directamente con un conjunto de resultados. La tabla 12-4
describe algunos de los mtodos de metadatos y propiedades de un lector de datos.
Tabla 12-4. Data Reader Metadata Propiedades y metodos
Metodo o propiedad Nombre descripcin
Depth
Una propiedad que obtiene la profundidad de anidacin de la
fila actual
FieldCount
Una propiedad que contiene el nmero de columnas de la fila
actual
GetDataTypeName
Un mtodo que acepta un ndice y devuelve una cadena que
contiene el nombre del tipo de datos de columna
GetFieldType
Un mtodo que acepta un ndice y devuelve el tipo de objeto
de NET Framework
GetName
Un mtodo que acepta un ndice y devuelve el nombre de la
columna especificada
GetOrdinal
Un mtodo que acepta un nombre de columna y devuelve el
ndice de columna
GetSchema
Un mtodo que devuelve los metadatos de columna de tabla
HasRows
Una propiedad que indica si el lector de datos tiene filas
RecordsAffected
Una propiedad que obtiene el nmero de filas modificadas,
insertadas o eliminadas
Pruebe: Obtener informacin acerca de un conjunto de resultados con un lector de datos.
En este ejercicio, utilizar algunos de estos mtodos y propiedades.

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-429-

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "select nro , codalumno, fechapago , monto, codcurso from pagos"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Try
conn.Open()
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
'obteniendo nombres de las columnas
Console.WriteLine("Column Name:{0} {1}", rdr.GetName(0).PadRight(20),
rdr.GetName(1))
'obteniendo tipos de datos de las columnas
Console.WriteLine("Data Type:{0} {1}", rdr.GetDataTypeName(0).PadRight(20), _
rdr.GetDataTypeName(1))
Console.WriteLine()
While (rdr.Read)
' obteniendo valores de las columnas para todas las filas
Console.WriteLine("{0} {1} {2} {3}", rdr.GetInt32(0), rdr.GetString(1),
rdr.GetDateTime(2), rdr.GetDecimal(3))
End While
'obteniendo numero de columnas
Console.WriteLine()
Console.WriteLine("Numbre de ls columnas en la fila {0}", rdr.FieldCount)
'obteniendo informacin acerca de cada columna
Console.WriteLine(" nombre columna '{0}' indice {1} y el tipo de objeto {2} ",
rdr.GetName(0), rdr.GetOrdinal("Nro"), rdr.GetFieldType(0))
Console.WriteLine(" nombre columna ' {0} ' indice {1} y el tipo de objeto {2} ",
rdr.GetName(1), rdr.GetOrdinal("CodAlumno"), rdr.GetFieldType(1))
Console.WriteLine(" nombre columna ' {0} ' indice {1} y el tipo de objeto {2} ",
rdr.GetName(2), rdr.GetOrdinal("Fechapago"), rdr.GetFieldType(2))
Console.WriteLine(" nombre columna ' {0} ' indice {1} y el tipo de objeto {2} ",
rdr.GetName(3), rdr.GetOrdinal("Monto"), rdr.GetFieldType(3))

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-430-

Console.WriteLine(" nombre columna ' {0} ", rdr.GetDataTypeName(0))


rdr.Close()
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
Obtener datos acerca de las tablas.
El termino schema tiene varios significados en lo que respecta a bases de datos
relacionales. Aqu, lo utilizamos para referirse al diseo de una estructura de datos,
especialmente en una tabla de base de datos. Una tabla consta de filas y columnas, y
cada columna puede tener un tipo de datos diferente. Las columnas y sus atributos (tipo
de datos, longitud, etctera) conforman el esquema de la tabla.
Para recuperar informacin de esquema fcilmente, puede llamar al mtodo de
GetSchemaTable en un lector de datos. Como sugiere su nombre, este mtodo devuelve
un objeto System.Data.DataTable, que es una representacin (esquema) de la tabla de
consulta y contiene una coleccin de filas y columnas en forma de objetos DataRow y
DataColumn. Estas filas y columnas se devuelven como objetos de coleccin por las
propiedades de filas y columnas de la clase DataTable.
Sin embargo, aqu es donde generalmente se produce una ligera confusin. Los objetos
de columna de datos no son valores de columna; ms bien, son definiciones de columna
que representan y controlan el comportamiento de las columnas individuales. Puede ser
colocadas a travs de utilizando un indizador de nombre de columna, y le puede decir
mucho sobre el conjunto de datos.
Obtener informacin de esquema.
Aqu podr ver una demostracin prctica del mtodo GetSchemaTable ( en este caso se
obtiene la informacin de la consulta select * from alumnos

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-431-

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "select * from alumnos"
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
'almacenando esquema de alumnos en data table
Dim schema As DataTable = rdr.GetSchemaTable
Dim row As DataRow
For Each row In schema.Rows
Dim col As DataColumn
For Each col In schema.Columns
Console.WriteLine _
((col.ColumnName + " = " + row(col).ToString))
Next col
Console.WriteLine("----------------")
Next row
rdr.Close()
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-432-

6.3.4 Utilizar el resultado de varios conjuntos con un lector de datos.


En este ejemplo, utilizar NextResult() para procesar varios conjuntos de resultados.

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql1 As String = "SELECT * FROM ALUMNOS "
Dim sql2 As String = "SELECT * FROM PAGOS "
Dim sql3 As String = "SELECT * FROM CURSOS "
Dim sql4 As String = "select codalumno ,count(monto) as cant,sum(monto) as total
from pagos group by codalumno"
Dim sql As String = sql1 + sql2 + sql3 + sql4
Dim nc As Integer
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
Dim contador As Integer = 0
Do
Console.WriteLine("TABLA {0} ", contador)
nc = rdr.FieldCount
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr.GetName(i))
Next
Console.WriteLine()
While rdr.Read()
' imprime una fila en el tiempo
Console.WriteLine("{0} : {1} {2}", rdr(0), rdr(1), rdr(2))

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-433-

End While
Console.WriteLine("".PadLeft(60, "=".ToString))
contador = contador + 1
Loop While rdr.NextResult()
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
6.4 Ejecutar sentencias de modificacin de datos. mtodo ExecuteNonQuery.
El mtodo ExecuteNonQuery del comando ejecuta instrucciones SQL en lugar de
consultas.
1. Insertar un registro

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Dim consulta As String = "insert into alumnos (Codalumno,nombrealumno,fechanac)
values('A9', 'PEPE','1/12/1987')"
Dim comando As SqlCommand = New SqlCommand("", conn)
Try
conn.Open()
comando.CommandText = consulta
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
2. Vea la base de alumnos y la tabla alumnos debe aparecer el datos insertado

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-434-

Tarea Inserte varios registros generado automaticamente con cdigo


Eliminar registros Modifique la consulta anterior la linea que esta con negrita con
Dim consulta As String = "delete alumnos where codalumno ='A9'"
Y vea el resultado elimina el registro de codigo A9 en la tabla alumnos
Modificacion de registros Cambie la consulta a y vea el resultado
Dim consulta As String = "Update alumnos set nombrealumno='JORGE' where
codalumno ='A1'"
Uso de parmetros de comando (adicional ver en el documento)
Prubelo: uso de parmetros de comando
Listing 11-5. CommandParameters.vb
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim CodAlu As String = "A98"
Dim NombreAlu As String = "MIGUEL"
Dim FechaNac As String = "1/1/2010"
Dim conn As SqlConnection = New SqlConnection("Data Source=(local);Initial
Catalog=ALUMNOS;Integrated Security=True")
'define consulta escalar
Dim sqlqry As String = "select count(*)from alumnos"
'define sentencia insert
Dim sqlins As String = "insert into alumnos
(codalumno,nombrealumno,fechanac)values(@codalu,@nombrealu,@fechanac)"
Dim sqldel As String = "delete from alumnos where Codalumno = @codalu and
nombrealumno = @nombrealu"
'creaando comandos
Dim cmdqry As SqlCommand = New SqlCommand(sqlqry, conn)
Dim cmdnon As SqlCommand = New SqlCommand(sqlins, conn)
cmdnon.Prepare()
'adiciona parametros para el comando
cmdnon.Parameters.Add("@CodAlu", SqlDbType.VarChar, 5)
cmdnon.Parameters.Add("@Nombrealu", SqlDbType.VarChar, 50)
cmdnon.Parameters.Add("@Fechanac", SqlDbType.DateTime)
Try
conn.Open()
'ejecuta la consulta insert y numero de alumnos
Console.WriteLine("ANTES INSERT: Numero de alumnos {0}",
cmdqry.ExecuteScalar())
'execute nonquery to inserte alumno
cmdnon.Parameters("@codalu").Value = CodAlu
cmdnon.Parameters("@nombrealu").Value = NombreAlu
cmdnon.Parameters("@FechaNac").Value = FechaNac
Console.WriteLine("Ejecutando sentencia {0}", cmdnon.CommandText)
cmdnon.ExecuteNonQuery()

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-435-

Console.WriteLine("DESPUES INSERT: Numero de alumnos {0}",


cmdqry.ExecuteScalar())
'execute nonquery to delete alumno
cmdnon.CommandText = sqldel
Console.WriteLine("Executando sentencia {0}", cmdnon.CommandText)
cmdnon.ExecuteNonQuery()
Console.WriteLine(" DESPUES DELETE: Numero de alumnos {0}",
cmdqry.ExecuteScalar())
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Connecion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module

6.5 USANDO DATASET Y DATAADAPTERS ( FORMA DESCONECTADA)


El dataset para tener bases de datos a memoria.
DataAdapter este sirve como un puente de conexin entre un DataSet y
una fuente de datos para recuperar y almacenar datos.
Conjuntos de datos son completamente independientes de y pueden usarse conectados
o desconectados de orgenes de datos. Su propsito fundamental es proporcionar una
vista relacional de los datos almacenados en una cach en memoria.
6.5.1 Una breve introduccin a los conjuntos de datos.
Un conjunto de datos almacena datos relacionales como colecciones de tablas de datos.
La Figura 13-1 muestra la arquitectura de conjunto de datos.
La arquitectura refleja el diseo lgico de una base de datos relacional. Aprender a
utilizar las tablas de datos, filas de datos y columnas de datos en este captulo.

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-436-

Figure 13-1. arquitectura de un Dataset


Una breve introduccin a los adaptadores de datos.
Cuando crea una instancia de un conjunto de datos, no contiene datos. Se puede
obtener un conjunto de datos poblada pasarlo a un adaptador de datos, que se encarga
de los detalles de la conexin y es un componente de un proveedor de datos. Un conjunto
de datos no forma parte de un proveedor de datos. Es como un cubo, listo para ser
llenado con agua, pero necesita una tubera para permitir que el agua en el exterior. En
otras palabras, el conjunto de datos necesita un adaptador de datos para rellenarlo con
datos y apoyar el acceso al origen de datos.
Cada proveedor de datos tiene su propio adaptador de datos de la misma manera que
tiene su propio lector de conexin, comando y los datos. Figura 13-2 describe las
interacciones entre el conjunto de datos, el adaptador de datos y el origen de datos.

Figure 13-2. interaccion de Dataset, data adapter,y data source


puede crear un adaptador de datos de cuatro maneras:
puede utilizar su constructor sin parmetros (asignacin de SQL y la conexin ms
tarde).
Puede pasar su constructor un comando ( cmd es un objeto SqlCommand).
Se pueden pasar una cadena SQL y una conexin.
Se pueden pasar una cadena SQL y una cadena de conexin.

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-437-

Una breve introduccin a las tablas de datos, columnas de datos y filas de datos.
Una tabla de datos es una instancia de la clase System.Data.DataTable. Es
conceptualmente similar a una tabla relacional. Como se muestra en la figura 13-1, una
tabla de datos tiene colecciones de datos filas y columnas de datos. Puede acceder a
estas colecciones anidadas a travs de las propiedades de filas y columnas de la tabla de
datos.
Obtener la coleccin de columnas de datos utilizando la propiedad de las columnas de la
tabla de datos, cuya indizador acepta un nombre de columna o un ndice de base cero,
por ejemplo (donde dt es una tabla de datos):
Dim col As DataColumn=dt.Columns("FechaNac")
Dim col As DataColumn=dt.Column(2)
Una fila de datos representa los datos de una fila. Mediante programacin puede agregar,
actualizar o eliminar filas en una tabla de datos. Para acceder a las filas de una tabla de
datos, utilice su propiedad Rows, cuya indizador acepta un ndice de base cero, por
ejemplo (donde dt es una tabla de datos):
Dim row As DataRow=dt.Rows(2)
6.5.3 Llenar un Dataset con un adaptador de datos. crear un conjunto de datos,
rellenarlo con un adaptador de datos y, a continuacin, mostrar su contenido.
Lista una consulta dataset con for next y
determinada

mostrar el elemento de la fila y columna

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim fila, col As Integer
Dim connstring As String = _
"Data Source=(LocalDB)\v11.0; AttachDbFilename=E:\Datos\ALUMNOS.mdf;
Integrated Security=True;Connect Timeout=30"
Dim sql As String = "SELECT * FROM PAGOS "
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
Dim da As SqlDataAdapter = New SqlDataAdapter(sql, conn)
Dim ds As DataSet = New DataSet

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-438-

da.Fill(ds, "pagos")
Console.WriteLine("Nombre de la consulta: {0}", sql)
Console.WriteLine("nombre de la tabla: {0}", ds.Tables(0))
Console.WriteLine("valores de los datos")
Dim nfilas As Integer = ds.Tables(0).Rows.Count
Dim ncol As Integer = ds.Tables(0).Columns.Count
For fila = 0 To nfilas - 1
For col = 0 To ncol - 1
Console.Write(" {0}", ds.Tables(0).Rows(fila).Item(col).ToString.PadRight(10))
Next col
Console.WriteLine()
Next fila
Console.WriteLine("Elemento de fila 2 y col 3 = {0}", ds.Tables(0).Rows(2).Item(3))
Console.WriteLine("modificamos elemento")
ds.Tables(0).Rows(2).Item(3) = 500
Console.WriteLine("Elemento de fila 2 y col 3 = {0}", ds.Tables(0).Rows(2).Item(3))
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
Se podra tambin mostrar otras caractersticas
Console.WriteLine("nombre de la columna 0 {0}", ds.Tables(0).Columns(0).ColumnName)
Console.WriteLine("nombre de la columna 0 {0}",
ds.Tables(0).Columns(0).DataType)

6.5.4 Mostrar todas las tablas o consultas

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-439-

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim fila, col, k As Integer
Dim connstring As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "SELECT * FROM ALUMNOS;SELECT * FROM
PAGOS;SELECT * FROM CURSOS "
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter(sql, conn)
Dim ds As DataSet = New DataSet
da.Fill(ds, "pagos")
ds.Tables(0).TableName = "alumnos"
ds.Tables(1).TableName = "cursos"
ds.Tables(2).TableName = "pagos"
Console.WriteLine("Nombre de la consulta: {0}", sql)
Dim ntablas As Integer = ds.Tables.Count
Dim nfilas As Integer
Dim ncol As Integer
For k = 0 To ntablas - 1
Console.WriteLine(" TABLA: {0}", ds.Tables(k))
Console.WriteLine("=============")
nfilas = ds.Tables(k).Rows.Count
ncol = ds.Tables(k).Columns.Count
For i = 0 To ncol - 1

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-440-

Console.Write(" {0}",
ds.Tables(k).Columns(i).ColumnName.ToString.PadRight(12))
Next i
Console.WriteLine()
For fila = 0 To nfilas - 1
For col = 0 To ncol - 1
Console.Write(" {0}",
ds.Tables(k).Rows(fila).Item(col).ToString.PadRight(12))
Next col
Console.WriteLine()
Next fila
Next k
Console.WriteLine("Elemento de la tabla 1 fila 2 y col 3 = {0}",
ds.Tables(1).Rows(2).Item(3))
Console.WriteLine("modificamos elemento")
ds.Tables(1).Rows(2).Item(3) = 500
Console.WriteLine("Elemento de la tabla 1 fila 2 y col 3 = {0}",
ds.Tables(1).Rows(2).Item(3))
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
Puede tambin poblar el dataset de la siguiente manera
Dim sql As String
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter("", conn)
Dim ds As DataSet = New DataSet
da.SelectCommand.CommandText = "SELECT * FROM ALUMNOS"
da.Fill(ds, "alumnos")
da.SelectCommand.CommandText = "SELECT * FROM PAGOS"
da.Fill(ds, "pagos")
da.SelectCommand.CommandText = "SELECT * FROM CURSOS"
da.Fill(ds, "cursos")
Console.WriteLine("Nombre de la consulta 2: {0}",
da.SelectCommand.CommandText)
6.6 Ejemplo de for each y for next
Ejemplificaremos con arreglos
For Each element [ As datatype ] In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

Module Module1
Sub Main()
Dim A() As Integer = {10, 20, 30, 40, 50}
Dim i As Integer, nro As Integer
Console.WriteLine(" Mostrando con for next")
For i = 0 To 4
Console.Write(A(i).ToString.PadRight(10))
Next i
Console.WriteLine()
Console.WriteLine(" Mostrando con for each")
For Each nro In A
Console.Write(nro.ToString.PadRight(10))
Next
Console.ReadLine()
End Sub
End Module

Ejemplo 2
Imports System.Data.SqlClient
Module Module1
Sub Main()
' crear un array y rellenarlo con valores
Dim lsColores() As String = {"Azul", "Verde", "Marino", "Violeta"}
Dim lsColor As String
' en cada iteracin se obtiene un elemento
' del array lsColores, y se guarda en la variable lsColor
For Each lsColor In lsColores
Console.Write("{0} ", lsColor)
Next
Console.ReadLine()
End Sub
End Module

-441-

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-442-

Public Class Form1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim ncontroles As Integer = Me.Controls.Count
ListBox1.Items.Add("Name Text")
For Each Control As Control In Me.Controls
ListBox1.Items.Add(Control.Name & " " & Control.Text)
Next Control
ListBox1.Items.Add("nro controles " & ncontroles)
End Sub
End Class
Utilizando for each

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "SELECT * FROM PAGOS "
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter(sql, conn)
Dim ds As DataSet = New DataSet

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-443-

da.Fill(ds, "PAGOS")
'displaya los datos
Dim dt As DataTable = ds.Tables("PAGOS")
Dim row As DataRow
For Each row In dt.Rows
Dim col As DataColumn
For Each col In dt.Columns
Console.Write(row(col).ToString.PadRight(12))
Next col
Console.WriteLine()
Next row
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
6.7 Filtrar y ordenar en un conjunto de datos.
En el ejemplo anterior, se vio cmo extraer datos de un conjunto de datos. Con
frecuencia, desear dinmicamente filtrar u ordenar los datos. En el siguiente ejemplo,
ver cmo se pueden utilizar filas de datos para ello.
filtrando y ordenando dinmicamente datos en un Dataset.

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql1 As String = "select nro, codalumno, Monto from pagos"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Try
con.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter
da.SelectCommand = New SqlCommand(sql1, con)
Dim ds As DataSet = New DataSet
da.Fill(ds, "pagos")
' obtiene la coleccion de la tablas
Dim dtc As DataTableCollection = ds.Tables
' displaya datos de la primera tablas

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-444-

Console.WriteLine("Results de la consulta {0} ", sql1)


Console.WriteLine(("Nro".PadRight(10) + "Codalumno".PadLeft(10) +
"Monto".PadLeft(10) + ControlChars.Lf))
'' poner filtro para displayar
Dim fl As String = "codalumno = 'A1'"
Dim srt As String = "Nro"
' display los datos filtrado y ordenados
Dim row As DataRow
For Each row In dtc("pagos").Select(fl, srt)
Console.WriteLine("{0} {1} {2} ", row("Nro").ToString.PadLeft(10),
row("CodAlumno").ToString.PadLeft(10), row("Monto").ToString.PadLeft(10))
Next row
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
con.Close()
End Try
Console.ReadLine()
End Sub
End Module
Listar un filtrado ingresando codigo por teclado

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim CADENA As String
Console.Write("INGRESE CODIGO DEL ALUMNO ")
CADENA = Console.ReadLine()
Dim sql1 As String = "select * from pagos WHERE codalumno= '" _
& CADENA & "'ORDER BY MONTO DESC"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Try
con.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter
da.SelectCommand = New SqlCommand(sql1, con)
Dim ds As DataSet = New DataSet
da.Fill(ds, "pagos")
Console.WriteLine()
Dim NF As Integer
Dim NC As Integer, fila As Integer, col As Integer

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-445-

NF = ds.Tables(0).Rows.Count
NC = ds.Tables(0).Columns.Count
For col = 0 To NC - 1
Console.Write("{0} ", ds.Tables(0).Columns(col).ColumnName)
Next col
Console.WriteLine()
For fila = 0 To NF - 1
For col = 0 To NC - 1
Console.Write(" {0} ", ds.Tables(0).Rows(fila).Item(col))
Next col
Console.WriteLine()
Next fila
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
con.Close()
End Try
Console.ReadLine()
End Sub
End Module
Mostrar todos los registros de filtrado por codigo del alumno y ordenado por numero

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "select * from alumnos "
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
Dim da As New SqlDataAdapter()
da.SelectCommand = New SqlCommand(sql, conn)
Dim ds As New DataSet()
da.Fill(ds, "alumnos")
Dim dt As DataTable = ds.Tables("alumnos")
' La columna Codalumno debera ser nullable
dt.Columns("codalumno").AllowDBNull = True
dt.Rows(0)("NombreAlumno") = "ALEJANDRO"
' add a row
Dim newRow As DataRow = dt.NewRow()
newRow("Codalumno") = "A9"
newRow("NombreAlumno") = "MARIA"

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-446-

newRow("FechaNac") = "1/1/1987"
dt.Rows.Add(newRow)
' display rows
Dim row As DataRow
For Each row In dt.Rows
Console.WriteLine("{0} {1} {2}", row("codalumno").ToString().PadLeft(5),
row("nombrealumno").ToString().PadRight(20), row("fechanac").ToString.PadRight(40))
Next row
Catch e As Exception
Console.WriteLine("Error: " + e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
Sin filtro ordenado por monto ( muestra todos los registros)
For Each row In dtc("pagos").Select("", "Monto")
Sin filtro ordenado por monto en forma descendente
For Each row In dtc("pagos").Select("", "Monto Desc")
Filtrado por codigo de alumno y ordenado por fechapago
For Each row In dtc("pagos").Select("codalumno='A1'", "FECHAPAGO Desc")
Si no abre ni se cierra la conexion funciona igual ( es modo desconectado)
NOTA se puede realizar lo mismo con
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim fila As Integer, col As Integer
Dim cadenaconexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\alumnos.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim sql1 As String = "select nro, codalumno, Monto from pagos where
codalumno='A1' order by Nro Asc"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Try
con.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter
da.SelectCommand = New SqlCommand(sql1, con)
Dim ds As DataSet = New DataSet
da.Fill(ds, "pagos")
For col = 0 To ds.Tables(0).Columns.Count - 1
Console.Write("{0}",
ds.Tables(0).Columns(col).ColumnName.ToString.PadRight(12))
Next
Console.WriteLine()
For fila = 0 To ds.Tables(0).Rows.Count - 1

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-447-

For col = 0 To ds.Tables(0).Columns.Count - 1


Console.Write("{0}", ds.Tables(0).Rows(fila).Item(col).ToString.PadRight(12))
Next
Console.WriteLine()
Next
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
con.Close()
End Try
Console.ReadLine()
End Sub
End Module
Comparacin de FilterSort a PopDataSet.(ver documento)
Usando vistas de datos.(ver documento)
6.8 MODIFICAR DATOS EN UN DATASET 418
Note Los cambios realizados a un conjunto de datos no se propagan automticamente a
una base de datos. Para guardar los cambios en una base de datos, debe conectarse de
nuevo a la base de datos y realizar explcitamente las actualizaciones necesarias.
6.8.1 Modificar una tabla de datos en un Dataset.
Vamos a actualizar una fila y agregar una fila en una tabla de datos
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = "Data Source=.\sqlexpress;Integrated
Security=True;database=Alumnos"
Dim sql As String = "select * from alumnos "
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
Dim da As New SqlDataAdapter()
da.SelectCommand = New SqlCommand(sql, conn)
Dim ds As New DataSet()
da.Fill(ds, "alumnos")
Dim dt As DataTable = ds.Tables("alumnos")
' La columna Codalumno debera ser nullable
dt.Columns("codalumno").AllowDBNull = True
dt.Rows(0)("NombreAlumno") = "ALEJANDRO"
' add a row
Dim newRow As DataRow = dt.NewRow()
newRow("Codalumno") = "A9"
newRow("NombreAlumno") = "MARIA"
newRow("FechaNac") = "1/1/1987"
dt.Rows.Add(newRow)
' display rows
Dim row As DataRow

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-448-

For Each row In dt.Rows


Console.WriteLine("{0} {1} {2}", row("codalumno").ToString().PadLeft(5),
row("nombrealumno").ToString().PadRight(20), row("fechanac").ToString.PadRight(40))
Next row
Catch e As Exception
Console.WriteLine("Error: " + e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module

Figure 13-6.Modificando un data table


6.8.2 Propagar cambios a un origen de datos. 419
Un adaptador de datos rellena las tablas de datos de un conjunto de datos. Lo que no ha
visto an es cmo un adaptador de datos se actualiza y sincroniza un origen de datos con
datos de un conjunto de datos. Tiene tres propiedades que apoyan (anlogo a su
propiedad SelectCommand, que apoya las consultas):
UpdateCommand
InsertCommand
DeleteCommand
Se describir brevemente cada una de estas propiedades y luego ponerlas a trabajar.
Propiedad UpdateCommand.
La propiedad UpdateCommand del adaptador de datos contiene el comando que se utiliza
para actualizar el origen de datos cuando se llama al mtodo Update del adaptador de
datos.
Propagacin de cambios de conjunto de datos a un origen de datos. Aqu va a
cambiar el nombre del alumnos en la primera fila de la tabla alumnos y persiste el cambio
en la base de datos
da.UpdateCommand = cmd
da.Update(ds, "alumnos")
se puede ver la ,modificacin en la tabla alumnos
Propiedad InsertCommand.

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-449-

El adaptador de datos utiliza la propiedad InsertCommand para insertar filas en una tabla.
Al llamar al mtodo Update, todas las filas en la tabla de datos se buscan y se propaga a
la base de datos.
Propagacin de nuevas filas de conjunto de datos a un origen de datos. Vamos a
propagar una nueva fila a la base de datos,
Propiedad DeleteCommand.
Utilice la propiedad DeleteCommand para ejecutar instrucciones SQL y eliminar.
En este ejemplo, podr modificar de nuevo para eliminar una fila de la base de datos.
Constructores de comando.
Para poder generar dinmicamente instrucciones INSERT, DELETE y UPDATE, el
generador de comando utiliza la propiedad SelectCommand del adaptador de datos para
extraer metadatos de la tabla de base de datos.
Utilizando SqlCommandBuilder.

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim qry As String = "select * from alumnos"
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
Dim da As New SqlDataAdapter()
da.SelectCommand = New SqlCommand(qry, conn)
'create command builder
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da)
Dim ds As New DataSet()
da.Fill(ds, "alumnos")
Dim dt As DataTable = ds.Tables("alumnos")
Dim newRow As DataRow = dt.NewRow()
newRow("codalumno") = "A7"
newRow("nombrealumno") = "MARTIN"
newRow("fechaNac") = "1/1/2007"
dt.Rows.Add(newRow)
Dim row As DataRow
For Each row In dt.Rows
Console.WriteLine("{0} {1} {2}", _
row("codalumno").ToString().PadRight(15), _

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-450-

row("nombrealumno").ToString().PadLeft(20), row("fechanac"))
Next row
da.Update(ds, "alumnos")
Catch e As Exception
Console.WriteLine(("Error: " + e.ToString))
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
6.8.3 Utilizando conjuntos de datos y XML.
XML es el medio fundamental para transferencia de datos en.ADO.NET. De hecho, XML
es una base importante para ADO.NET. Conjuntos de datos organizan datos internamente
en formato XML y tienen una variedad de mtodos para leer y escribir en XML. Por
ejemplo:

Puede importar y exportar la estructura de un conjunto de datos como un esquema


XML
utilizando
mtodos
ReadXmlSchema
de
System.Data.DataSet
y
WriteXmlSchema.
Puede leer los datos (y, opcionalmente, el esquema) de un conjunto de datos y
escribir en un archivo XML con ReadXml() y WriteXml(). Esto puede ser til al
intercambiar datos con otra aplicacin o hacer una copia local de un conjunto de
datos.
Se puede enlazar un conjunto de datos a un documento XML (una instancia de
System.Xml. XmlDataDocument). El documento de conjunto de datos y los datos se
sincronizan, tan bien ADO.Las operaciones de la red o XML pueden utilizarse para
modificarlo.

Extraccin de un conjunto de datos a un archivo XML.


Puede conservar el contenido y esquema de un conjunto de datos en un archivo XML
utilizando el mtodo de WriteXml del conjunto de datos o en archivos separados mediante
WriteXml() y WriteXmlSchema(). WriteXml() est sobrecargado, y en este ejemplo
mostraremos una versin que extrae los datos y el esquema.
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "Select * from alumnos"
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
Dim da As SqlDataAdapter = New SqlDataAdapter
da.SelectCommand = New SqlCommand(sql, conn)
conn.Open()
Dim ds As DataSet = New DataSet
da.Fill(ds, "Alumnos")

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-451-

'extract dataset to XML file


ds.WriteXml("E:\DATOS\alumnostable.xml")
Console.WriteLine(" el archivo XML a sido creado")
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module

3. No parece haber ocurrido, pero eso es porque escribi a un archivo en lugar de a la


pantalla. Abra productstable.xml para ver el cdigo XML. (Una forma en Visual Studio
es utilizar el archivo abrir el archivo). Figura 13-12 muestra el XML que se extraen de
las primeras filas de cinco productos.

Figure 13-12. Data table extracted as XML


De forma predeterminada, documentos extrados XML son archivos de texto sin formato.
Puede abrir el archivo productstable.xml en cualquier editor, o incluso utilizar el tipo o ms
comandos para verlo desde la lnea de comandos.
Tablas de datos sin conjuntos de datos. (opcional)
Entendiendo dataset con tipo y sin tipo(opcional)

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-452-

6.8.4 MENU MODO CONECTADO


Menu de mantenimiento de base de datos alumnos
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Dim sqlqry As String = "select count(*) from alumnos"
Dim Opcion As Integer
Dim codalumno As String
Dim nombrealumno As String
Dim FechaNac As String
Dim comando As SqlCommand = New SqlCommand(sqlqry, conn)
Dim rdr As SqlDataReader
Dim nrocol As Integer
Dim i As Integer
Try
Do
Console.WriteLine(" 1. listar 2. modificar 3 Agregar 4 Eliminar 5 salir ")
Console.WriteLine(" Ingrese opcion ")
Opcion = Console.ReadLine()
Select Case Opcion
Case 1
conn.Open()
Console.WriteLine("Conneccion ABIERTA.")
comando.CommandText = sqlqry
Console.WriteLine(": Numero de alumnos {0}", comando.ExecuteScalar())
comando.CommandText = " SELECT * FROM ALUMNOS"
rdr = comando.ExecuteReader
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
nrocol = rdr.FieldCount
While (rdr.Read)
For i = 0 To nrocol - 1
Console.Write("{0}
", rdr.GetValue(i).ToString.PadRight(10))
Next
Console.WriteLine()
End While
conn.Close()
Case 2
conn.Open()
Console.WriteLine("Ingrese el codigo del alumno a modificar")
codalumno = Console.ReadLine()
Console.WriteLine("Ingrese el NUEVO NOMBRE del alumno a
modificar")
nombrealumno = Console.ReadLine()

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-453-

Console.WriteLine("Ingrese el NUEVA fecha de nacimiento


'1/'1/1988'")
FechaNac = Console.ReadLine()
comando.CommandText = " UPDATE ALUMNOS SET
NOMBREALUMNO ='" & nombrealumno & " ', FECHANAC=' " & FechaNac & "'
WHERE CODALUMNO ='" & codalumno & " ' "
Console.WriteLine("Ejecutando sentencia {0}",
comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
Case 3
conn.Open()
Console.WriteLine("Ingrese el codigo del alumno a Agregar")
codalumno = Console.ReadLine()
Console.WriteLine("Ingrese NOMBRE del alumno a insertar")
nombrealumno = Console.ReadLine()
Console.WriteLine("Ingrese fecha de nacimiento '1/'1/1988'")
FechaNac = Console.ReadLine()
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.CommandText = _
"INSERT ALUMNOS (CODALUMNO,NOMBREALUMNO,FECHANAC )" + _
"VALUES (' " & codalumno & "','" & nombrealumno & "','" & FechaNac & "')"

comando.ExecuteNonQuery()
conn.Close()
Case 4
conn.Open()
Console.WriteLine("Ingrese el codigo del alumno a eliminar")
codalumno = Console.ReadLine()
comando.CommandText = " DELETE FROM ALUMNOS WHERE
CODALUMNO = '" & codalumno & "' "
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
End Select
Loop Until Opcion = 5
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-454-

FOR EACH CON TRES TABLAS

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = "Data Source=.\sqlexpress;Integrated
Security=True;database=alumnos"
Dim conn As SqlConnection = New SqlConnection(connstring)
Dim ColTabla As DataColumn
Dim filaTabla As DataRow
Dim tabla As DataTable
Try
conn.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter("", conn)
da.SelectCommand.CommandText = "SELECT * FROM ALUMNOS "

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-455-

Dim ds As DataSet = New DataSet


da.Fill(ds, "ALUMNOS")
da.SelectCommand.CommandText = "SELECT * FROM PAGOS "
da.Fill(ds, "PAGOS")
da.SelectCommand.CommandText = "SELECT * FROM CURSOS "
da.Fill(ds, "CURSOS")
Console.WriteLine(" nombre de dataset {0} ", ds.DataSetName)
Console.WriteLine(" numero de tablas {0} ", ds.Tables.Count)
For Each tabla In ds.Tables
Console.WriteLine(" nombre de la tabla {0} ", tabla.TableName)
For Each ColTabla In tabla.Columns
Console.Write(" {0} ", ColTabla.ColumnName)
Next
Console.WriteLine()
For Each filaTabla In tabla.Rows
For Each ColTabla In tabla.Columns
Console.Write(" {0} ", filaTabla.Item(ColTabla))
Next ColTabla
Console.WriteLine()
Next filaTabla
Next tabla
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
6.8.5 MENU DE BASE DE DATOS EN FORMA DESCONECTADA
realizar el mantenimiento de la base de datos alumnos en forma desconectada usando
dataset, datatable y/o dataview similar a la mostrada

Imports System.Data.SqlClient

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-456-

Module Module1
Sub Main()
Dim cadenaconexion As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Dim Opcion As Integer, Pos As Integer
Dim codalumno As String
Dim nombrealumno As String
Dim FechaNac As String
'Dim comando As SqlCommand = New SqlCommand("", conn)
Dim nfilas As Integer, ncol As Integer, i As Integer
Dim fila, col As Integer
Dim da As SqlDataAdapter = New SqlDataAdapter("", conn)
Dim ds As DataSet = New DataSet
Dim dt As DataTable = New DataTable
Dim filaReg As DataRow
Try
da.SelectCommand.CommandText = "SELECT * FROM ALUMNOS "
da.Fill(ds, "ALUMNOS")
dt = ds.Tables("alumnos")
Do
Console.WriteLine(" 1. listar 2. modificar 3 Agregar 4 Eliminar 5 Enviar Cambios 6 salir ")
Console.WriteLine(" Ingrese opcion ")
Opcion = Console.ReadLine()

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-457-

Select Case Opcion


Case 1
nfilas = dt.Rows.Count
ncol = dt.Columns.Count
Console.WriteLine(" nombre de la tabla {0} ", dt.TableName)
For col = 0 To ncol - 1
Console.Write(" {0} ", dt.Columns(col).ColumnName)
Next
Console.WriteLine()
For fila = 0 To nfilas - 1
For col = 0 To ncol - 1
Console.Write(" {0} ", dt.Rows(fila).Item(col))
Next
Console.WriteLine()
Next
Case 2 ' modificar
Console.WriteLine("Ingrese la fila de la tabla a modificar")
pos = Console.ReadLine
Console.WriteLine("Ingrese codigo de alumno a modifcar ")
codalumno = Console.ReadLine()
Console.WriteLine("Ingrese NOMBRE del alumno a insertar")
nombrealumno = Console.ReadLine()
Console.WriteLine("Ingrese fecha de nacimiento '1/'1/1988'")
FechaNac = Console.ReadLine()
ds.Tables(0).Rows(pos).Item(0) = codalumno
ds.Tables(0).Rows(pos).Item(1) = nombrealumno
ds.Tables(0).Rows(pos).Item(2) = FechaNac
Case 3 ' adicionar
Console.WriteLine("Ingrese el codigo del alumno a Agregar")
codalumno = Console.ReadLine()
Console.WriteLine("Ingrese NOMBRE del alumno a insertar")
nombrealumno = Console.ReadLine()
Console.WriteLine("Ingrese fecha de nacimiento '1/'1/1988'")
FechaNac = Console.ReadLine()
filaReg = dt.NewRow()
filaReg("Codalumno") = codalumno
filaReg(1) = nombrealumno
filaReg(2) = FechaNac
dt.Rows.Add(filaReg)
Case 4
Console.WriteLine("Ingrese la fila a eliminar")
pos = Console.ReadLine
filaReg = ds.Tables(0).Rows(Pos)
filaReg.Delete()
Case 5
conn.Open()
Dim cbd As New SqlCommandBuilder(da)
da.Update(ds, "alumnos")
conn.Close()
End Select

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-458-

Loop Until Opcion = 6


Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
TAREA
Crea una base de datos minimo 3 tablas y practique las Sentancias sql
Las sentencias sql puede practicar con
EXCEL ,Accees ,SQL SERVER 2005,Herramienta de visual basic 2012
Con visual BASIC 2012 modo consola forma conectada y desconectada
Con visual basic 2012 modo formulario
Se tiene una base alumnos llamado empresa que tiene una tabla llamada trabajadores
que tiene la Siguiente estructura

Preguntas
Listar los funcionarios
SELECT * FROM TRABAJADORES WHERE TIPO = 3
Promedio de sueldo por sexo
Promedio de sueldo por tipo
Cual es el trabajador mas antiguo

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-459-

Elaborar un programa en modo consola que obtenga los siguientes datos


a) Cantidad de trabajadores por cada tipos
b) Datos del trabajador que gana mas
c) Elaborar 3 listados uno de cada tipo
d) Dado el cdigo del trabajador que me muestre los dato de ese registro
e) Filtrar por nombre
Obtener los siguientes datos pero con codigo

Practica 4
PROCEDIMIENTOS ALMACENADOS(opcional)
Crear un procedimiento almacenado con visual estudio 2008 y ejecutarlo
Crear y ejecutar procedimientos almacenados con SQLserver 2005
Mostrar definiciones de procedimientos almacenados.
Procedimientos con Parmetros de Salida y Valor de Retorno
Trabajar con procedimientos almacenados en VB.NET.
CONOCIENDO A ADO.NET.
Trabajar con el proveedor de datos SQL Server
Listar la tabla alumnos usando proveedor de datos SQLServer
Listar la tabla alumnos usando proveedor de datos OLEDB
Listar la tabla alumnos usando proveedor de datos ODBC
HACIENDO CONEXIONES
escribir un programa muy simple, para abrir y comprobar una conexin:
Mostrar informacin de conexin.
Conectar a SQL Server Express con el proveedor de datos OLE DB.
EJECUTANDO COMANDOS
Crear un comando con un Constructor.
Asociar un comando con una conexin.
Configuracin de la propiedad de conexin.
Asignacin de texto a un comando.
Configuracin de la propiedad CommandText.
Ejecucin de comandos
Metodos de ejecucin de comandos
obtener un solo valor execute scalar
Ejecutar comandos con varios resultados.
ExecuteReader() la clase SqlDataReader
Ejecutar sentencias de modificacin de datos mtodo ExecuteNonQuery.
Uso de parmetros de comando
USANDO DATA READERS

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-460-

Mostrar un campo , varios campos,etc de una tabla


Utilizando los indizadores ordinales.
Uso de columnas indexado por nombre
Utilizando los mtodos de descriptor de acceso con tipo.
Obtener datos sobre datos.
Obtener datos acerca de las tablas.
Obtener informacin de esquema.
Utilizar el resultado de varios conjuntos con un lector de datos. Next result
USANDO DATASET Y DATAADAPTERS ( FORMA DESCONECTADA)
Datasets vs.Data Readers. ( lectores de datos y conjuntos de datos)
Una breve introduccin a las tablas de datos, columnas de datos y filas de datos.
Llenar un Dataset con un adaptador de datos
Ejemplo de for each y for next
Ejemplo mostrar el elemento de la fila y columna determinada
Mostrar todas las tablas
filtrando y ordenando dinmicamente datos en un Dataset.
Usando vistas de datos.
Propiedad UpdateCommand.
Propiedad InsertCommand
Propiedad DeleteCommand.
Constructores de comando. SqlCommandBuilder.
Tablas de datos sin conjuntos de datos.
Utilizando conjuntos de datos y XML.
Extraccin de un conjunto de datos a un archivo XML
Rellenar una tabla de datos con un adaptador de datos
Uso de for each
Menu de mantenimiento de base de datos alumnos modo conectado
Menu de mantenimiento de base de datos alumnos modo desconectado
EJECUCION DE CONSULTAS EN MODO CONSOLA
Obtener datos con cdigo
Ejemplo sumar los montos e,tc de los trabajadores

1.
2.
3.
4.

ELABORAR UNA APLICACIN EN MODO FORMULARIO


Que realice las siguientes acciones
Cargar a una tabla de base de datos un archivo de texto hecho en excel
En un cuadro de lista cargar todas las tablas que contiene la base de datos pruebe con la
base de datos alumnos
Al hacer clic en el el nombre de la tabla debe mostrar los valore de la tabla
Al hace clic en el buton matriculado por curso debe listar todos los codigos de los cursos
5. Al hace clik en el el boton grabar matriculados generar el sigueinte informe en
excel

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-461-

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-462-

Imports System.IO
Module Module2
Public Const maxfilas = 10, maxcol = 10
Public A(maxfilas, maxcol) As String
Public nf As Integer = 5
Public nc As Integer = 3
Public nombreArchivo As String
Sub RecuperarMatriz(ByVal nombrearchivo As String, ByRef A(,) As String, ByRef nf As
Integer, ByVal nc As Integer)
Dim srLector As StreamReader
srLector = New StreamReader(nombrearchivo)
Dim fila As Integer = 0, col As Integer
Dim cadena As String = ""
Dim subcadena As String
Dim pos As Integer = 0
Dim inicio As Integer = 1
cadena = srLector.ReadLine()
Do While Not (cadena Is Nothing)
cadena = cadena & Chr(9)
inicio = 1
For col = 0 To nc - 1
pos = InStr(inicio, cadena, Chr(9))
subcadena = Mid(cadena, inicio, pos - inicio)
A(fila, col) = subcadena
inicio = pos + 1
Next
fila = fila + 1
cadena = srLector.ReadLine()
Loop
nf = fila
Console.WriteLine("Archivo {0} leido satisfactoriamente", nombrearchivo)
srLector.Close()
End Sub
End Module

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-463-

CODIGO DEL FORMULARIO


Imports System.IO
Imports System.Data.SqlClient
Public Class Form1
Dim consulta As String
Dim consulta2 As String
Dim dst As New DataSet
Dim dst2 As New DataSet
Dim fila As Integer
Dim CadenaConexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos1\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim con As New SqlConnection(CadenaConexion)
Dim dap1 As New SqlDataAdapter("", con)
Dim dap2 As New SqlDataAdapter("", con)
Dim Indice As Integer
Dim CodCurso As String
Dim Nombre As String
Dim Nombrecurso As String
Dim K As Integer
Private Sub CargarArchivoToolStripMenuItem_Click(ByVal sender As Object, ByVal e
As EventArgs) Handles CargarArchivoToolStripMenuItem.Click
OpenFileDialog1.ShowDialog()
nombreArchivo = OpenFileDialog1.FileName
RecuperarMatriz(nombreArchivo, A, nf, nc)
DataGridView1.ColumnCount = nc
DataGridView1.RowCount = nf
MostrarMatriz(A, nf, nc)
End Sub
Sub MostrarMatriz(ByRef A(,) As String, ByRef nf As Integer, ByVal nc As Integer)
For fila = 0 To nf - 1
For col = 0 To nc - 1
If A(fila, col) = Chr(9) Then Continue For
DataGridView1.Rows(fila).Cells(col).Value = A(fila, col)
Next
Next
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles
MyBase.Load
REM //
/*--La consulta muestra todas las tablas de la base de datos*/
consulta = "select name from sysobjects where type='U'"
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
For fila = 0 To dst.Tables(0).Rows.Count - 1
ListBox1.Items.Add(dst.Tables(0).Rows(fila).Item(0))
Next
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles ListBox1.SelectedIndexChanged

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-464-

dst.Tables.Clear()
indice = ListBox1.SelectedIndex
nombre = ListBox1.Items(indice)
TextBox1.Text = nombre
consulta = " select * from " & nombre
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles
btnSQL.Click
Try
consulta = TextBox1.Text
dst.Tables.Clear()
DataGridView1.Columns.Clear()
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
Catch EX As SqlException
MsgBox(EX)
End Try
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles
btnMatriculadosPorCurso.Click
ListBox2.Items.Clear()
dst.Tables.Clear()
DataGridView1.Columns.Clear()
consulta = "SELECT DISTINCT CODCURSO FROM PAGOS"
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
For fila = 0 To dst.Tables(0).Rows.Count - 1
ListBox2.Items.Add(dst.Tables(0).Rows(fila).Item(0))
Next
End Sub
Private Sub ListBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles ListBox2.SelectedIndexChanged
dst.Tables.Clear()
DataGridView1.Columns.Clear()
indice = ListBox2.SelectedIndex
CodCurso = ListBox2.Items(Indice)
TextBox1.Text = CODCURSO
consulta = " select * from pagos where codcurso like '" & CodCurso & "'"
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
End Sub
Private Sub btnGrabarMatriculados_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles btnGrabarMatriculados.Click

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-465-

SaveFileDialog1.ShowDialog()
Dim NombreArchivo As String = SaveFileDialog1.FileName
Dim Escritor As New StreamWriter(NombreArchivo)
DataGridView1.Columns.Clear()
For K = 0 To ListBox2.Items.Count - 1
dst.Tables.Clear()
dst2.Tables.Clear()
CodCurso = ListBox2.Items(K)
TextBox1.Text = CodCurso
consulta = " select * from pagos where codcurso like '" & CodCurso & "'"
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
consulta2 = " select nombrecurso from cursos where codcurso = '" & CodCurso & "'"
dap2.SelectCommand.CommandText = consulta2
dap2.Fill(dst2, "CONSULTA1")
Nombrecurso = dst2.Tables("CONSULTA1").Rows(0).Item(0)
TextBox1.Text = Nombrecurso
Escritor.WriteLine("{0}{1}{2}", CodCurso, Chr(9), Nombrecurso)
For col = 0 To dst.Tables(0).Columns.Count - 1
Escritor.Write("{0}{1}", dst.Tables(0).Columns(col).ColumnName, Chr(9))
Next
Escritor.WriteLine()
For fila = 0 To dst.Tables(0).Rows.Count - 1
For col = 0 To dst.Tables(0).Columns.Count - 1
Escritor.Write("{0}{1}", dst.Tables(0).Rows(fila).Item(col), Chr(9))
Next
Escritor.WriteLine()
Next
Escritor.WriteLine()
Next
Escritor.Close()
End Sub
End Class
Pruebe con la base de datos northwnd.mdf
Dim CadenaConexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\northwnd.mdf;Integrated

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-466-

Securit
y=True;Connect Timeout=30"
Como eliminar base de datos del servidor con SqlServer
CAPITULO 6 USANDO PROCEDIMIENTOS ALMACENADOS
6.1 CREAR PROCEDIMIENTOS ALMACENADOS CON LA BASE DE DATOS ALUMNOS
379
6.1.1 Procedimientos con Parmetros de Salida y Valor de Retorno 383
6.1.2 Mostrar definiciones de procedimientos almacenados. 384
6.1.3 Cambiar el nombre de procedimientos almacenados. 385
6. 1-4Trabajar con procedimientos almacenados en VB.NET.
6.1.5 Procedimientos almacenados con parmetros 187
6.1.6 EJERMPLOD E procedimiento almacenamiento en sistema de centas
Crear la tabla y agregar porcediietno, etc
6.1.7 ADO.NET ( de Wikipedia) 386
6.1.8Trabajar con el proveedor de datos SQL Server 390
6.1.9 Mostrar informacin de conexin. 390
6.1.10Conectar a SQL Server Express con OleDbConnection. ( cambio que se debe
hacer) 392
6.2 CAPITULO 11 EJECUTANDO COMANDOS 392
6.2.1 Creando un comando
6.2.2 Configuracin de la propiedad CommandText.( Asignacin de texto a un comando.)
6.2.3Ejecucin de comandos. 392
6.2.4Utilizando el mtodo ExecuteScalar ( retorna un solo valor).393
6.3 CAPITULO 12 USANDO DATA READERS 394
6.3.1Comprender los lectores de datos en General.
6.3.2 Utilizando el mtodo ExecuteReader. 394
Utilizando los indizadores ordinales. 395
Uso de columnas indexado por nombre
Utilizando los mtodos de descriptor de acceso con tipo. 395
6.3.3 Obtener datos sobre datos. 399
Obtener datos acerca de las tablas. 401
Obtener informacin de esquema. 407

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

-467-

6.3.4Utilizar el resultado de varios conjuntos con un lector de datos. 402


6.4 Ejecutar sentencias de modificacin de datos. mtodo ExecuteNonQuery. 403
1. Insertar un registro 403
Eliminar registros Modifique la consulta anterior la linea que esta con negrita con
Modificacion de registros 404
Uso de parmetros de comando (adicional ver en el documento) 404
6.5 USANDO DATASET Y DATAADAPTERS ( FORMA DESCONECTADA) 405
6.5.1 Una breve introduccin a los adaptadores de datos.
6.5.2 Una breve introduccin a las tablas de datos, columnas de datos y filas de datos.
6.5.3 Llenar un Dataset con un adaptador de datos 407
6.5.4 Mostrar todas las tablas o consultas 408
Puede tambin poblar el dataset de la siguiente manera
6.6 Ejemplo de for each y for next
6.7 Filtrar y ordenar en un conjunto de datos. 413
filtrando y ordenando dinmicamente datos en un Dataset.
6.8 MODIFICAR DATOS EN UN DATASET
6.8.1Modificar una tabla de datos en un Dataset.
6.8.2 Propagar cambios a un origen de datos.
Propiedad UpdateCommand. 418
Propagacin de cambios de conjunto de datos a un origen de datos. Aqu va a
6.8.3 Propiedad InsertCommand. 419
6.8.4 Propiedad DeleteCommand. 419
6.8.5 Constructores de comando. 419
6.9 Utilizando conjuntos de datos y XML. 420
6.10 MENU MODO CONECTADO 422
FOR EACH CON TRES TABLAS
6.11 MENU DE BASE DE DATOS EN FORMA DESCONECTADA 425
6.12 TAREA 427
Pruebe con la base de datos northwnd.mdf

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim conn As New SqlConnection
conn.ConnectionString = _
"Data Source=(LocalDB)\v11.0; " _
& "AttachDbFilename=E:\DATOS\ALUMNOS.mdf;" _
& "Integrated Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "PA_Alumnos12"
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim ncampos = rdr.FieldCount
Dim col As Integer

GUIA PRACTICAS SI2015A\6 ADO NET\Ismael Vliz Vilca

While rdr.Read()
For col = 0 To ncampos - 1
Console.Write("{0} {1} ", rdr(col), vbTab)
Next
Console.WriteLine()
End While
Console.ReadLine()
rdr.Close()
conn.Close()
End Sub
End Module

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim conn As New SqlConnection
conn.ConnectionString = _
"Data Source=(LocalDB)\v11.0; " _
& "AttachDbFilename=E:\DATOS\ALUMNOS.mdf;" _
& "Integrated Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandType = CommandType.Text
cmd.CommandText = "SELECT CODALUMNO,SUM(MONTO) " _
& " AS TOTAL FROM PAGOS
GROUP BY CODALUMNO "
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim ncampos = rdr.FieldCount
Dim col As Integer
While rdr.Read()
For col = 0 To ncampos - 1
Console.Write("{0} {1} ", rdr(col), vbTab)
Next
Console.WriteLine()
End While
Console.ReadLine()
rdr.Close()
conn.Close()
End Sub
End Module

-468-

También podría gustarte