Plsi2019a-6 Adonet-Sinf

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 80

GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -413-

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 número 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 SI2019A\6 ADO NET\Ismael Véliz Vilca -414-

Ejecutar con:

Puede ver el procedimiento almacenado y modificarlo si es necesario


También 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 código y el


nombre del alumno
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -415-

ALTER PROCEDURE PAlumnos


AS select codalumno ,Nombrealumno from alumnos
RETURN

Puede crear también 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 SI2019A\6 ADO NET\Ismael Véliz Vilca -416-

Ejercicio 3: Crear un procedimiento almacenado con un parámetro de salida BD


ALUMNOS.
Que liste los alumnos que contenga su código en el parámetro

CREATE PROCEDURE Pagos_Alumno


@CodAlumno char(10) As
Select * From Pagos Where
CodAlumno = @CodAlumno

execute Pagos_Alumno 'A1'

CREAR PROCEDMIENTO PROCEDIMENTO PAGOS ALUMNO2


CREATE PROCEDURE Pagos_Alumno2
@CodAlumno varchar (5) As

select x.* from (


sELECT A.Nro,A.CodAlumno,b.nombrealumno,A.fechapago,a.monto ,A.CODCURSO
FROM Pagos A, Alumnos B WHERE A.codAlumno = B.codAlumno ) X where
x.CodAlumno = @CodAlumno

Ejecutar un procedimiento almacenado de pagos por año


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -417-

6.1.1 Procedimientos con Parámetros de Salida y Valor de Retorno

Create procedure Sp_varsalida @num1 float, @num2 float, @resultado float output
As
Begin
Set @resultado=@num1 +@num2
end
Declare @salida float
Exec Sp_Varsalida 20,30 , @salida

Los procedimientos con parámetros dee 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 parámetro.

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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -418-

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

6.1.2 Mostrar definiciones de procedimientos almacenados.

SQL Server ofrece un mecanismo de ver la definición de los objetos creados en la


base de datos. Esto se conoce como recuperación de metadatos. La información
acerca de los objetos se almacena en los procedimientos almacenados del sistema
predefinidos que pueden ser obtenidos siempre que sea necesario.

Para ver la definición de su procedimiento almacenado, siga estos pasos:


1. Introduzca la instrucción siguiente en la ventana de consulta:

Execute sp_helptext 'PA_Alumnos'


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -419-

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á cómo 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 instrucción siguiente en la ventana de consulta:

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:
Precaución: al cambiar cualquier parte del nombre de un objeto pueden dejar
de ser válidas secuencias de comandos y procedimientos almacenados.

3. Ahora vaya al explorador de objetos, expanda el nodo de base de datos


Alumnos y, a continuación, expanda el nodo de programación. Seleccione el
nodo, con el botón 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.
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -420-
Note sp_rename funciona muy bien con la mayoría 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 parámetros de entrada.


Ejecutar el procedimiento almacenado PA_Aumnos que lista todos los registros de la
tabla alumnos

Ingrese a visual estudio 2012 nuevo proyecto / aplicación 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
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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -421-
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 conexión


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()
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -422-
Console.ReadLine()
End Sub
End Module

6.1.5 Procedimientos almacenados con parámetros

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 = "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()
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -423-
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
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)
)

Ménu De modo conectado con sentencias SQL de sistema de ventas


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -424-

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
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")
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -425-
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")
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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -426-
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

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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -427-

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"
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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -428-
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()
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")
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -429-
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)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module

6.1.7 ADO.NET ( de Wikipedia)

Esta tecnología es una parte del.NET Framework 3.0 (habiendo sido parte del
framework desde la versión 1.0).
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -430-

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 están incluidas en el Microsoft .NET Framework. Es
comúnmente usado por los programadores para acceder y para modificar los datos
almacenados en un Sistema Gestor de Bases de DatosRelacionales, aunque
también puede ser usado para acceder a datos en fuentes no relacionales.
ADO.NET es a veces considerado como una evolución de la tecnología ActiveX
Data Objects (ADO), pero fue cambiado tan extensivamente que puede ser
concebido como un producto enteramente nuevo.

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 común de clases de utilidad:

 Connection: Proporciona una conexión usada para comunicarse con la


fuente de datos. También actúa como Abstract Factory para los objetos
command.
 Command: Usado para realizar alguna acción en la fuente de datos, como
lectura, actualización, o borrado de datos relacionales.
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -431-
 Parameter: Describe un simple parámetro para un command. Un ejemplo
común es un parámetro 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 jerarquía de contención:

 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 cláusula "order by" de SQL) y, si se activa un filtro, filtra
