Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-401-
Aparece lo siguiente
-402-
Ejecutar con:
-403-
-404-
-405-
Los procedimientos con parmetros de salida y los de valor de retorno se usan de forma
parecida, es decir, primero se definen, luego se ejecutan y finalmente se lee el valor devuelto
en el parmetro.
create procedure Alumnos1b
@Codalumno Nchar(10),
@Pagoscuenta int = 0 output
as
select CodAlumno,Monto
from Pagos
where Codalumno = @Codalumno;
select @PagosCuenta = count(*)
from PAGOS
where CodAlumno = @CodAlumno
return @PagosCuenta
Su ejecucin
Declare @ValorRetornado int,
@CuentaPagos int
Execute @ValorRetornado=Alumnos1b
@CodAlumno='A1',
@PagosCuenta=@CuentaPagos output
Select @CuentaPagos as '@CuentaPagos'
Select 'ValorRetorno' =@ValorRetornado
-406-
-407-
Note sp_rename funciona muy bien con la mayora de los objetos, como tablas,
columnas y otros para cambiar su nombre.
6.1.4 Trabajar con procedimientos almacenados en VB.NET.
Pruebe: Ejecutar un procedimiento almacenado sin parmetros de entrada.
Ejecutar el procedimiento almacenado PA_Aumnos que lista todos los registros de la
tabla alumnos
Ingrese a visual estudio 2012 nuevo proyecto / aplicacin de consola
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim col As Integer
Dim conn As New SqlConnection
conn.ConnectionString = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandType = CommandType.StoredProcedure
-408-
cmd.CommandText = "PA_Alumnos"
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim ncampos = rdr.FieldCount
While rdr.Read()
For col = 0 To ncampos - 1
Console.Write("{0}{1}", rdr(col), vbTab)
Next
Console.WriteLine()
End While
Console.ReadLine()
rdr.Close()
conn.Close()
End Sub
End Module
-409-
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
-410-
cmd.CommandText = "Pagos_Alumno"
Dim CodAlumno1 As SqlParameter = cmd.Parameters.Add("@CodAlumno",
SqlDbType.VarChar, 5)
CodAlumno1.Direction = ParameterDirection.Input
CodAlumno1.Value = "A1"
' create el procedimiento de salida
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim nc As Integer = rdr.FieldCount
Dim col As Integer
While rdr.Read()
For col = 0 To nc - 1
Console.Write("{0}{1}", rdr(col), vbTab)
Next
Console.WriteLine()
End While
rdr.Close()
Console.ReadLine()
End Sub
End Module
Lo mismo pero con consultas
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim codalu As String
Dim conn As New SqlConnection
conn.ConnectionString = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
Console.Write(" ingrese codigo del alumno ")
codalu = Console.ReadLine()
cmd.CommandType = CommandType.Text
| cmd.CommandText = "SELECT * FROM PAGOS WHERE CODALUMNO='" & codalu &
"' "
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim nc As Integer = rdr.FieldCount
Dim col As Integer
While rdr.Read()
For col = 0 To nc - 1
Console.Write("{0} {1}", rdr(col), vbTab)
Next
Console.WriteLine()
End While
-411-
rdr.Close()
Console.ReadLine()
End Sub
End Module
Para modificar y eliminar procedimientos use delete
6.1.6 EJEMPLO DE procedimientos almacenados en el sistema de ventas
Crear la tabla clientes
CREATE TABLE CLIENTE
(IdCliente int,
Nombre varchar(50),
Apellidos VarChar (50),
Direccion varchar(50),
Telefono varchar(9),
Dni varchar(8)
primary key (idcliente)
)
Mnu De modo conectado con sentencias SQL de sistema de ventas
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\VENTAS3.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Dim sqlqry As String = "select count(*) from cliente"
Dim Opcion As Integer
Dim codcliente As String
Dim nombrecliente As String
Dim Apellidoscliente As String
Dim Direccioncliente As String
Dim telefonocliente As String
Dim dnicliente As String
Dim comando As SqlCommand = New SqlCommand(sqlqry, conn)
Dim rdr As SqlDataReader
Dim nrocol As Integer
Dim i As Integer
Try
-412-
Do
Console.WriteLine(" 1. listar 2. modificar 3 Agregar 4 Eliminar 5 salir ")
Console.Write(" Ingrese opcion ")
Opcion = Console.ReadLine()
Select Case Opcion
Case 1
conn.Open()
Console.WriteLine("Conneccion ABIERTA.")
comando.CommandText = sqlqry
Console.WriteLine(": Numero de clientes {0}", comando.ExecuteScalar())
comando.CommandText = " SELECT * FROM cliente"
rdr = comando.ExecuteReader
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
nrocol = rdr.FieldCount
While (rdr.Read)
For i = 0 To nrocol - 1
Console.Write("{0}
", rdr.GetValue(i).ToString.PadRight(10))
Next
Console.WriteLine()
End While
conn.Close()
Case 2
conn.Open()
Console.WriteLine("Ingrese el codigo del cliente a modificar")
codcliente = Console.ReadLine()
Console.WriteLine("Ingrese el NUEVO NOMBRE del cliente a modificar")
nombrecliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Apellido a Modificar")
Apellidoscliente = Console.ReadLine()
Console.WriteLine("Ingrese la Nueva Direccion a Modificar")
Direccioncliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Telefono a Modificar")
telefonocliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Dni ")
dnicliente = Console.ReadLine()
comando.CommandText = " UPDATE CLIENTE SET idcliente= " & codcliente & _
" , nombre= '" & nombrecliente & "', apellidos= '" & Apellidoscliente &
"',Direccion = '" & _
Direccioncliente & "', telefono= '" & telefonocliente & "', dni='" & dnicliente & "'"
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
Case 3
conn.Open()
Console.WriteLine("Ingrese el codigo del cliente a Agregar")
codcliente = Console.ReadLine()
Console.WriteLine("Ingrese el NUEVO NOMBRE del cliente a agregar")
nombrecliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Apellido a agregar")
Apellidoscliente = Console.ReadLine()
Console.WriteLine("Ingrese la Nueva Direccion a agregar")
-413-
Direccioncliente = Console.ReadLine()
Console.WriteLine("Ingrese el Nuevo Telefono a agregar")
telefonocliente = Console.ReadLine()
Console.WriteLine("Ingrese el Dni a agregar")
dnicliente = Console.ReadLine()
comando.CommandText = _
" INSERT INTO CLIENTE
(Idcliente,nombre,Apellidos,direccion,telefono,dni) values ( '" & _
codcliente & "' , '" & nombrecliente & "' , '" & Apellidoscliente & "' , '" &
Direccioncliente & _
"' ,'" & telefonocliente & "' ,'" & dnicliente & "')"
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
Case 4
conn.Open()
Console.WriteLine("Ingrese el codigo del cliente a eliminar")
codcliente = Console.ReadLine()
comando.CommandText = " DELETE FROM CLIENTE WHERE Idcliente
= '" & codcliente & "' "
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
End Select
Loop Until Opcion = 5
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
procedimientos almacenados
procedimiento insertar cliente
ALTER proc insertar_cliente
@IdCliente int,
@nombre varchar (50),
@apellidos varchar (50),
@direccion varchar (100),
@telefono varchar (10),
@dni varchar (8)
as
insert into cliente (IdCliente,nombre,apellidos,direccion,telefono,dni) values
(@IdCliente,@nombre,@apellidos,@direccion,@telefono,@dni)
Procedimiento almacenado eliminar_cliente
-414-
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"
-415-
-416-
-417-
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
6.1.7 ADO.NET ( de Wikipedia)
Esta tecnologa es una parte del.NET Framework 3.0 (habiendo sido parte del framework
desde la versin 1.0).
ADO.NET es un conjunto de componentes del software que pueden ser usados por los
programadores para acceder a datos y a servicios de datos. Es una parte de la biblioteca
de clases base que estn incluidas en el Microsoft .NET Framework. Es comnmente
usado por los programadores para acceder y para modificar los datos almacenados en
un Sistema Gestor de Bases de DatosRelacionales, aunque tambin puede ser usado
para acceder a datos en fuentes no relacionales. ADO.NET es a veces considerado como
una evolucin de la tecnologa ActiveX Data Objects (ADO), pero fue cambiado tan
extensivamente que puede ser concebido como un producto enteramente nuevo.
-418-
Arquitectura[editar]
ADO.NET consiste en dos partes primarias:
Data provider[editar]
Estas clases proporcionan el acceso a una fuente de datos, como Microsoft SQL
Server y Oracle. Cada fuente de datos tiene su propio conjunto de objetos del proveedor,
pero cada uno tienen un conjunto comn de clases de utilidad:
DataSets[editar]
Los objetos DataSets, son un grupo de clases que describen una simple base de datos
relacional en memoria, fueron la estrella del show en el lanzamiento inicial (1.0) del
Microsoft .NET Framework. Las clases forman una jerarqua de contencin:
-419-
Un DataSet es llenado desde una base de datos por un DataAdapter cuyas propiedades
Connection y Command que han sido iniciados. Sin embargo, un DataSet puede guardar
su contenido a XML (opcionalmente con un esquema XSD), o llenarse a s mismo desde
un XML, haciendo esto excepcionalmente til para los servicios web, computacin
distribuida, y aplicaciones ocasionalmente conectadas desconectados.
de
-420-
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim CadenaConexion As String
CadenaConexion = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(CadenaConexion)
Try
conn.Open()
Console.WriteLine(" Conexion abierta")
'Displaya las propiedades de la conexin
Console.WriteLine("propiedades de la conexion")
Console.WriteLine("cadena de conexion: {0}", conn.ConnectionString)
Console.WriteLine("base de datos: {0}", conn.Database)
Console.WriteLine("fuente de datos: {0}", conn.DataSource)
Console.WriteLine("ServerVersion: {0}", conn.ServerVersion)
Console.WriteLine("State: {0}", conn.State)
Console.WriteLine("WorkstationId: {0}", conn.WorkstationId)
Console.WriteLine("tiempo de conexion: {0}", conn.ConnectionTimeout)
Catch e As SqlException
Console.WriteLine("Error:" & e.ToString)
Finally
conn.Close()
Console.WriteLine("Connection closed.")
End Try
Console.ReadLine()
End Sub
End Module
Inteligence sense de vb 2012 nos ayuda a obtener propiedades y metodos de un evento
-421-
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
-422-
Una vez que haya establecido una conexin a la base de datos, que desea empezar a
interactuar con l y hacerlo haciendo algo til para usted. Puede que necesite agregar,
actualizar, o eliminar algunos datos, o tal vez modificar la base de datos de alguna otra
forma, generalmente mediante la ejecucin de una consulta. Cualquiera que sea la tarea,
inevitablemente implicar un comando.
6.2.1 Creando un comando
Puede crear un comando utilizando el constructor SqlCommand o utilizando mtodos para
la creacin de comandos
Crear un comando con un Constructor y Asociar un comando con una conexin
. ( Ver en el listado 2)
Dim cmd As SqlCommand = New SqlCommand("select count(*) from pagos", con)
para ejecutar en una base de datos, cada comando debe estar asociado con una
conexin a la base de datos. Para ello, establezca la propiedad de conexin del comando,
y a fin de ahorrar recursos, varios comandos pueden utilizar la misma conexin.
6.2.2 Configuracin de la propiedad CommandText.( Asignacin de texto a un
comando.)
cmd.CommandText = "select sum(monto) as total from pagos"
6.2.3 Ejecucin de comandos.
Los comandos no son usados a menos que se puede ejecutar, Las diferencias entre
estos mtodos dependen de los resultados esperados de la instruccin SQL. Las
consultas devuelven filas de datos (conjuntos de resultados), pero las declaraciones
INSERT, UPDATE y DELETE no. Determinar qu mtodo utilizar teniendo en cuenta los
valores devueltos
Table 11-1. Metodos de ejecucin de comandos
Si el commando retorna. . .
Nothing (no es una consulta)
cero o mas filas
XML
-423-
Imports System.Data.SqlClient
Module Module1
Dim cadenaConexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Sub Main()
Dim con As SqlConnection = New SqlConnection(cadenaConexion)
Dim cmd As SqlCommand = New SqlCommand("select count(*) from pagos", con)
Console.WriteLine("Comando creado y conectado .")
Try
con.Open()
Console.WriteLine("numero de pagos {0}", cmd.ExecuteScalar())
cmd.CommandText = "select sum(monto) as total from pagos"
Dim total As Single = cmd.ExecuteScalar()
Console.WriteLine("Total de pagos {0} ", total)
cmd.CommandText = "select * from alumnos"
Console.WriteLine("Total de pagos {0} ", cmd.ExecuteScalar())
Catch ex As SqlException
Console.WriteLine(ex)
Finally
con.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
ExecuteScalar() slo devuelve la primera fila del resultado y omite el resto.
6.3. CAPITULO 12 USANDO DATA READERS
6.3.1 Comprender los lectores de datos en General.
El tercer componente de un proveedor de datos, adems de conexiones y comandos, es
el lector de datos. Una vez que se haya conectado a una base de datos y se necesita
acceder alguna foma de conjunto de resultados. Aqu es donde entra el lector de datos
Un lector de datos es un flujo conectado rpido, sin memoria intermedia, slo hacia
delante, de slo lectura que recupera datos por fila. Lee una fila en un momento en que
recorre un conjunto de resultados.
ExecuteReader() devuelve un lector de datos, una instancia de la clase SqlDataReader
6.3.2 Utilizando el mtodo ExecuteReader.
El objeto SqlDataReader tiene un mtodo de lectura que obtiene cada fila a su vez y un
mtodo GetValue que obtiene el valor de una columna de la fila.
Utilizando indizadores ordinales
-424-
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = _
"Data Source=(LocalDB)\v11.0; AttachDbFilename=E:\DATOS\ALUMNOS.mdf;
Integrated Security=True;Connect Timeout=30"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Dim nc As Integer
Dim cmd As SqlCommand = New SqlCommand("select * from pagos", con)
Try
con.Open()
Dim rdr As SqlDataReader = cmd.ExecuteReader
nc = rdr.FieldCount
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr.GetName(i))
Next
Console.WriteLine()
While (rdr.Read)
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr(i))
Next
Console.WriteLine()
End While
rdr.Close()
cmd.CommandText = "select sum (monto) as total from pagos "
Dim suma As Single = cmd.ExecuteScalar()
Console.WriteLine("total pagos {0}", suma)
Catch ex As SqlException
Console.WriteLine(ex)
Finally
con.Close()
End Try
Console.ReadLine()
End Sub
End Module
Utilizando los indizadores ordinales.
Utilice un indizador ordinal para recuperar datos de la columna del conjunto de
resultados.
rdr.GetValue(0)
-425-
-426-
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()
-427-
End Try
con.Open()
cmd.CommandText = "select sum (monto) as total from pagos "
Dim suma As Single = cmd.ExecuteScalar()
Console.WriteLine("total pagos {0}", suma)
con.Close()
Console.ReadLine()
End Sub
End Module
Usando varios comandos abriendo y cerrando el data reader
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Dim nc As Integer
Dim comando1 As SqlCommand = New SqlCommand("select * from pagos", con)
Try
con.Open()
Console.WriteLine(" consulta {0} ", comando1.CommandText)
Dim rdr1 As SqlDataReader = comando1.ExecuteReader
nc = rdr1.FieldCount
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr1.GetName(i))
Next
Console.WriteLine()
While (rdr1.Read)
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr1(i))
Next
Console.WriteLine()
End While
rdr1.Close()
comando1.CommandText = "select * from alumnos"
Console.WriteLine(" consulta {0} ", comando1.CommandText)
rdr1 = comando1.ExecuteReader
nc = rdr1.FieldCount
-428-
For i = 0 To nc - 1
Console.Write("{0,10} ", rdr1.GetName(i))
Next
Console.WriteLine()
While (rdr1.Read)
For i = 0 To nc - 1
Console.Write("{0,10} ", rdr1(i))
Next
Console.WriteLine()
End While
Catch ex As SqlException
Console.WriteLine(ex)
Finally
con.Close()
End Try
Console.ReadLine()
End Sub
End Module
6.3.3 Obtener datos sobre datos.
Hasta ahora, todo lo que has hecho es recuperar datos de un origen de datos. Una vez
que tenga un lector de datos poblada en sus manos, puede hacer mucho ms. Hay un
nmero de mtodos tiles para recuperar informacin de esquema o recuperar
informacin relacionada directamente con un conjunto de resultados. La tabla 12-4
describe algunos de los mtodos de metadatos y propiedades de un lector de datos.
Tabla 12-4. Data Reader Metadata Propiedades y metodos
Metodo o propiedad Nombre descripcin
Depth
Una propiedad que obtiene la profundidad de anidacin de la
fila actual
FieldCount
Una propiedad que contiene el nmero de columnas de la fila
actual
GetDataTypeName
Un mtodo que acepta un ndice y devuelve una cadena que
contiene el nombre del tipo de datos de columna
GetFieldType
Un mtodo que acepta un ndice y devuelve el tipo de objeto
de NET Framework
GetName
Un mtodo que acepta un ndice y devuelve el nombre de la
columna especificada
GetOrdinal
Un mtodo que acepta un nombre de columna y devuelve el
ndice de columna
GetSchema
Un mtodo que devuelve los metadatos de columna de tabla
HasRows
Una propiedad que indica si el lector de datos tiene filas
RecordsAffected
Una propiedad que obtiene el nmero de filas modificadas,
insertadas o eliminadas
Pruebe: Obtener informacin acerca de un conjunto de resultados con un lector de datos.
En este ejercicio, utilizar algunos de estos mtodos y propiedades.
-429-
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "select nro , codalumno, fechapago , monto, codcurso from pagos"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Try
conn.Open()
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
'obteniendo nombres de las columnas
Console.WriteLine("Column Name:{0} {1}", rdr.GetName(0).PadRight(20),
rdr.GetName(1))
'obteniendo tipos de datos de las columnas
Console.WriteLine("Data Type:{0} {1}", rdr.GetDataTypeName(0).PadRight(20), _
rdr.GetDataTypeName(1))
Console.WriteLine()
While (rdr.Read)
' obteniendo valores de las columnas para todas las filas
Console.WriteLine("{0} {1} {2} {3}", rdr.GetInt32(0), rdr.GetString(1),
rdr.GetDateTime(2), rdr.GetDecimal(3))
End While
'obteniendo numero de columnas
Console.WriteLine()
Console.WriteLine("Numbre de ls columnas en la fila {0}", rdr.FieldCount)
'obteniendo informacin acerca de cada columna
Console.WriteLine(" nombre columna '{0}' indice {1} y el tipo de objeto {2} ",
rdr.GetName(0), rdr.GetOrdinal("Nro"), rdr.GetFieldType(0))
Console.WriteLine(" nombre columna ' {0} ' indice {1} y el tipo de objeto {2} ",
rdr.GetName(1), rdr.GetOrdinal("CodAlumno"), rdr.GetFieldType(1))
Console.WriteLine(" nombre columna ' {0} ' indice {1} y el tipo de objeto {2} ",
rdr.GetName(2), rdr.GetOrdinal("Fechapago"), rdr.GetFieldType(2))
Console.WriteLine(" nombre columna ' {0} ' indice {1} y el tipo de objeto {2} ",
rdr.GetName(3), rdr.GetOrdinal("Monto"), rdr.GetFieldType(3))
-430-
-431-
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "select * from alumnos"
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
'almacenando esquema de alumnos en data table
Dim schema As DataTable = rdr.GetSchemaTable
Dim row As DataRow
For Each row In schema.Rows
Dim col As DataColumn
For Each col In schema.Columns
Console.WriteLine _
((col.ColumnName + " = " + row(col).ToString))
Next col
Console.WriteLine("----------------")
Next row
rdr.Close()
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
-432-
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql1 As String = "SELECT * FROM ALUMNOS "
Dim sql2 As String = "SELECT * FROM PAGOS "
Dim sql3 As String = "SELECT * FROM CURSOS "
Dim sql4 As String = "select codalumno ,count(monto) as cant,sum(monto) as total
from pagos group by codalumno"
Dim sql As String = sql1 + sql2 + sql3 + sql4
Dim nc As Integer
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
Dim rdr As SqlDataReader = cmd.ExecuteReader
Dim contador As Integer = 0
Do
Console.WriteLine("TABLA {0} ", contador)
nc = rdr.FieldCount
For i = 0 To nc - 1
Console.Write("{0,8} ", rdr.GetName(i))
Next
Console.WriteLine()
While rdr.Read()
' imprime una fila en el tiempo
Console.WriteLine("{0} : {1} {2}", rdr(0), rdr(1), rdr(2))
-433-
End While
Console.WriteLine("".PadLeft(60, "=".ToString))
contador = contador + 1
Loop While rdr.NextResult()
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
6.4 Ejecutar sentencias de modificacin de datos. mtodo ExecuteNonQuery.
El mtodo ExecuteNonQuery del comando ejecuta instrucciones SQL en lugar de
consultas.
1. Insertar un registro
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Dim consulta As String = "insert into alumnos (Codalumno,nombrealumno,fechanac)
values('A9', 'PEPE','1/12/1987')"
Dim comando As SqlCommand = New SqlCommand("", conn)
Try
conn.Open()
comando.CommandText = consulta
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
2. Vea la base de alumnos y la tabla alumnos debe aparecer el datos insertado
-434-
-435-
-436-
-437-
Una breve introduccin a las tablas de datos, columnas de datos y filas de datos.
Una tabla de datos es una instancia de la clase System.Data.DataTable. Es
conceptualmente similar a una tabla relacional. Como se muestra en la figura 13-1, una
tabla de datos tiene colecciones de datos filas y columnas de datos. Puede acceder a
estas colecciones anidadas a travs de las propiedades de filas y columnas de la tabla de
datos.
Obtener la coleccin de columnas de datos utilizando la propiedad de las columnas de la
tabla de datos, cuya indizador acepta un nombre de columna o un ndice de base cero,
por ejemplo (donde dt es una tabla de datos):
Dim col As DataColumn=dt.Columns("FechaNac")
Dim col As DataColumn=dt.Column(2)
Una fila de datos representa los datos de una fila. Mediante programacin puede agregar,
actualizar o eliminar filas en una tabla de datos. Para acceder a las filas de una tabla de
datos, utilice su propiedad Rows, cuya indizador acepta un ndice de base cero, por
ejemplo (donde dt es una tabla de datos):
Dim row As DataRow=dt.Rows(2)
6.5.3 Llenar un Dataset con un adaptador de datos. crear un conjunto de datos,
rellenarlo con un adaptador de datos y, a continuacin, mostrar su contenido.
Lista una consulta dataset con for next y
determinada
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
-438-
da.Fill(ds, "pagos")
Console.WriteLine("Nombre de la consulta: {0}", sql)
Console.WriteLine("nombre de la tabla: {0}", ds.Tables(0))
Console.WriteLine("valores de los datos")
Dim nfilas As Integer = ds.Tables(0).Rows.Count
Dim ncol As Integer = ds.Tables(0).Columns.Count
For fila = 0 To nfilas - 1
For col = 0 To ncol - 1
Console.Write(" {0}", ds.Tables(0).Rows(fila).Item(col).ToString.PadRight(10))
Next col
Console.WriteLine()
Next fila
Console.WriteLine("Elemento de fila 2 y col 3 = {0}", ds.Tables(0).Rows(2).Item(3))
Console.WriteLine("modificamos elemento")
ds.Tables(0).Rows(2).Item(3) = 500
Console.WriteLine("Elemento de fila 2 y col 3 = {0}", ds.Tables(0).Rows(2).Item(3))
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
Se podra tambin mostrar otras caractersticas
Console.WriteLine("nombre de la columna 0 {0}", ds.Tables(0).Columns(0).ColumnName)
Console.WriteLine("nombre de la columna 0 {0}",
ds.Tables(0).Columns(0).DataType)
-439-
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim fila, col, k As Integer
Dim connstring As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "SELECT * FROM ALUMNOS;SELECT * FROM
PAGOS;SELECT * FROM CURSOS "
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter(sql, conn)
Dim ds As DataSet = New DataSet
da.Fill(ds, "pagos")
ds.Tables(0).TableName = "alumnos"
ds.Tables(1).TableName = "cursos"
ds.Tables(2).TableName = "pagos"
Console.WriteLine("Nombre de la consulta: {0}", sql)
Dim ntablas As Integer = ds.Tables.Count
Dim nfilas As Integer
Dim ncol As Integer
For k = 0 To ntablas - 1
Console.WriteLine(" TABLA: {0}", ds.Tables(k))
Console.WriteLine("=============")
nfilas = ds.Tables(k).Rows.Count
ncol = ds.Tables(k).Columns.Count
For i = 0 To ncol - 1
-440-
Console.Write(" {0}",
ds.Tables(k).Columns(i).ColumnName.ToString.PadRight(12))
Next i
Console.WriteLine()
For fila = 0 To nfilas - 1
For col = 0 To ncol - 1
Console.Write(" {0}",
ds.Tables(k).Rows(fila).Item(col).ToString.PadRight(12))
Next col
Console.WriteLine()
Next fila
Next k
Console.WriteLine("Elemento de la tabla 1 fila 2 y col 3 = {0}",
ds.Tables(1).Rows(2).Item(3))
Console.WriteLine("modificamos elemento")
ds.Tables(1).Rows(2).Item(3) = 500
Console.WriteLine("Elemento de la tabla 1 fila 2 y col 3 = {0}",
ds.Tables(1).Rows(2).Item(3))
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
Puede tambin poblar el dataset de la siguiente manera
Dim sql As String
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
conn.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter("", conn)
Dim ds As DataSet = New DataSet
da.SelectCommand.CommandText = "SELECT * FROM ALUMNOS"
da.Fill(ds, "alumnos")
da.SelectCommand.CommandText = "SELECT * FROM PAGOS"
da.Fill(ds, "pagos")
da.SelectCommand.CommandText = "SELECT * FROM CURSOS"
da.Fill(ds, "cursos")
Console.WriteLine("Nombre de la consulta 2: {0}",
da.SelectCommand.CommandText)
6.6 Ejemplo de for each y for next
Ejemplificaremos con arreglos
For Each element [ As datatype ] In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
Module Module1
Sub Main()
Dim A() As Integer = {10, 20, 30, 40, 50}
Dim i As Integer, nro As Integer
Console.WriteLine(" Mostrando con for next")
For i = 0 To 4
Console.Write(A(i).ToString.PadRight(10))
Next i
Console.WriteLine()
Console.WriteLine(" Mostrando con for each")
For Each nro In A
Console.Write(nro.ToString.PadRight(10))
Next
Console.ReadLine()
End Sub
End Module
Ejemplo 2
Imports System.Data.SqlClient
Module Module1
Sub Main()
' crear un array y rellenarlo con valores
Dim lsColores() As String = {"Azul", "Verde", "Marino", "Violeta"}
Dim lsColor As String
' en cada iteracin se obtiene un elemento
' del array lsColores, y se guarda en la variable lsColor
For Each lsColor In lsColores
Console.Write("{0} ", lsColor)
Next
Console.ReadLine()
End Sub
End Module
-441-
-442-
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
-443-
da.Fill(ds, "PAGOS")
'displaya los datos
Dim dt As DataTable = ds.Tables("PAGOS")
Dim row As DataRow
For Each row In dt.Rows
Dim col As DataColumn
For Each col In dt.Columns
Console.Write(row(col).ToString.PadRight(12))
Next col
Console.WriteLine()
Next row
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
6.7 Filtrar y ordenar en un conjunto de datos.
En el ejemplo anterior, se vio cmo extraer datos de un conjunto de datos. Con
frecuencia, desear dinmicamente filtrar u ordenar los datos. En el siguiente ejemplo,
ver cmo se pueden utilizar filas de datos para ello.
filtrando y ordenando dinmicamente datos en un Dataset.
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim cadenaconexion As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql1 As String = "select nro, codalumno, Monto from pagos"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Try
con.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter
da.SelectCommand = New SqlCommand(sql1, con)
Dim ds As DataSet = New DataSet
da.Fill(ds, "pagos")
' obtiene la coleccion de la tablas
Dim dtc As DataTableCollection = ds.Tables
' displaya datos de la primera tablas
-444-
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
-445-
NF = ds.Tables(0).Rows.Count
NC = ds.Tables(0).Columns.Count
For col = 0 To NC - 1
Console.Write("{0} ", ds.Tables(0).Columns(col).ColumnName)
Next col
Console.WriteLine()
For fila = 0 To NF - 1
For col = 0 To NC - 1
Console.Write(" {0} ", ds.Tables(0).Rows(fila).Item(col))
Next col
Console.WriteLine()
Next fila
Catch e As Exception
Console.WriteLine("Error Occurred:" & e.ToString)
Finally
con.Close()
End Try
Console.ReadLine()
End Sub
End Module
Mostrar todos los registros de filtrado por codigo del alumno y ordenado por numero
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim sql As String = "select * from alumnos "
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
Dim da As New SqlDataAdapter()
da.SelectCommand = New SqlCommand(sql, conn)
Dim ds As New DataSet()
da.Fill(ds, "alumnos")
Dim dt As DataTable = ds.Tables("alumnos")
' La columna Codalumno debera ser nullable
dt.Columns("codalumno").AllowDBNull = True
dt.Rows(0)("NombreAlumno") = "ALEJANDRO"
' add a row
Dim newRow As DataRow = dt.NewRow()
newRow("Codalumno") = "A9"
newRow("NombreAlumno") = "MARIA"
-446-
newRow("FechaNac") = "1/1/1987"
dt.Rows.Add(newRow)
' display rows
Dim row As DataRow
For Each row In dt.Rows
Console.WriteLine("{0} {1} {2}", row("codalumno").ToString().PadLeft(5),
row("nombrealumno").ToString().PadRight(20), row("fechanac").ToString.PadRight(40))
Next row
Catch e As Exception
Console.WriteLine("Error: " + e.ToString)
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
Sin filtro ordenado por monto ( muestra todos los registros)
For Each row In dtc("pagos").Select("", "Monto")
Sin filtro ordenado por monto en forma descendente
For Each row In dtc("pagos").Select("", "Monto Desc")
Filtrado por codigo de alumno y ordenado por fechapago
For Each row In dtc("pagos").Select("codalumno='A1'", "FECHAPAGO Desc")
Si no abre ni se cierra la conexion funciona igual ( es modo desconectado)
NOTA se puede realizar lo mismo con
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim fila As Integer, col As Integer
Dim cadenaconexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\alumnos.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim sql1 As String = "select nro, codalumno, Monto from pagos where
codalumno='A1' order by Nro Asc"
Dim con As SqlConnection = New SqlConnection(cadenaconexion)
Try
con.Open()
Dim da As SqlDataAdapter = New SqlDataAdapter
da.SelectCommand = New SqlCommand(sql1, con)
Dim ds As DataSet = New DataSet
da.Fill(ds, "pagos")
For col = 0 To ds.Tables(0).Columns.Count - 1
Console.Write("{0}",
ds.Tables(0).Columns(col).ColumnName.ToString.PadRight(12))
Next
Console.WriteLine()
For fila = 0 To ds.Tables(0).Rows.Count - 1
-447-
-448-
-449-
El adaptador de datos utiliza la propiedad InsertCommand para insertar filas en una tabla.
Al llamar al mtodo Update, todas las filas en la tabla de datos se buscan y se propaga a
la base de datos.
Propagacin de nuevas filas de conjunto de datos a un origen de datos. Vamos a
propagar una nueva fila a la base de datos,
Propiedad DeleteCommand.
Utilice la propiedad DeleteCommand para ejecutar instrucciones SQL y eliminar.
En este ejemplo, podr modificar de nuevo para eliminar una fila de la base de datos.
Constructores de comando.
Para poder generar dinmicamente instrucciones INSERT, DELETE y UPDATE, el
generador de comando utiliza la propiedad SelectCommand del adaptador de datos para
extraer metadatos de la tabla de base de datos.
Utilizando SqlCommandBuilder.
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connstring As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30"
Dim qry As String = "select * from alumnos"
Dim conn As SqlConnection = New SqlConnection(connstring)
Try
Dim da As New SqlDataAdapter()
da.SelectCommand = New SqlCommand(qry, conn)
'create command builder
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da)
Dim ds As New DataSet()
da.Fill(ds, "alumnos")
Dim dt As DataTable = ds.Tables("alumnos")
Dim newRow As DataRow = dt.NewRow()
newRow("codalumno") = "A7"
newRow("nombrealumno") = "MARTIN"
newRow("fechaNac") = "1/1/2007"
dt.Rows.Add(newRow)
Dim row As DataRow
For Each row In dt.Rows
Console.WriteLine("{0} {1} {2}", _
row("codalumno").ToString().PadRight(15), _
-450-
row("nombrealumno").ToString().PadLeft(20), row("fechanac"))
Next row
da.Update(ds, "alumnos")
Catch e As Exception
Console.WriteLine(("Error: " + e.ToString))
Finally
conn.Close()
End Try
Console.ReadLine()
End Sub
End Module
6.8.3 Utilizando conjuntos de datos y XML.
XML es el medio fundamental para transferencia de datos en.ADO.NET. De hecho, XML
es una base importante para ADO.NET. Conjuntos de datos organizan datos internamente
en formato XML y tienen una variedad de mtodos para leer y escribir en XML. Por
ejemplo:
-451-
-452-
-453-
comando.ExecuteNonQuery()
conn.Close()
Case 4
conn.Open()
Console.WriteLine("Ingrese el codigo del alumno a eliminar")
codalumno = Console.ReadLine()
comando.CommandText = " DELETE FROM ALUMNOS WHERE
CODALUMNO = '" & codalumno & "' "
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
conn.Close()
End Select
Loop Until Opcion = 5
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
-454-
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 "
-455-
Imports System.Data.SqlClient
-456-
Module Module1
Sub Main()
Dim cadenaconexion As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Dim conn As SqlConnection = New SqlConnection(cadenaconexion)
Dim Opcion As Integer, Pos As Integer
Dim codalumno As String
Dim nombrealumno As String
Dim FechaNac As String
'Dim comando As SqlCommand = New SqlCommand("", conn)
Dim nfilas As Integer, ncol As Integer, i As Integer
Dim fila, col As Integer
Dim da As SqlDataAdapter = New SqlDataAdapter("", conn)
Dim ds As DataSet = New DataSet
Dim dt As DataTable = New DataTable
Dim filaReg As DataRow
Try
da.SelectCommand.CommandText = "SELECT * FROM ALUMNOS "
da.Fill(ds, "ALUMNOS")
dt = ds.Tables("alumnos")
Do
Console.WriteLine(" 1. listar 2. modificar 3 Agregar 4 Eliminar 5 Enviar Cambios 6 salir ")
Console.WriteLine(" Ingrese opcion ")
Opcion = Console.ReadLine()
-457-
-458-
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
-459-
Practica 4
PROCEDIMIENTOS ALMACENADOS(opcional)
Crear un procedimiento almacenado con visual estudio 2008 y ejecutarlo
Crear y ejecutar procedimientos almacenados con SQLserver 2005
Mostrar definiciones de procedimientos almacenados.
Procedimientos con Parmetros de Salida y Valor de Retorno
Trabajar con procedimientos almacenados en VB.NET.
CONOCIENDO A ADO.NET.
Trabajar con el proveedor de datos SQL Server
Listar la tabla alumnos usando proveedor de datos SQLServer
Listar la tabla alumnos usando proveedor de datos OLEDB
Listar la tabla alumnos usando proveedor de datos ODBC
HACIENDO CONEXIONES
escribir un programa muy simple, para abrir y comprobar una conexin:
Mostrar informacin de conexin.
Conectar a SQL Server Express con el proveedor de datos OLE DB.
EJECUTANDO COMANDOS
Crear un comando con un Constructor.
Asociar un comando con una conexin.
Configuracin de la propiedad de conexin.
Asignacin de texto a un comando.
Configuracin de la propiedad CommandText.
Ejecucin de comandos
Metodos de ejecucin de comandos
obtener un solo valor execute scalar
Ejecutar comandos con varios resultados.
ExecuteReader() la clase SqlDataReader
Ejecutar sentencias de modificacin de datos mtodo ExecuteNonQuery.
Uso de parmetros de comando
USANDO DATA READERS
-460-
1.
2.
3.
4.
-461-
-462-
Imports System.IO
Module Module2
Public Const maxfilas = 10, maxcol = 10
Public A(maxfilas, maxcol) As String
Public nf As Integer = 5
Public nc As Integer = 3
Public nombreArchivo As String
Sub RecuperarMatriz(ByVal nombrearchivo As String, ByRef A(,) As String, ByRef nf As
Integer, ByVal nc As Integer)
Dim srLector As StreamReader
srLector = New StreamReader(nombrearchivo)
Dim fila As Integer = 0, col As Integer
Dim cadena As String = ""
Dim subcadena As String
Dim pos As Integer = 0
Dim inicio As Integer = 1
cadena = srLector.ReadLine()
Do While Not (cadena Is Nothing)
cadena = cadena & Chr(9)
inicio = 1
For col = 0 To nc - 1
pos = InStr(inicio, cadena, Chr(9))
subcadena = Mid(cadena, inicio, pos - inicio)
A(fila, col) = subcadena
inicio = pos + 1
Next
fila = fila + 1
cadena = srLector.ReadLine()
Loop
nf = fila
Console.WriteLine("Archivo {0} leido satisfactoriamente", nombrearchivo)
srLector.Close()
End Sub
End Module
-463-
-464-
dst.Tables.Clear()
indice = ListBox1.SelectedIndex
nombre = ListBox1.Items(indice)
TextBox1.Text = nombre
consulta = " select * from " & nombre
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles
btnSQL.Click
Try
consulta = TextBox1.Text
dst.Tables.Clear()
DataGridView1.Columns.Clear()
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
Catch EX As SqlException
MsgBox(EX)
End Try
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles
btnMatriculadosPorCurso.Click
ListBox2.Items.Clear()
dst.Tables.Clear()
DataGridView1.Columns.Clear()
consulta = "SELECT DISTINCT CODCURSO FROM PAGOS"
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
For fila = 0 To dst.Tables(0).Rows.Count - 1
ListBox2.Items.Add(dst.Tables(0).Rows(fila).Item(0))
Next
End Sub
Private Sub ListBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As
EventArgs) Handles ListBox2.SelectedIndexChanged
dst.Tables.Clear()
DataGridView1.Columns.Clear()
indice = ListBox2.SelectedIndex
CodCurso = ListBox2.Items(Indice)
TextBox1.Text = CODCURSO
consulta = " select * from pagos where codcurso like '" & CodCurso & "'"
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
End Sub
Private Sub btnGrabarMatriculados_Click(ByVal sender As Object, ByVal e As
EventArgs) Handles btnGrabarMatriculados.Click
-465-
SaveFileDialog1.ShowDialog()
Dim NombreArchivo As String = SaveFileDialog1.FileName
Dim Escritor As New StreamWriter(NombreArchivo)
DataGridView1.Columns.Clear()
For K = 0 To ListBox2.Items.Count - 1
dst.Tables.Clear()
dst2.Tables.Clear()
CodCurso = ListBox2.Items(K)
TextBox1.Text = CodCurso
consulta = " select * from pagos where codcurso like '" & CodCurso & "'"
dap1.SelectCommand.CommandText = consulta
dap1.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
consulta2 = " select nombrecurso from cursos where codcurso = '" & CodCurso & "'"
dap2.SelectCommand.CommandText = consulta2
dap2.Fill(dst2, "CONSULTA1")
Nombrecurso = dst2.Tables("CONSULTA1").Rows(0).Item(0)
TextBox1.Text = Nombrecurso
Escritor.WriteLine("{0}{1}{2}", CodCurso, Chr(9), Nombrecurso)
For col = 0 To dst.Tables(0).Columns.Count - 1
Escritor.Write("{0}{1}", dst.Tables(0).Columns(col).ColumnName, Chr(9))
Next
Escritor.WriteLine()
For fila = 0 To dst.Tables(0).Rows.Count - 1
For col = 0 To dst.Tables(0).Columns.Count - 1
Escritor.Write("{0}{1}", dst.Tables(0).Rows(fila).Item(col), Chr(9))
Next
Escritor.WriteLine()
Next
Escritor.WriteLine()
Next
Escritor.Close()
End Sub
End Class
Pruebe con la base de datos northwnd.mdf
Dim CadenaConexion As String = "Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\DATOS\northwnd.mdf;Integrated
-466-
Securit
y=True;Connect Timeout=30"
Como eliminar base de datos del servidor con SqlServer
CAPITULO 6 USANDO PROCEDIMIENTOS ALMACENADOS
6.1 CREAR PROCEDIMIENTOS ALMACENADOS CON LA BASE DE DATOS ALUMNOS
379
6.1.1 Procedimientos con Parmetros de Salida y Valor de Retorno 383
6.1.2 Mostrar definiciones de procedimientos almacenados. 384
6.1.3 Cambiar el nombre de procedimientos almacenados. 385
6. 1-4Trabajar con procedimientos almacenados en VB.NET.
6.1.5 Procedimientos almacenados con parmetros 187
6.1.6 EJERMPLOD E procedimiento almacenamiento en sistema de centas
Crear la tabla y agregar porcediietno, etc
6.1.7 ADO.NET ( de Wikipedia) 386
6.1.8Trabajar con el proveedor de datos SQL Server 390
6.1.9 Mostrar informacin de conexin. 390
6.1.10Conectar a SQL Server Express con OleDbConnection. ( cambio que se debe
hacer) 392
6.2 CAPITULO 11 EJECUTANDO COMANDOS 392
6.2.1 Creando un comando
6.2.2 Configuracin de la propiedad CommandText.( Asignacin de texto a un comando.)
6.2.3Ejecucin de comandos. 392
6.2.4Utilizando el mtodo ExecuteScalar ( retorna un solo valor).393
6.3 CAPITULO 12 USANDO DATA READERS 394
6.3.1Comprender los lectores de datos en General.
6.3.2 Utilizando el mtodo ExecuteReader. 394
Utilizando los indizadores ordinales. 395
Uso de columnas indexado por nombre
Utilizando los mtodos de descriptor de acceso con tipo. 395
6.3.3 Obtener datos sobre datos. 399
Obtener datos acerca de las tablas. 401
Obtener informacin de esquema. 407
-467-
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim conn As New SqlConnection
conn.ConnectionString = _
"Data Source=(LocalDB)\v11.0; " _
& "AttachDbFilename=E:\DATOS\ALUMNOS.mdf;" _
& "Integrated Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "PA_Alumnos12"
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim ncampos = rdr.FieldCount
Dim col As Integer
While rdr.Read()
For col = 0 To ncampos - 1
Console.Write("{0} {1} ", rdr(col), vbTab)
Next
Console.WriteLine()
End While
Console.ReadLine()
rdr.Close()
conn.Close()
End Sub
End Module
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim conn As New SqlConnection
conn.ConnectionString = _
"Data Source=(LocalDB)\v11.0; " _
& "AttachDbFilename=E:\DATOS\ALUMNOS.mdf;" _
& "Integrated Security=True;Connect Timeout=30"
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandType = CommandType.Text
cmd.CommandText = "SELECT CODALUMNO,SUM(MONTO) " _
& " AS TOTAL FROM PAGOS
GROUP BY CODALUMNO "
Dim rdr As SqlDataReader = cmd.ExecuteReader()
Dim ncampos = rdr.FieldCount
Dim col As Integer
While rdr.Read()
For col = 0 To ncampos - 1
Console.Write("{0} {1} ", rdr(col), vbTab)
Next
Console.WriteLine()
End While
Console.ReadLine()
rdr.Close()
conn.Close()
End Sub
End Module
-468-