los registros (como una cláusula "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 número
de DataViews adicionales, reduciendo la interacción con la base de datos
subyacente y mejorando así el desempeño.
 Un DataColumn representa una columna de la tabla,
incluyendo su nombre y tipo.
 Un objeto DataRow representa una sola fila en la tabla, y
permite leer y actualizar los valores en esa fila, así como la
recuperación de cualquier fila que esté relacionada con ella a través
de una relación 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 relación entre las tablas, tales como una
relación 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 violación 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, computación distribuida, y aplicaciones ocasionalmente conectadas
desconectados.

6.1.8 Trabajar con el proveedor de datos SQL Server


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -432-
El.Proveedor de datos de red de SQL Server es el espacio de nombres
System.Data.SqlClient.

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 sólo avance, de sólo lectura
de los resultados
SqlError Contiene información de errores de SQL Server y advertencias
SqlException Define la excepción 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)

CONECCIO
MODO N COMANDO Tipo devuelve
CONECTAD SQLCONEC SQLCOMMA EXECUTESACAL
O CION ND AR 1 solo valores
EXECUTEDATAR
      EADER varios valores
EXECUTENONQ insert,update,
      UERY delete
DESCONEC SQLCONEC SQLDATADA
TADO CION PTER    
    DATASET    

6.1.9 Mostrar información de conexión.


Escribir un programa en modo consola para mostrar información de conexión.

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim CadenaConexion As String
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -433-
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 conexión
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 conexión y vea el resultado

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


Security=True "
Podría poner la cadena de conexión 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.


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -434-

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

Una vez que haya establecido una conexión 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 ejecución 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


métodos para la creación de comandos
Crear un comando con un Constructor y Asociar un comando con una conexión
. ( Ver en el listado 2)
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -435-
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
conexión a la base de datos. Para ello, establezca la propiedad de conexión del
comando, y a fin de ahorrar recursos, varios comandos pueden utilizar la misma
conexión.

6.2.2 Configuración de la propiedad CommandText.( Asignación de texto a un


comando.)

cmd.CommandText = "select sum(monto) as total from pagos"

6.2.3 Ejecución de comandos.

Los comandos no son usados a menos que se puede ejecutar, Las diferencias entre
estos métodos dependen de los resultados esperados de la instrucción SQL. Las
consultas devuelven filas de datos (conjuntos de resultados), pero las declaraciones
INSERT, UPDATE y DELETE no. Determinar qué método utilizar teniendo en
cuenta los valores devueltos

Table 11-1. Metodos de ejecución de comandos

Si el commando retorna. . . Usted debe Usar . . .


Nothing (no es una consulta) ExecuteNonQuery
cero o mas filas ExecuteReader
XML ExecuteXmlReader

Si se quiere obtener un solo valor se debe utilizar el método ExecuteScalar de


SqlCommand para devolver uno de los resultados.

6.2.4 Utilizando el método ExecuteScalar ( retorna un solo valor).

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()
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -436-
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() sólo 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, además 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 rápido, sin memoria intermedia, sólo hacia
delante, de sólo 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 método ExecuteReader.

El objeto SqlDataReader tiene un método de lectura que obtiene cada fila a su vez y
un método GetValue que obtiene el valor de una columna de la fila.
Utilizando indizadores ordinales

Imports System.Data.SqlClient
Module Module1
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -437-
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 Module3
3
Utilizando los indizadores ordinales.

Utilice un indizador ordinal para recuperar datos de la columna del conjunto de


resultados.
rdr.GetValue(0)

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


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -438-
Utiliza el nombre de columna indexación especificando nombres de columna en
lugar de números 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 métodos 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 función de conversión 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 métodos de descriptor de acceso con tipo de
datos lector expone que se pueden utilizar si conoce el tipo específico 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

Puede listar cualquier consulta por ejemplo


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -439-

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()
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


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -440-

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
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.


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -441-
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 más.
Hay un número de métodos útiles para recuperar información de esquema o
recuperar información relacionada directamente con un conjunto de resultados. La
tabla 12-4 describe algunos de los métodos de metadatos y propiedades de un lector
de datos.

Tabla 12-4. Data Reader Metadata Propiedades y metodos

Metodo o Nombre descripción


propiedad
Depth Una propiedad que obtiene la profundidad de anidación de
la fila actual
FieldCount Una propiedad que contiene el número de columnas de la
fila actual
GetDataTypeName Un método que acepta un índice y devuelve una cadena
que contiene el nombre del tipo de datos de columna
GetFieldType Un método que acepta un índice y devuelve el tipo de
objeto de NET Framework
GetName Un método que acepta un índice y devuelve el nombre de
la columna especificada
GetOrdinal Un método que acepta un nombre de columna y devuelve
el índice de columna
GetSchema Un método 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 número de filas modificadas,
insertadas o eliminadas

Pruebe: Obtener información acerca de un conjunto de resultados con un lector de


datos. En este ejercicio, utilizará algunos de estos métodos y propiedades.

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data Source=(localdb)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -442-
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 información 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))
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 diseño 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, etcétera) conforman el esquema de la tabla.
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -443-
Para recuperar información de esquema fácilmente, puede llamar al método de
GetSchemaTable en un lector de datos. Como sugiere su nombre, este método
devuelve un objeto System.Data.DataTable, que es una representación (esquema)
de la tabla de consulta y contiene una colección de filas y columnas en forma de
objetos DataRow y DataColumn. Estas filas y columnas se devuelven como objetos
de colección por las propiedades de filas y columnas de la clase DataTable.

Sin embargo, aquí es donde generalmente se produce una ligera confusión. Los
objetos de columna de datos no son valores de columna; más bien, son definiciones
de columna que representan y controlan el comportamiento de las columnas
individuales. Puede ser colocadas a través de utilizando un indizador de nombre de
columna, y le puede decir mucho sobre el conjunto de datos.

Obtener información de esquema.


Aquí podrá ver una demostración práctica del método GetSchemaTable ( en este
caso se obtiene la información de la consulta “select * from alumnos

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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -444-
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

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)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
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)
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -445-
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
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr(i))
Next
Console.WriteLine()
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 modificación de datos. método ExecuteNonQuery.

El método 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('b9', '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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -446-
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


Tarea Inserte varios registros generado automaticamente con código
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 parámetros de comando (adicional ver en el documento)


Pruébelo: uso de parámetros 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")
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())
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -447-
cmdnon.Parameters("@codalu").Value = CodAlu
cmdnon.Parameters("@nombrealu").Value = NombreAlu
cmdnon.Parameters("@FechaNac").Value = FechaNac
Console.WriteLine("Ejecutando sentencia {0}", cmdnon.CommandText)
cmdnon.ExecuteNonQuery()
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 conexión 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 orígenes de datos. Su propósito fundamental es
proporcionar una vista relacional de los datos almacenados en una caché en
memoria.

6.5.1 Una breve introducción 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 diseño lógico de una base de datos relacional. Aprenderá a
utilizar las tablas de datos, filas de datos y columnas de datos en este capítulo.
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -448-

Figure 13-1. arquitectura de un Dataset

Una breve introducción 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 conexión 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 tubería 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 conexión, 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 parámetros (asignación de SQL y la conexión más
tarde).
• Puede pasar su constructor un comando ( cmd es un objeto SqlCommand).
• Se pueden pasar una cadena SQL y una conexión.
• Se pueden pasar una cadena SQL y una cadena de conexión.
Una breve introducción a las tablas de datos, columnas de datos y filas de
datos.
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -449-

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 través de las propiedades de filas y
columnas de la tabla de datos.

Obtener la colección 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 programación 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 continuación, mostrar su contenido.

Lista una consulta dataset con for next y mostrar el elemento de la fila y columna
determinada

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
da.Fill(ds, "pagos")
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -450-
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 podría también mostrar otras características


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)

Mostrando en forma visual

Imports System.Data.SqlClient
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -451-
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles
MyBase.Load
Dim fila, col As Integer
Dim connstring As String = "Data Source=(localdb)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
Dim sql As String = "SELECT * FROM PAGOS "
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
ListBox1.Items.Clear()
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
Dim da As SqlDataAdapter = New SqlDataAdapter(sql, conn)
Dim ds As DataSet = New DataSet
da.Fill(ds, "pagos")
ListBox1.Items.Add("Nombre de la consulta: " & sql)
ListBox1.Items.Add("Nombre de la TABLA: " & ds.Tables(0).ToString)
ListBox1.Items.Add("valores de los datos")
Dim cadena As String
Dim nfilas As Integer = ds.Tables(0).Rows.Count
Dim ncol As Integer = ds.Tables(0).Columns.Count
For fila = 0 To nfilas - 1
cadena = ""
For col = 0 To ncol - 1
cadena = cadena +
ds.Tables(0).Rows(fila).Item(col).ToString.PadRight(10)
Next col
ListBox1.Items.Add(cadena)
Next fila
ListBox1.Items.Add("Elemento de fila 2 y col 3 = " &
ds.Tables(0).Rows(2).Item(3))
ListBox1.Items.Add("modificamos elemento")
ds.Tables(0).Rows(2).Item(3) = 500
ListBox1.Items.Add("Elemento de fila 2 y col 3 = " &
ds.Tables(0).Rows(2).Item(3))
Catch eX As Exception
MsgBox("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Class

MOSTRAR EN DATAGRIDVIEW
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -452-

Imports System.Data.SqlClient
Public Class Form1
Private Sub Form1_Load1(sender As Object, e As EventArgs) Handles
MyBase.Load
Dim fila, col As Integer
Dim connstring As String = "Data Source=(localdb)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
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
da.Fill(ds, "pagos")
ListBox1.Items.Add("Nombre de la consulta: " & sql)
ListBox1.Items.Add("Nombre de la TABLA: " & ds.Tables(0).ToString)
ListBox1.Items.Add("valores de los datos")
Dim cadena As String
Dim nfilas As Integer = ds.Tables(0).Rows.Count
Dim ncol As Integer = ds.Tables(0).Columns.Count
For fila = 0 To nfilas - 1
cadena = ""
For col = 0 To ncol - 1
cadena = cadena +
ds.Tables(0).Rows(fila).Item(col).ToString.PadRight(10)
Next col
ListBox1.Items.Add(cadena)
Next fila
ListBox1.Items.Add("Elemento de fila 2 y col 3 = " &
ds.Tables(0).Rows(2).Item(3))
ListBox1.Items.Add("modificamos elemento")
ds.Tables(0).Rows(2).Item(3) = 500
ListBox1.Items.Add("Elemento de fila 2 y col 3 = " &
ds.Tables(0).Rows(2).Item(3))
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -453-
Catch eX As Exception
MsgBox("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Class

6.5.4 Mostrar todas las tablas o consultas

Imports System.Data.SqlClient
Module Module2
Sub Main()
Dim fila, col, k As Integer
Dim connstring As String = "Data Source=(localdb)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -454-
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
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 también 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


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -455-
Ejemplificaremos con arreglos
For Each element [ As datatype ] In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]

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 iteración 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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -456-

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 PARA listar una consulta

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 SI2019A\6 ADO NET\Ismael Véliz Vilca -457-
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 cómo extraer datos de un conjunto de datos. Con


frecuencia, deseará dinámicamente filtrar u ordenar los datos. En el siguiente
ejemplo, verá cómo se pueden utilizar filas de datos para ello.

filtrando y ordenando dinámicamente datos en un Dataset.

Ordenado por nro en forma descendente

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data Source=(localdb)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -458-
' displaya datos de la primera tablas
Console.WriteLine("Resultados 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 Desc"
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 cons 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
NF = ds.Tables(0).Rows.Count
NC = ds.Tables(0).Columns.Count
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -459-
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 debería 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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -460-
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
For col = 0 To ds.Tables(0).Columns.Count - 1
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -461-
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

Comparación 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


automáticamente 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 explícitamente 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 debería 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 SI2019A\6 ADO NET\Ismael Véliz Vilca -462-
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 aún es cómo un adaptador de datos se actualiza y sincroniza un origen
de datos con datos de un conjunto de datos. Tiene tres propiedades que apoyan
(análogo 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 método Update del
adaptador de datos.

Propagación 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 ,modificación en la tabla alumnos

Propiedad InsertCommand.
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -463-
El adaptador de datos utiliza la propiedad InsertCommand para insertar filas en una
tabla. Al llamar al método Update, todas las filas en la tabla de datos se buscan y se
propaga a la base de datos.

Propagación 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 dinámicamente 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 SI2019A\6 ADO NET\Ismael Véliz Vilca -464-
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 métodos para leer y escribir
en XML. Por ejemplo:

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


esquema XML utilizando métodos 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 aplicación 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.

Extracción 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 método de WriteXml del conjunto de datos o en archivos
separados mediante WriteXml() y WriteXmlSchema(). WriteXml() está sobrecargado,
y en este ejemplo mostraremos una versión 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 SI2019A\6 ADO NET\Ismael Véliz Vilca -465-
'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 código 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 extraídos XML son archivos de texto sin


formato. Puede abrir el archivo productstable.xml en cualquier editor, o incluso
utilizar el tipo o más comandos para verlo desde la línea de comandos.

Tablas de datos sin conjuntos de datos. (opcional)

Entendiendo dataset con tipo y sin tipo(opcional)

APLICACION PARA DIFERENCIAR MODO CONECTADO DEL DESCONECTADO


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -466-

MENU MODO CONECTADO EN MODO CONSOLA Y MODO FORMULARIO

CODIGO DEL MODULO 2

Module Module2
Sub listar()
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}{1} ", rdr(i), vbTab)
Next
Console.WriteLine()
End While
conn.Close()
End Sub

Sub modificar()
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -467-
conn.Open()
Console.Write("Ingrese el codigo del alumno a modificar :")
codalumno = Console.ReadLine()
Console.Write("Ingrese el NUEVO NOMBRE del alumno a modificar :")
nombrealumno = Console.ReadLine()
Console.Write("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()
End Sub
Sub agregar()
conn.Open()
Console.Write("Ingrese el codigo del alumno a Agregar :")
codalumno = Console.ReadLine()
Console.Write("Ingrese NOMBRE del alumno a insertar :")
nombrealumno = Console.ReadLine()
Console.WriteLine("Ingrese fecha de nacimiento '1/'1/1988' ")
FechaNac = Console.ReadLine()
comando.CommandText = " INSERT INTO ALUMNOS
( Codalumno,nombrealumno,fechanac) values ('" & codalumno & "' , '" &
nombrealumno & "' , '" & FechaNac & "')"
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
End Sub
Sub eliminar()
conn.Open()
Console.Write("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()
comando.CommandText = " INSERT INTO ALUMNOS
( Codalumno,nombrealumno,fechanac) values ('" & codalumno & "' , '" &
nombrealumno & "' , '" & FechaNac & "')"
conn.Close()
End Sub
End Module

CODIGO DEL MODULO 1

Imports System.Data.SqlClient
Module Module1
Public cadenaconexion As String = "Data Source=(localdb)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -468-
Public conn As SqlConnection = New SqlConnection(cadenaconexion)
Public sqlqry As String = "select count(*) from alumnos"
Public Opcion As Integer
Public codalumno As String
Public nombrealumno As String
Public FechaNac As String
Public comando As SqlCommand = New SqlCommand(sqlqry, conn)
Public rdr As SqlDataReader
Public nrocol As Integer
Public i As Integer
Sub Main()
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
listar()
Case 2
modificar()
Case 3
agregar()
Case 4
eliminar()
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

CODIGO DEL FORMULARIO

Imports System.Data.SqlClient
Public Class Form1

Private Sub BtnAgregar_Click(sender As Object, e As EventArgs) Handles


btnAgregar.Click
Try
conn.Open()
codalumno = txtCodigo.Text
nombrealumno = txtNombre.Text
FechaNac = txtFechaNac.Text
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -469-
comando.CommandText = " INSERT INTO ALUMNOS
( Codalumno,nombrealumno,fechanac) values ('" & codalumno & "' , '" &
nombrealumno & "' , '" & FechaNac & "')"
comando.ExecuteNonQuery()
conn.Close()
MsgBox(" se agrego registro en forma satisfactoria")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub BtnEditar_Click(sender As Object, e As EventArgs) Handles


btnEditar.Click
Try
conn.Open()
codalumno = txtCodigo.Text
nombrealumno = txtNombre.Text
FechaNac = txtFechaNac.Text
comando.CommandText = " UPDATE ALUMNOS SET NOMBREALUMNO
='" & nombrealumno & " ', FECHANAC=' " & FechaNac & "' WHERE CODALUMNO
='" & codalumno & " ' "
comando.ExecuteNonQuery()
MsgBox("ACTUALIZACION SATISFACTORIA")
Catch ex As Exception
MsgBox(ex.Message)
End Try
conn.Close()
End Sub

Private Sub btnEliminar_Click(sender As Object, e As EventArgs) Handles


btnEliminar.Click
Try
conn.Open()
codalumno = txtCodigo.Text
comando.CommandText = " DELETE FROM ALUMNOS WHERE
CODALUMNO = '" & codalumno & "' "
comando.ExecuteNonQuery()
conn.Close()
MsgBox(" eliminacion satisfactoria")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub btnListar_Click_1(sender As Object, e As EventArgs) Handles


btnListar.Click
conn.Open()
comando.CommandText = " SELECT * FROM ALUMNOS"
rdr = comando.ExecuteReader
nrocol = rdr.FieldCount
Dim cadena As String
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -470-
cadena = ""
For i = 0 To nrocol - 1
cadena = cadena + rdr.GetName(i) + vbTab
Next
ListBox1.Items.Add(cadena)
While (rdr.Read)
cadena = ""
For i = 0 To nrocol - 1
cadena = cadena + rdr.GetValue(i) + vbTab
Next
ListBox1.Items.Add(cadena)

End While
conn.Close()
End Sub
End Class

MENU MODO DESCONECTADO


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -471-

CODIGO DEL MODULO 2

Imports System.Data.SqlClient
Imports System.IO
Module Module2
Sub Listar()
dt = ds.Tables("alumnos")
Dim fila, col As Integer
nreg = ds.Tables(0).Rows.Count
ncol = ds.Tables(0).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 nreg - 1
For col = 0 To ncol - 1
Console.Write(" {0} ", dt.Rows(fila).Item(col))
Next
Console.WriteLine()
Next
End Sub
Sub basededatos()
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()
Select Case Opcion
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -472-
Case 1
Listar()
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
Loop Until Opcion = 6
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
Public Sub RecuperarDeMatriz(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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -473-
Dim cadena As String = ""
Dim subcadena As String
Dim pos As Integer = 0
Dim inicio As Integer = 1
cadena = srLector.ReadLine()
' recupera a partir de la segunda fila
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 leido satisfactoriamente")
srLector.Close()
End Sub

Sub ObtenerdeMatriz(A(,) As String, nf As Integer, nc As Integer)


Dim fila As Integer
Dim cbd As New SqlCommandBuilder(da)
Console.WriteLine(" nombre de la tabla {0} ", ds.Tables(0).TableName)
Dim fila1 As DataRow
For fila = 0 To nreg - 1
fila1 = ds.Tables(0).NewRow
fila1(0) = A(fila, 0)
fila1(1) = A(fila, 1)
fila1(2) = (A(fila, 2))
ds.Tables(0).Rows.Add(fila1)
Next
End Sub

Sub MostraMatriz(A(,) As String, nf As String, nc As String)


Dim fila, col As Integer
For fila = 0 To nf - 1
For col = 0 To nc - 1
Console.Write("{0}{1}", A(fila, col), vbTab)
Next
Console.WriteLine()
Next
End Sub
Sub grabar(NombreArchivo As String)
Dim fila, col As Integer
Dim Archivo As StreamWriter
Archivo = New StreamWriter(NombreArchivo)
Try
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -474-
nreg = ds.Tables(0).Rows.Count
ncol = ds.Tables(0).Columns.Count
For col = 0 To ncol - 1
Archivo.Write("{0}{1}", ds.Tables(0).Columns(col).ColumnName, vbTab)
Next
Archivo.WriteLine()
For fila = 0 To nreg - 1
For col = 0 To ncol - 1
Archivo.Write("{0}{1}", ds.Tables(0).Rows(fila).Item(col), vbTab)
Next
Archivo.WriteLine()
Next
MsgBox("Grabado satisfactoriamente")
Archivo.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Module

CODIGO DEL MODULO 1


Imports System.Data.SqlClient
Imports System.IO

Module Module1
Public maxfilas As Integer = 10
Public maxcol As Integer = 5
Public cadenaconexion As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Public conn As SqlConnection = New SqlConnection(cadenaconexion)
Public Opcion As Integer, Pos As Integer
Public codalumno As String
Public nombrealumno As String
Public FechaNac As String
Public ncol As Integer = 3
Public fila, col As Integer
Public da As SqlDataAdapter = New SqlDataAdapter("", conn)
Public ds As DataSet = New DataSet
Public dt As DataTable = New DataTable
Public filaReg As DataRow
Public nreg As Integer = 10
Public nombrearchivo As String = "E:\datos\alumnos1.txt"
Public A(maxfilas, maxcol) As String
Sub Main()
basededatos()
Console.ReadLine()
End Sub
End Module

CODIGO DEL FORMULARIO 2


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -475-

Imports System.Data.SqlClient
Public Class Frmdatos
Private Sub MostrarAlumno()
TxtCodalu.Text = ds.Tables(0).Rows(Pos).Item(0)
txtNombreAlu.Text = ds.Tables(0).Rows(Pos).Item(1)
txtFechaNac.Text = ds.Tables(0).Rows(Pos).Item(2)
lblCont.Text = (Pos).ToString & " de " & ds.Tables(0).Rows.Count
End Sub
Private Sub btnListar_Click(sender As Object, e As EventArgs) Handles
BtnListar.Click
da.SelectCommand.CommandText = "SELECT * FROM ALUMNOS "
da.Fill(ds, "ALUMNOS")
DataGridView1.DataSource = ds.Tables(0)
End Sub
Private Sub btnenviar_Click(sender As Object, e As EventArgs) Handles
BtnEnviarCambios.Click
Try
conn.Open()
Dim cbd As New SqlCommandBuilder(da)
da.Update(ds, "alumnos")
conn.Close()
MsgBox("MODIFICACION CORRECTA")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnEliminar_Click(sender As Object, e As EventArgs) Handles
btnEliminar.Click
Try
Dim res As Integer
Pos = DataGridView1.CurrentCell.RowIndex
MostrarAlumno()
' Pos = InputBox("Ingrese la fila a eliminar", "INGRESO", 2)
res = MsgBox("Realmente desea eliminar s/n", MsgBoxStyle.OkCancel)
If res = 1 Then
filaReg = ds.Tables(0).Rows(Pos)
filaReg.Delete()
MsgBox("ELIMINACION CORRECTA")
Else
MsgBox("Eliminacion cancelada ")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnEditar_Click(sender As Object, e As EventArgs) Handles
BtnEditar.Click
' Pos = DataGridView1.CurrentRow.Index
Dim res As Integer
res = MsgBox("Realmente desea modificar s/n", MsgBoxStyle.OkCancel)
If res = 1 Then
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -476-
codalumno = TxtCodalu.Text
nombrealumno = txtNombreAlu.Text
FechaNac = txtFechaNac.Text
ds.Tables(0).Rows(Pos).Item(0) = codalumno
ds.Tables(0).Rows(Pos).Item(1) = nombrealumno
ds.Tables(0).Rows(Pos).Item(2) = FechaNac
MsgBox("Modificacion realizada ")
Else
MsgBox("Modificacion cancelada ")
End If
End Sub
Sub Limpiar()
TxtCodalu.Text = ""
txtNombreAlu.Text = ""
txtFechaNac.Text = ""
TxtCodalu.Focus()
End Sub
Private Sub btnAgregar_Click(sender As Object, e As EventArgs) Handles
BtnAgregar.Click
Try
codalumno = TxtCodalu.Text
nombrealumno = txtNombreAlu.Text
FechaNac = txtFechaNac.Text
filaReg = ds.Tables(0).NewRow()
filaReg(0) = codalumno
filaReg(1) = nombrealumno
filaReg(2) = FechaNac
ds.Tables(0).Rows.Add(filaReg)
MsgBox("SE AGREGO CORRECTAMENTE")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnNuevo_Click(sender As Object, e As EventArgs) Handles
btnNuevo.Click
Limpiar()
End Sub
Private Sub DataGridView1_CellClick(sender As Object, e As
Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Pos = DataGridView1.CurrentRow.Index
MostrarAlumno()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles
MyBase.Load
da.SelectCommand.CommandText = "SELECT * FROM ALUMNOS"
da.Fill(ds, "ALUMNOS")
DataGridView1.DataSource = ds.Tables(0)
End Sub
Private Sub EliminarTodoToolStripMenuItem_Click(sender As Object, e As
EventArgs) Handles MnuEliminarTodo.Click
With ds.Tables(0)
Dim fila As Integer
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -477-
Dim filareg As DataRow
nreg = ds.Tables(0).Rows.Count
For fila = 0 To nreg - 1
filareg = ds.Tables(0).Rows(fila)
filareg.Delete()
Next
MsgBox("Operacion Realizada")
End With
End Sub
Private Sub Simular(sender As Object, e As EventArgs) Handles MnuSimular.Click
Dim i As Integer
With ds.Tables(0)
Dim fila As DataRow
For i = 0 To maxfilas - 1
fila = .NewRow
fila(0) = "A" & i
fila(1) = "Nombre " & i
fila(2) = "1/1/2001"
.Rows.Add(fila)
Next
DataGridView1.DataSource = ds.Tables(0)
MsgBox("Operacion Realizada")
End With
End Sub

Private Sub mnuGrabarEnArchivo_Click(sender As Object, e As EventArgs)


Handles mnuGrabarEnArchivo.Click
SaveFileDialog1.ShowDialog()
nombrearchivo = SaveFileDialog1.FileName
grabar(nombrearchivo)
End Sub

Private Sub RecuperarMatriz_Click(sender As Object, e As EventArgs) Handles


mnuRecuperarMatriz.Click
OpenFileDialog1.ShowDialog()
nombrearchivo = OpenFileDialog1.FileName
RecuperarDeMatriz(nombrearchivo, A, nreg, ncol)
ObtenerdeMatriz(A, nreg, ncol)
DataGridView1.DataSource = ds.Tables(0)
End Sub

Private Sub frmNormal_Load(ByVal sender As Object, ByVal e As


System.EventArgs) Handles MyBase.Load
da.Fill(ds, "Alumnos")
DataGridView1.DataSource = ds.Tables(0)
Call MostrarAlumno()
End Sub
Private Sub MoverRegistro(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPrimero.Click, BtnAnterior.Click, BtnSiguiente.Click,
btnUltimo.Click
Select Case sender.text
Case "<<"
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -478-
Pos = 0
Case "<"
If Pos > 0 Then Pos = Pos - 1
Case ">"
If Pos < ds.Tables(0).Rows.Count - 1 Then Pos = Pos + 1
Case ">>"
Pos = ds.Tables(0).Rows.Count - 1
End Select
DataGridView1.CurrentCell = DataGridView1.Rows(Pos).Cells(0)
MostrarAlumno()
EndSub
End Class

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 "
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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -479-
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

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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -480-

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

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 código 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 Parámetros 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 conexión:
Mostrar información de conexión.
Conectar a SQL Server Express con el proveedor de datos OLE DB.
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -481-

EJECUTANDO COMANDOS
Crear un comando con un Constructor.
Asociar un comando con una conexión.
Configuración de la propiedad de conexión.
Asignación de texto a un comando.
Configuración de la propiedad CommandText.
Ejecución de comandos
Metodos de ejecución de comandos
obtener un solo valor execute scalar
Ejecutar comandos con varios resultados.
ExecuteReader() la clase SqlDataReader
Ejecutar sentencias de modificación de datos método ExecuteNonQuery.
Uso de parámetros de comando
USANDO DATA READERS
Mostrar un campo , varios campos,etc de una tabla
Utilizando los indizadores ordinales.
Uso de columnas indexado por nombre
Utilizando los métodos de descriptor de acceso con tipo.
Obtener datos sobre datos.
Obtener datos acerca de las tablas.

Obtener información 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 introducción 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 dinámicamente 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.
Extracción 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 código
Ejemplo sumar los montos e,tc de los trabajadores

ELABORAR UNA APLICACIÓN EN MODO FORMULARIO


Que realice las siguientes acciones
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -482-
1. Cargar a una tabla de base de datos un archivo de texto hecho en excel
2. En un cuadro de lista cargar todas las tablas que contiene la base de datos pruebe
con la base de datos alumnos
3. Al hacer clic en el el nombre de la tabla debe mostrar los valore de la tabla
4. 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 SI2019A\6 ADO NET\Ismael Véliz Vilca -483-

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

CODIGO DEL FORMULARIO


GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -484-

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
dst.Tables.Clear()
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -485-
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
SaveFileDialog1.ShowDialog()
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -486-
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
Security=True;Connect Timeout=30"
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -487-

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 Parámetros 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 parámetros 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 información de conexión. 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 Configuración de la propiedad CommandText.( Asignación de texto a un
comando.)
6.2.3Ejecución de comandos. 392
6.2.4Utilizando el método 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 método ExecuteReader. 394
Utilizando los indizadores ordinales. 395
Uso de columnas indexado por nombre
Utilizando los métodos de descriptor de acceso con tipo. 395

6.3.3 Obtener datos sobre datos. 399


Obtener datos acerca de las tablas. 401
Obtener información de esquema. 407
6.3.4Utilizar el resultado de varios conjuntos con un lector de datos. 402
6.4 Ejecutar sentencias de modificación de datos. método 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 parámetros de comando (adicional ver en el documento) 404

6.5 USANDO DATASET Y DATAADAPTERS ( FORMA DESCONECTADA) 405


6.5.1 Una breve introducción a los adaptadores de datos.
6.5.2 Una breve introducción 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 también 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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -488-
filtrando y ordenando dinámicamente 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
Propagación 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

Clases del dia lunes 13 de 2015


'LISTAR CUALQUIER CONSULTA
Imports System.Data.SqlClient
Module Module1
Dim CadenaConexion As String
Sub Main()
CadenaConexion = "Data Source=(localdb)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
Dim CONSULTA As String
Console.WriteLine("INGRESE CONSULTA")
CONSULTA = Console.ReadLine
End Sub
End Module
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -489-

Imports System.Data.SqlClient
Module Module1
Dim Consulta As String
Dim cadena As String = "Data Source=(localdb)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
Dim conexion As SqlConnection
Dim comando As SqlCommand
Dim nc As Integer
Sub Main()
conexion = New SqlConnection(cadena)
comando = New SqlCommand("", conexion)
conexion.Open()
Do
Console.WriteLine("ingrese consulta")
Consulta = Console.ReadLine
comando.CommandText = Consulta

Dim rdr As SqlDataReader = comando.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
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -490-
Console.WriteLine()
rdr.Close()
Loop While (1)
conexion.Close()
End Sub
End Module

Imports System.Data.SqlClient

Public Class Form1


Dim Consulta As String
Dim cadena As String = "Data Source=(localdb)\MSSQLLocalDB;Initial
Catalog=ALUMNOS;Integrated Security=True;Connect
Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrit
e;MultiSubnetFailover=False"
Dim conexion As SqlConnection
Dim comando As SqlCommand
Dim nc As Integer
Dim elemento As String
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click
conexion = New SqlConnection(cadena)
comando = New SqlCommand("", conexion)
conexion.Open()
Label1.Text = "ingrese consulta"
Consulta = TextBox1.Text
comando.CommandText = Consulta
Dim rdr As SqlDataReader = comando.ExecuteReader
nc = rdr.FieldCount
elemento = ""
For i = 0 To nc - 1
elemento = elemento + rdr.GetName(i) + vbTab
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -491-
Next
ListBox1.Items.Add(elemento)
While (rdr.Read)
elemento = ""
For i = 0 To nc - 1
elemento = elemento + rdr(i).ToString + vbTab
Next
ListBox1.Items.Add(elemento)
End While
rdr.Close()
conexion.Close()
End Sub
End Class

Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=D:\DATOS\alumnos.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Dim consulta As String = "insert into pagos
(nro,fechapago,codalumno,monto,codcurso) values(1,'1/12/1987','a1',200,'a4')"
Dim comando As SqlCommand = New SqlCommand("", conn)
Dim r1, r2 As Integer
Dim codalumno As String
Try
Dim fila As Integer
conn.Open()
For fila = 1 To 100
r1 = Int(Rnd() * 6)
r2 = Int(Rnd() * 50) * 10
codalumno = "A" & r1
consulta = "insert into pagos (nro,fechapago,codalumno,monto,codcurso)
values(" _
& fila & ",'1/12/1987','" & codalumno & "'," & r2 & ",'a4')"
comando.CommandText = consulta
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
Next
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
GUIA PRACTICAS SI2019A\6 ADO NET\Ismael Véliz Vilca -492-
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim fila As Integer
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=D:\DATOS\alumnos.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('b9', 'PEPE','1/12/1987')"
Dim comando As SqlCommand = New SqlCommand("", conn)
Dim CODALUMNO As String
Dim monto As Single
Try
conn.Open()
For fila = 1 To 100
CODALUMNO = "A" & Int(Rnd() * 6)
monto = Int(Rnd() * 50) * 10
consulta = "insert into pagos (nro,fechapago,Codalumno,monto,codcurso)
values(" & _
fila & ", '12/6/2018','" & CODALUMNO & "'," & monto & ",'C1')"
comando.CommandText = consulta
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
Next
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module

Codigo de visual studio 2010


YCFHQ9DWCYDKV88T2TMH67BHP

También podría gustarte