Si2011a 4ado Modo Consola (1)

112
Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -191- 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 . PROCEDIMIENTOS ALMACENADOS CON LA BASE DE DATOS ALUMNOS 1 Crear un procedimiento almacenado que seleccione todos los registros de la tabla alumnos seleccione procedimiento almacenado y luego agregar nuevo procedimiento almacenado Por defecto aparece lo siguiente Los comentarios en un procedimiento almacenado van entre /* comentario */ Modifique el procedimiento a CREATE PROCEDURE LISTAALUMNOS AS SELECT * from Alumnos

Transcript of Si2011a 4ado Modo Consola (1)

Page 1: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -191-

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.

PROCEDIMIENTOS ALMACENADOS CON LA BASE DE DATOS ALUMNOS

1 Crear un procedimiento almacenado que seleccione todos los registros de la tabla alumnos seleccione procedimiento almacenado y luego agregar nuevo procedimiento almacenado

Por defecto aparece lo siguiente

Los comentarios en un procedimiento almacenado van entre /* comentario */Modifique el procedimiento a

CREATE PROCEDURE LISTAALUMNOSAS SELECT * from Alumnos

4 Grabar el procedimiento almacenado , dando clic al botón de "Guardar" ó pulsando [Ctrl] + [S].

Nota: Si no hay errores de sintaxis se mostrará la instrucción ALTER, si hay errores no se podrá grabar, primero debemos corregir los errores.

Page 2: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -192-

El procedimiento se modifica a:

Haga clic derecho con el ratón y seleccione ejecutar

Y en la ejecución se obtiene el siguiente cuadro

Tambien se puede ejecutar haciendo clic derecho en el procedimiento almacenado de explorador de servidores

Page 3: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -193-

EJECUTANDO PROCEDIMIENTOS ALMACENADOS CON SQLSERVER 2005

Ingrese a New Query y escriba

create procedure PA_Alumnosas select * from Alumnos

al ejecutar Aparece el mensaje

cY el procedimiento ha sido creadoPonga en programmability refresh para actualizar

Y se ve que el procedimiento a sido creado

Para ejecutarUse alumnosexecute PA_Alumnos

Page 4: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -194-

Puede ver el procedimiento almacenado y modificarlo si es necesario

2. Modifique el procedimiento almacenado anterior que solo Iiste el código y el nombre del alumno

Page 5: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -195-

ALTER procedure [dbo].[PA_Alumnos]asselectcodalumno,nombrealumno from Alumnos

Al ejecutar se obtiene

Ejercicio 2 crear un procedimiento almacenado para obtener subtotales por curso

create procedure PA_PagosCursosasselect codcurso, count (monto) as cantidad ,sum(monto) as total from pagos group by codcurso

Al ejecutar

Use alumnosexecute PA_PagosCursos

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)AsSelect * From Pagos Where CodAlumno = @CodAlumno

Page 6: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -196-

execute Pagos_Alumno 'A1'

Ejecutar un procedimiento almacenado de pagos por año

Procedimientos con Parámetros de Salida y Valor de Retorno

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

create procedure Alumnos1b@Codalumno Nchar(10),@Pagoscuenta int = 0 outputasselect CodAlumno,Montofrom Pagoswhere Codalumno = @Codalumno; select @PagosCuenta = count(*)from PAGOSwhere CodAlumno = @CodAlumno

Page 7: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -197-

return @PagosCuenta

Su ejecución

Declare @ValorRetornado int,@CuentaPagos int

Execute @ValorRetornado=Alumnos1b@CodAlumno='A1',@PagosCuenta=@CuentaPagos output

Select @CuentaPagos as '@CuentaPagos'Select 'ValorRetorno' =@ValorRetornado

Crear un procedimiento que devuelve el pago total de todos los alumnos en la tabla pagos

CREATE procedure [dbo].[Pagototal]@MontoTotal int = 0 outputAs select @MontoTotal = sum(monto)from PAGOSreturn @MontoTotal

su ejecución seriaDeclare @ValorRetornado intExecute @ValorRetornado=PagoTotalSelect 'Montototal' =@ValorRetornado

Page 8: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -198-

Modificar el procedimiento anterior que devuelva la suma del monto del alumno código se pasa como parámetro

CREATE procedure PagototalAlumno@Codalumno Nchar(10),@MontoTotal int = 0 outputas select @MontoTotal = sum(monto)from PAGOS where codalumno=@codalumno

return @MontoTotaly su ejecucion es Declare @ValorRetornado int

Execute @ValorRetornado=PagoTotalAlumno 'A1'Select 'A1' as codigo, 'Montototal' =@ValorRetornado

Modificar procedimiento almacenado ya visto anteriormente.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'

2. Vaya al menú de consulta, seleccione resultados a resultados a texto y, a continuación, haga clic en ejecutar. Verá lo siguiente

Page 9: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -199-

Cambiar el nombre de procedimientos almacenados.

Para cambiar el nombre de un procedimiento almacenado, siga estos pasos:Introduzca la instrucción siguiente en la ventana de consulta:

Execute sp_rename 'PA_Alumnos', 'PA_Alumnos1'.

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

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

3. Expanda el nodo de procedimientos almacenados y observe que PA_Alumnos A cambiado A Pa_Alumnos1

Figure 6-8. Renombrando un procedimiento almacenado

También puede renombrarlo un procedimiento almacenado haciendo click derecho en el procedimiento

Page 10: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -200-

Note sp_rename funciona muy bien con la mayoría de los objetos, como tablas, columnas y otros para cambiar su nombre.

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 alumnosIngrese a visual estudio 2008 nuevo proyecto / aplicación de consolaImports System.Data.SqlClientModule Module1 Sub Main() Dim conn As New SqlConnection conn.ConnectionString = "Data Source=.\sqlexpress; Initial Catalog=ALUMNOS;Integrated Security=True" conn.Open() Dim cmd As SqlCommand = conn.CreateCommand() ' especifica la ejecucion del procedimiento almacenado cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = "PA_Alumnos" ' ejecutando comando Dim rdr As SqlDataReader = cmd.ExecuteReader() 'procesando el conjunto de resultados While rdr.Read() Console.WriteLine("{0} {1} {2}", rdr(0).ToString().PadRight(5), rdr(1).ToString().PadRight(10), rdr(2).ToString()) End While Console.ReadLine() rdr.Close() conn.Close() End SubEnd Module

Procedimientos almacenados con parámetros Si el procedimiento almacenado es

ALTER PROCEDURE [dbo].[Pagos_Alumno] @CodAlumno char(10)AsSelect * From Pagos Where CodAlumno = @CodAlumno

El programa en visual basic esImports System.Data.SqlClientModule Module1

Page 11: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -201-

Sub Main() Dim conn As New SqlConnection conn.ConnectionString = "Data Source=.\sqlexpress;Initial Catalog=Alumnos;Integrated Security=True" conn.Open() Dim cmd As SqlCommand = conn.CreateCommand() ' especifica el procedimiento almacenado a ejecutar cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = "Pagos_Alumno" ' crea el parametro de entrada Dim CodAlumno1 As SqlParameter = cmd.Parameters.Add("@CodAlumno", SqlDbType.NChar, 10) CodAlumno1.Direction = ParameterDirection.Input CodAlumno1.Value = "A1" ' create parametros de salida Dim rdr As SqlDataReader = cmd.ExecuteReader() ' Process the result set While rdr.Read() Console.WriteLine("{0} {1} {2} {3} {4}", rdr(0).ToString().PadRight(5), rdr(1).ToString().PadRight(5), rdr(2).ToString().PadRight(5), rdr(3).ToString().PadRight(5), rdr(4).ToString()) End While rdr.Close() Console.ReadLine() End SubEnd Module

Para modificar y eliminar procedimientos use

CAPITULO 9 CONOCIENDO A ADO.NET.

El 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 Datos Relacionales, 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.

Page 12: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -202-

Trabajar con el proveedor de datos SQL Server El.Proveedor de datos de red de SQL Server es el espacio de nombres System.Data.SqlClient.

Table 9-2. Clases de SqlClient usados comumenteClasses DescriptionSqlCommand Ejecuta consultas SQL ,sentencias o procedimientos almacenados SqlConnection Representa una coneccion hac ia SQL Server databaseSqlDataAdapter Representa un puente entre un conjunto de datos y un origen de

datosSqlDataReader Proporciona una secuencia de datos de sólo avance, de sólo lectura

de los resultadosSqlError Contiene información de errores de SQL Server y advertenciasSqlException Define la excepción que se produce en una advertencia o un error de

SQL ServerSqlParameter Representa un parametro de comandoSqlTransaction Representa una trnsaccion SQL Server

Listar la tabla alumnos usando proveedor de datos SQLServer

Imports System.Data.SqlClientModule Module1 Sub Main() Dim conn As New SqlConnection

Page 13: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -203-

conn.ConnectionString = "Data Source=.\sqlexpress;Initial Catalog=Alumnos;Integrated Security=True" Dim sql As String = "select * from alumnos" Dim reader As SqlDataReader = Nothing Try conn.Open() Dim cmd As New SqlCommand(sql, conn) reader = cmd.ExecuteReader() Console.WriteLine("Este programa es un demostrativos del uso del proveedor de datos de SQL") Console.WriteLine("consultando base de datos {0} con la consulta {1}" & _ ControlChars.NewLine, conn.Database, cmd.CommandText) Console.WriteLine("CodAlumno" + ControlChars.Tab + "Nombrealumno" + ControlChars.Tab + "Fecha Nac" + ControlChars.Lf) ' Procesa el resultado While reader.Read() Console.WriteLine("{0} | {1} | {2} ", reader("CodAlumno").ToString().PadLeft(10), reader(1).ToString().PadLeft(10), reader(2).ToString().PadLeft(10)) End While Catch e As Exception Console.WriteLine("Error: ", e) Finally reader.Close() conn.Close() End Try Console.ReadLine() End SubEnd Module

Nota: puede tambien conectar su base de datos con

conn.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

Page 14: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -204-

Dim sql As String = "select * from alumnos"

Ejercicio listar la tabla pagos y otras consultas sql

Trabajar con el proveedor de datos OLE DB.

OLE DB sigue siendo la tecnología de acceso de datos de alto rendimiento de Microsoft. El proveedor de datos OLEDB ha existido durante muchos años. Si has programado Microsoft Access en el pasado, puede recordar utilizando Microsoft Jet OLE DB 3.5 o 4.0 para conectar con una base de datos de Access. El.Proveedor de datos de NET Framework para OLE DB es el espacio de nombres System.Data.OleDb. Tabla 9-3 describe algunas clases en el espacio de nombres de OleDb.

Tabla 9-a3. Clases comunes usados en OleDb

Classes DescriptionOleDbCommand Executes consultas SQL sentencias, o procedimientos

almacenadosOleDbConnection Representa una a coneción hacia una fuente de datos OLE DB OleDbDataAdapter Representa un puente entre un conjunto de datos y un origen

de datosOleDbDataReader Proporciona una secuencia de datos de sólo avance, de sólo

lectura de las filas de un origen de datosOleDbError Contiene información de errores y advertencias devueltas por

el origen de datosOleDbParameter Representa un parametro de comandoOleDbTransaction Representa una transacion SQL

Observe la similitud entre los proveedores de datos de dos, SqlClient y OleDb. Las diferencias en sus implementaciones son transparentes, y la interfaz de usuario es fundamentalmente el mismo.

La ADO.Proveedor de datos OLE DB NET requiere que se especifique un proveedor OLE DB en la cadena de conexión. Tabla 9-4 describe algunos proveedores OLE DB.

Table 9-4. algunos proeveedores OLE DB Provider DescriptionDB2OLEDB Microsoft OLE DB provider for DB2SQLOLEDB Microsoft OLE DB provider for SQL Server Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB provider for Access (which uses the Jet

engine)MSDAORA Microsoft OLE DB provider for OracleMSDASQL Microsoft OLE DB provider for ODBC

Vamos a utilizar el proveedor de datos OLE DB (SQLOLEDB) para acceder a la base de datos alumnos hecho en access 2007 (Cambiar sql o oldb)

Listar la tabla alumnos usando proveedor de datos OLEDBImports System.Data.OleDbModule Module1

Page 15: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -205-

Sub Main() Dim conn As New OleDbConnection conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\DATOS\ALUMNOS.accdb" Dim sql As String = "select * from alumnos" Dim reader As OleDbDataReader = Nothing Try conn.Open() Dim cmd As New OleDbCommand(sql, conn) reader = cmd.ExecuteReader() Console.WriteLine("Este programa es un demostrativos del uso del proveedor de datos de SQL") Console.WriteLine("consultando base de datos {0} con la consulta {1}" & _ ControlChars.NewLine, conn.Database, cmd.CommandText) Console.WriteLine("CodAlumno" + ControlChars.Tab + "Nombrealumno" + ControlChars.Tab + "Fecha Nac" + ControlChars.Lf) ' Procesa el resultado While reader.Read() Console.WriteLine("{0} | {1} | {2} ", reader("CodAlumno").ToString().PadLeft(10), reader(1).ToString().PadLeft(10), reader(2).ToString().PadLeft(10)) End While Catch e As Exception Console.WriteLine("Error: ", e) Finally reader.Close() conn.Close() End Try Console.ReadLine() End SubEnd Module

Puede cambiar la cadena de conexion a

conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\DATOS\ALUMNOS.accdb"

Page 16: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -206-

para convertir base de datos de access 2010 a una version anterior utilice

Trabajar con el proveedor de datos ODBC.

ODBC fue la tecnología de acceso de datos de propósito general original de Microsoft. Es todavía ampliamente utilizado para orígenes de datos que no tienen los proveedores OLE DB o.Proveedores de datos de NET Framework. ADO.NET incluye un proveedor de datos ODBC en el espacio de nombres System.Data.Odbc.

La arquitectura ODBC es esencialmente un proceso de tres niveles. Una aplicación utiliza funciones ODBC para enviar solicitudes de base de datos. ODBC convierte las llamadas de función en el Protocolo (interfaz de nivel de llamada) de un controlador específico para un origen de datos determinado. El controlador se comunica con el origen de datos, pasando los resultados o errores hasta ODBC. Obviamente es menos eficaz que la comunicación directa de un proveedor de datos específicos de la base de datos con una base de datos, por lo que el rendimiento es preferible evitar el proveedor de datos ODBC, ya que sólo ofrece una interfaz más simple para ODBC pero todavía implica todas la sobrecarga ODBC. Tabla 9-5 describe algunas clases en el espacio de nombres de Odbc.

Table 9-5. Commonly Used Odbc ClassesClasses DescriptionOdbcCommand Ejecuta consultas SQL, sentencias o procedimiento

almacenadosOdbcConnection Represents a connection to an ODBC data sourceOdbcDataAdapter Represents a bridge between a dataset and a data sourceOdbcDataReader Proporciona una secuencia de datos de sólo avance, de sólo

lectura de las filas de un origen de datosOdbcError Contiene información de errores y advertencias devueltas por el

origen de datosOdbcParameter Represents a command parameterOdbcTransaction Represents a SQL transaction

Vamos a utilizar el proveedor de datos ODBC para acceder a la base de datos Alumnos(hecho en SQL server), hacer el mismo tipo de cambios sencillos (resaltado más adelante en este capítulo en listado de 9-3) en el código en el listado de 9-1 como en utilizar el proveedor de datos OLE DB.Antes de hacerlo, sin embargo, es necesario crear un origen de datos ODBC — en realidad, configurar un DSN (nombre de origen de datos) para su uso con un origen de datos accesible por ODBC — para la base de datos Northwind, ya que, a diferencia de los proveedores de datos de SQL Server y OLE DB, el proveedor de datos ODBC no le permite especificar la base de datos o servidor en la cadena de conexión. (Las siguientes obras en Windows XP y el proceso es similar para otras versiones de Windows).

Crear un origen de datos ODBC. Para crear un origen de datos ODBC, siga estos pasos:

Page 17: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -207-

1 En el Panel de Control, haga doble clic en herramientas administrativas (véase la figura 9-6). En Windows 7 . Sistema de seguridad luego herramientas administrativas

Figure 9-6. Panel de control herramientas adminsitrativas2 En herramientas administrativas, haga doble clic en orígenes de datos (ODBC)

(véase la figura 9-7).3 Cuando se abre la ventana Administrador de orígenes de datos ODBC, haga clic en

la ficha DSN de usuario y, a continuación, haga clic en Agregar (véase la figura 9-8).

Figure 9-7. herramientas administrativas : Data Sources (ODBC

Figure 9-8. caja de dialogo de administrador de fuente de datos ODBC 4. Inicia el Asistente para crear nuevo origen de datos. Siga cuidadosamente las

instrucciones! En primer lugar, seleccione el controlador de SQL Server; en segundo lugar, haga clic en Finalizar (véase la figura 9-9).

Page 18: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -208-

Figure 9-9. Create New Data Source wizard5 La siguiente ventana solicita el nombre de origen de datos y el servidor. Especifique

los valores de nombre y servidor como AlumnosODBC. y .\SQLEXPRESS , respectivamente, como se muestra en la figura 9-10 y haga clic en siguiente.

Figure 9-10. Especificando nombre de la fuente de datos y conectando con SQL server

6 Acepte los valores predeterminados en la ventana de autenticación, haga clic en siguiente (véase la figura 9-11).

Page 19: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -209-

Figure 9-11. Specifying SQL Server authentication7 En la siguiente ventana, comprobar el cambio de la opción por defecto de base de

datos A, seleccione la base de datos ALUMNOS la lista desplegable y haga clic en siguiente (véase la figura 9-12).

Figure 9-12. Especificando la base de datos por defecto

8. En la siguiente ventana simple clic en finalizar (ver Figure 9-13).

Page 20: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -210-

Figure 9-13. Finalizando la creación DSN9. Aparece una ventana de confirmación, describiendo el nuevo origen de datos. Haga

clic en probar origen de datos (véase la figura 9-14).

Figure 9-14. verificando la conección a la fuente de datos alumnos

10 Una ventana de notificación de una prueba exitosa debe aparecer (véase la figura 9-15). (Si no lo hace, cancelar su trabajo y cuidadosamente intentarlo). Haga clic en OK.

Page 21: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -211-

Figure 9-15. Connecion de BD Alumnos fue exitosa.

11.Cuando aparezca la ventana de confirmación, haga clic en Aceptar. Cuando vuelva a aparecer la ventana Administrador de orígenes de datos ODBC, el nuevo origen de datos figurará en la lista (véase la figura 9-16). Haga clic en Aceptar

Figure 9-16. Nuevo fuente de origen de datos aparece en la lista de fuente de datos

Page 22: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -212-

Ahora tiene listo para trabajar con el origen de datos de AlumnosODBC. A continuación, se utilizará en código para configurar la cadena de conexión.

Listar la tabla alumnos usando proveedor de datos ODBC

Imports System.Data.OdbcModule Module1 Sub Main() Dim connString As String = "dsn=AlumnosODBC" Dim sql As String = "select * from alumnos" Dim reader As OdbcDataReader = Nothing Try Dim conn As New OdbcConnection(connString) conn.Open() ' Execute the query Dim cmd As New OdbcCommand(sql, conn) reader = cmd.ExecuteReader() ' Display output header Console.WriteLine("Este programa es una demostracion del uso de Proveedor de datos ODBC ") Console.WriteLine("Consultando la base de datos {0} con la consulta y {1}" & _ ControlChars.NewLine, conn.Database, cmd.CommandText) Console.WriteLine("CodAlumno" + ControlChars.Tab & "NombreAlumno" + ControlChars.Tab & "FechaNac" + ControlChars.Lf) ' Process the result set While reader.Read() Console.WriteLine("{0} | {1} | {2}", _ reader("CodAlumno").ToString().PadLeft(10), _ reader(1).ToString().PadLeft(10), reader(2).ToString().PadLeft(10)) End While Catch e As Exception Console.WriteLine("Error: ", e) Finally reader.Close() End Try Console.ReadLine() End SubEnd Module

.

Figure 9-17. accesando a base de datos alumnus via ODBC.También podria agregar una fuente de datos ODBC de la siguiente manera

Page 23: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -213-

CAPITULO 10 HACIENDO CONEXIONES

Antes de hacer algo útil con una base de datos, debe establecer una sesión con el servidor de base de datos. Para ello con un objeto llamado una conexión, que es una instancia de una clase que implementa la interfaz System.Data.IDbConnection para un

Page 24: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -214-

proveedor de datos específicos. En este capítulo, utilizará diversos proveedores de datos para establecer conexiones y mirar los problemas que puedan surgir y cómo resolverlos.

Introducción a las clases de conexión del proveedor de datos.

cada proveedor de datos tiene su propio espacio de nombres. Cada uno tiene una clase de conexión que implementa la interfaz System.Data.IDbConnection. la Tabla 10-1 se resumen los proveedores de datos proporcionados por Microsoft.

Table 10-1. Namespaces de proveedores de datos y clases de conexión

Data Provider Namespace Connection ClassODBC System.Data.Odbc OdbcConnectionOLE DB System.Data.OleDb OleDbConnectionOracle System.Data.OracleClient OracleConnectionSQL Server System.Data.SqlClient SqlConnectionSQL Server CE System.Data.SqlServerCe SqlCeConnection

Como puede ver, los nombres de seguir una Convención, mediante conexión precedido de un identificador para el proveedor de datos. Puesto que todas las clases de conexión implementan System.Data.IDbConnection, el uso de cada uno de ellos es similar. Cada uno tiene miembros adicionales que proporcionan métodos específicos para una base de datos determinada. Echemos un vistazo a uno de ellos, SqlConnection, en el espacio de nombres System.Data.SqlClient.

Conectar a SQL Server Express con SqlConnection.

A escribir un programa muy simple, sólo para abrir y comprobar una conexión:Nota: este programa siempre funciona

Imports System.Data.SqlClientModule Module1 Sub Main() Dim connstring As String connstring = "Data Source=.\sqlexpress;Integrated Security=True" Dim conn As SqlConnection = New SqlConnection(connstring) Try conn.Open() Console.WriteLine("Connection opened") Catch e As SqlException Console.WriteLine("Error: " & e.ToString) Finally conn.Close() Console.WriteLine("Connection closed.") End Try Console.ReadLine() End SubEnd Module

3. Presione CTRL+F5 para ejecutar la aplicación. Si la conexión es correcta, podrá ver el resultado en la figura 10-1.

Page 25: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -215-

Figure 10-1. Conectando y disconectando Modifique y verá connstring = "Data Source=.\sqlexpress1;Integrated Security=True"

y verá un mensaje de error, como se muestra en la figura 10-2.

Figure 10-2. Error si la conexión falla mientras se conectaba con SQL Server

Conexiones pueden fallar por razones que no tienen nada que ver con el código. Puede ser debido a que un servidor no está iniciado o porque una contraseña es incorrecta, o existe algún otro problema de configuración

Mostrar información de conexión.Escribir un programa para mostrar información de conexión.

Imports System.Data.SqlClientModule Module1 Sub Main() Dim connstring As String connstring = "data source = .\sqlexpress; Integrated Security=True" Dim conn As SqlConnection = New SqlConnection(connstring) 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)

Page 26: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -216-

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 SubEnd Module

3. pulsar Ctrl + F5. Si la conexión se realiza correctamente, verá el resultado que se muestra en la figura 10-3.

Figure 10-3. Displayando información de la conexión

Inteligence sense de vb 2008 nos ayuda a obtener propiedades y metodos de un evento

Cambie la conexión y vea el resultado

connstring = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

Page 27: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -217-

connstring = "Data Source=.\sqlexpress;Initial Catalog=Alumnos;Integrated Security=True"y vea el resultado

Para adjuntar una base de datos que esta en el servidor siga los siguientes pasos1. en agregar conexión escoja el Microsoft sql server

Page 28: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -218-

Page 29: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -219-

En propiedades escojaData Source=ISMAEL-PC\SQLEXPRESS;Integrated Security=True

Para crear nueva base de SQLserver

Page 30: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -220-

Tarea. Como usar una autenticación con sql server

Conectar a SQL Server Express con OleDbConnection.

. Microsoft proporciona a los proveedores de datos de OLE DB para Microsoft SQL Server, Microsoft Access (Jet), Oracle y una variedad de otros formatos de archivo de base de datos y datos.

Conectar a SQL Server Express con el proveedor de datos OLE DB.

Imports System.Data.OleDbModule Module1 Sub Main() Dim connstring As String connstring = "data source = .\sqlexpress;provider = sqloledb;integrated security = sspi" Dim conn As OleDbConnection = New OleDbConnection(connstring) Try conn.Open() Console.WriteLine(" Conexion abierta") 'Displaya propiedades de las conexiones 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 SubEnd Module

Figure 10-4. Displayando información de conexión OLE DB

Page 31: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -221-

Cambie la cadena y vea el resultado

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\DATOS\ALUMNOS.accdb

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.Cada proveedor de datos tiene una clase de comando que implementa el System.Data. Interfaz IDbCommand. Vamos a usar el proveedor de datos de SQL Server (System.Data.SqlClient) en los ejemplos. Su comando se denomina SqlCommand. Los comandos a los demás proveedores de datos funcionan del mismo modo.

Creando un comandoPuede crear un comando utilizando el constructor SqlCommand o utilizando métodos para la creación de comandos.

Crear un comando con un Constructor. En este ejemplo, podrá crear un objeto SqlCommand pero no hacer nada con él.

Imports System.Data.SqlClientModule Module1 Sub Main() Dim conn As SqlConnection = New SqlConnection _ ("Data Source=.\sqlexpress;Integrated Security=True; database=Alumnos") 'creando comando Dim cmd As SqlCommand = New SqlCommand Console.WriteLine("Comando creado.") Try conn.Open()

Page 32: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -222-

Catch ex As SqlException Console.WriteLine(ex) Finally conn.Close() Console.WriteLine("Coneccion cerrada.") End Try Console.ReadLine() End SubEnd Module

Puede cambiar la conexion Dim conn As SqlConnection = New SqlConnection(" Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

Asociar un comando con una conexión.

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.

Configuración de la propiedad de conexión. Para establecer la propiedad de conexión, siga estos pasos:

1 Agregue el siguiente código en bold para el bloque try de listado de 11-1.Try conn.Open() 'conectado comando con la conexión cmd.Connection = conn Console.WriteLine("comando conectado con la cenexión.")2. Ejecutar el código presionando Ctrl + F5. Debería ver los resultados en la figura 11-2

Figure 11-2. Conectando un comando a la conexión

La asignación real se produce después de la llamada a conn.Open en este ejemplo en particular, una segunda opción para asociar una conexión con un comando; llamar al método CreateCommand de la conexión devolverá un nuevo comando con la propiedad de conexión establecida a ese respecto:Dim cmd As SqlCommand = New SqlCommand cmd = conn.CreateCommand

este es equivalente a Dim cmd As SqlCommand = New SqlCommand cmd.Connection = conn

Page 33: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -223-

En ambos casos, termina con un comando asociado a una conexión. Todavía necesita algo más para poder utilizar el comando, y es el texto del comando.

Asignación de texto a un comando.

Cada comando tiene una propiedad CommandText, que contiene la instrucción SQL para ejecutar. Puede asignar a esta propiedad directamente o especificarla al construir el comando.

Configuración de la propiedad CommandText. Para establecer la propiedad CommandText, siga estos pasos:

1. Modificar el bloque try con el siguiente código en negrita:Try conn.Open() cmd.Connection = conn Console.WriteLine("Conectando comando a la conexión.") ' asociar texto SQL con con el comando cmd.CommandText = "select * from alumnos" Console.WriteLine("LISTO LA EJECUCION DE SQL:" & cmd.CommandText)2. Ejecutar el código presionando Ctrl + F5. Debería ver el resultado en la figura 11-3

.Figure 11-3. poniendo command text

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) ExecuteNonQuerycero o mas filas ExecuteReaderXML ExecuteXmlReader

Si se quiere obtener un solo valor se debe utilizar el método ExecuteScalar de SqlCommand para devolver uno de los resultados.

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

Page 34: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -224-

Imports System.Data.SqlClientModule Module1 Sub Main() Dim conn As SqlConnection = New SqlConnection _ ("Data Source=.\sqlexpress; Integrated Security=True;database=Alumnos") 'creando comandos ( con ambos textos y conexión) Dim sql As String = "select count(*) from alumnos" Dim cmd As SqlCommand = New SqlCommand(sql, conn) Console.WriteLine("Comando creado y conectado .") Try conn.Open() Console.WriteLine("numero de alumnos {0}", cmd.ExecuteScalar()) Catch ex As SqlException Console.WriteLine(ex) Finally conn.Close() Console.WriteLine("Conneccion cerrada.") End Try Console.ReadLine() End SubEnd Module

Figure 11-4. Ejecutando un comando escalar

Modifique el programa para obtener la cantidad de los pagos, el total de los pagos 3. El máximo pago, etc

Imports System.Data.SqlClientModule Module1 Sub Main() Dim cadenaconexion As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim conn As SqlConnection = New SqlConnection(cadenaconexion) Dim sql As String = "select count(monto) from pagos" Dim cmd As SqlCommand = New SqlCommand(sql, conn) Try conn.Open() Console.WriteLine("numero de alumnoss {0}", cmd.ExecuteScalar()) cmd.CommandType = CommandType.Text cmd.CommandText = "select sum(monto) from pagos " Console.WriteLine("total de pagos {0}", cmd.ExecuteScalar()) cmd.CommandText = "select Min(monto) from pagos " Console.WriteLine("Minimo pago {0}", cmd.ExecuteScalar()) cmd.CommandText = "select Max(monto) from pagos " Console.WriteLine("Maximo pago {0}", cmd.ExecuteScalar()) Catch ex As SqlException

Page 35: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -225-

Console.WriteLine(ex) Finally conn.Close() Console.WriteLine("Conneccion cerrada.") End Try Console.ReadLine() End SubEnd Module

Se puede almacenar el resultado de ExecuteScalar() en una variable total ( a veces es necesario convertir) reemplace el siguiente código y vea el resultado Dim total As Integer Try conn.Open() cmd.CommandType = CommandType.Text cmd.CommandText = "select sum(monto) from pagos " total = cmd.ExecuteScalar() Console.WriteLine("total de pagos {0}", total)

ExecuteScalar() sólo devuelve la primera fila del resultado y omite el resto.

Pruebe y vea el resultado Dim sql As String = "select * from alumnos"

Ejecutar comandos con varios resultados.

Para consultas donde el resultado esperado es varias filas y columnas que se devolverá, utilice el comando ExecuteReader()

ExecuteReader() devuelve un lector de datos, una instancia de la clase SqlDataReader

Utilizando el método ExecuteReader.

Imports System.Data.SqlClientModule Module1 Sub Main() Dim conn As SqlConnection = New SqlConnection _ ("database=alumnos;Integrated Security=True;Data Source=.\sqlexpress") 'creando comando( con ambos textos y conexion

Page 36: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -226-

Dim sql As String = "select * from alumnos" Dim cmd As SqlCommand = New SqlCommand(sql, conn) Console.WriteLine("Comando creado y conectado .") Try conn.Open() Dim rdr As SqlDataReader = cmd.ExecuteReader While (rdr.Read) Console.WriteLine("Alumno : {0} {1} {2}", rdr.GetValue(0), rdr.GetValue(1), rdr.GetValue(2)) End While Catch ex As SqlException Console.WriteLine(ex) Finally conn.Close() Console.WriteLine("Coneccion cerrada.") End Try Console.ReadLine() End SubEnd Module

Nota la cadena de conexion se puede poner en cualquier orden Dim conn As SqlConnection = New SqlConnection _ ("database=alumnos;Integrated Security=True;Data Source=.\sqlexpress")

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. 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.SqlClientModule Module1 Sub Main() Dim cadenaconexion As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim conn As SqlConnection = New SqlConnection(cadenaconexion)

Page 37: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -227-

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 SubEnd Module

2. Vea la tabla alumnos de su base de datos y no debe figurar el regisgtro que ti3ene codigo ‘A9’

3. Ejecute el programa4. Vea la base de alumnos y la tabla alumnos debe aparecer el datos insertado

Tarea Inserte varios registros generado automaticamente con código

Imports System.Data.SqlClientModule Module1 Sub Main() Dim cadenaconexion As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim conn As SqlConnection = New SqlConnection(cadenaconexion) Dim consulta As String Dim comando As SqlCommand = New SqlCommand("", conn) Dim I As Integer Dim CODALUMNO As String Dim NOMBREALUMNO As String Try conn.Open() For I = 11 To 20 CODALUMNO = "'A" & I & "'" NOMBREALUMNO = "'nombre " & I & "'" consulta = "insert into alumnos " _ & "(Codalumno,nombrealumno,fechanac)" _ & "values(" & CODALUMNO & "," & NOMBREALUMNO & ",'1/12/1987')" comando.CommandText = consulta Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText) comando.ExecuteNonQuery()

Next Catch ex As SqlException Console.WriteLine(ex)

Page 38: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -228-

Finally conn.Close() Console.WriteLine("Conneccion cerrada.") End Try Console.ReadLine() End SubEnd Module

Vea los registros insertados

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

Imports System.Data.SqlClientModule 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=.\sqlexpress;Integrated Security=True;database=alumnos") 'define consulta escalar Dim sqlqry As String = "select count(*)from alumnos" 'define sentencia insert Dim sqlins As String = "insert into alumnos (codalumno,nombrealumno,fechanac)values(@codalu,@nombrealu,@fechanac)" 'define sentencia delete Dim sqldel As String = "delete from alumnos where Codalumno = @codalu and nombrealumno = @nombrealu" 'creado comandos Dim cmdqry As SqlCommand = New SqlCommand(sqlqry, conn) Dim cmdnon As SqlCommand = New SqlCommand(sqlins, conn) cmdnon.Prepare() 'adicionando parameters hacia el comnado para sentgencias cmdnon.Parameters.Add("@CodAlu", SqlDbType.NChar, 10) cmdnon.Parameters.Add("@Nombrealu", SqlDbType.VarChar, 50) cmdnon.Parameters.Add("@Fechanac", SqlDbType.DateTime) Try conn.Open() 'ejecuta consulta para obtener numero de alumnos Console.WriteLine("ANTES INSERT: Numero de alumnos {0}", cmdqry.ExecuteScalar()) 'ejecuta nonquery para insertar alumnos

Page 39: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -229-

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 para eliminar un 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 SubEnd Module

Figure 11-7. Usando parametros para comando

CAPITULO 12 USANDO DATA READERS

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.

La regla general es siempre usar un lector de datos para recuperación de datos

Bucle a través de un conjunto de resultados. aplicación de consola muestra cómo utilizar un SqlDataReader para recorrer un conjunto de resultados y recuperar filas.

Page 40: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -230-

Utilizando los indizadores ordinalesImports System.Data.SqlClientModule 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 conn.Open() Dim cmd As SqlCommand = New SqlCommand(sql, conn) Dim rdr As SqlDataReader = cmd.ExecuteReader While (rdr.Read) Console.WriteLine("{0}", rdr.GetValue(0)) End While rdr.Close() Catch e As Exception Console.WriteLine("Error Occurred:" & e.ToString) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

Para leer varios campos reemplace la parte que esta en negrita a

While (rdr.Read) Console.WriteLine("{0} {1} {2} ", rdr.GetValue(0), rdr.GetValue(1), rdr.GetValue(2)) End While

Si quiere listar todos los campos de cualquier consulta entonces reemplace el código que esta en negrita a Dim nc As Integer nc = rdr.FieldCount For i = 0 To rdr.FieldCount - 1 Console.Write("{0} ", rdr.GetName(i)) Next While (rdr.Read) Console.WriteLine() For i = 0 To rdr.FieldCount - 1 Console.Write("{0} ", rdr(i)) Next End While

Page 41: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -231-

Y puede escribir cualquier consulta y el programa lo listara cambie de consulta y vea los resultadosPuede remplazar también Console.Write("{0} ", rdr.GetValue(i))

Utilizando los indizadores ordinales.

En el ejemplo anterior se utiliza 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.

Uso de columnas indexado por nombre

Utiliza el nombre de columna indexación especificando nombres de columna en lugar de números de índice ordinales. Esto tiene sus ventajas. Por ejemplo, una tabla puede modificarse mediante la adición o eliminación de una o varias columnas, alterando el orden de columna y producir excepciones en el código antiguo que utiliza indizadores ordinales. Utilizando los indizadores de nombre de columna podría evitar este problema, pero los indizadores ordinales son más rápidos, ya que directamente hacen referencia a columnas en lugar de buscar por nombre.

Par probar reemplace la parte que esta en negrita a

Dim sql As String = "select * from alumnos" --- While (rdr.Read) Console.WriteLine("{0} {1} {2} ", rdr("CodAlumno").ToString, rdr("NombreAlumno").ToString, rdr("FechaNac").ToString) End While

Y vea el resultado

Utilizando los métodos de descriptor de acceso con tipo.

Page 42: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -232-

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.Pruebe: Utilizando los métodos de descriptor de acceso con tipo. (modifique del programa anterior lo que esta en negrita)

Imports System.Data.SqlClientModule Module1 Sub Main() Dim connstring As String = ("Data Source=.\sqlexpress;Integrated Security=True;database=ALUMNOS") Dim sql As String = "select nro,codalumno, fechapago, monto , codcurso from pagos " Dim conn As SqlConnection = New SqlConnection(connstring) Try conn.Open() Dim cmd As SqlCommand = New SqlCommand(sql, conn) 'create data reader Dim rdr As SqlDataReader = cmd.ExecuteReader While (rdr.Read) Console.WriteLine(" {0} {1} {2} {3} {4} ", rdr.GetInt32(0), rdr.GetString(1), rdr.GetSqlDateTime(2), rdr.GetDecimal(3), rdr.GetString(4)) End While rdr.Close() Catch e As Exception Console.WriteLine("Error Occurrido:" & e.ToString) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

Figure 12-3. Usando acceso con tipo

Use intelligence sense para los tipos de datos

Page 43: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -233-

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 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 propiedad Nombre descripciónDepth Una propiedad que obtiene la profundidad de anidación de la

fila actualFieldCount Una propiedad que contiene el número de columnas de la fila

actualGetDataTypeName Un método que acepta un índice y devuelve una cadena que

contiene el nombre del tipo de datos de columnaGetFieldType Un método que acepta un índice y devuelve el tipo de objeto

de NET FrameworkGetName Un método que acepta un índice y devuelve el nombre de la

columna especificadaGetOrdinal Un método que acepta un nombre de columna y devuelve el

índice de columnaGetSchema Un método que devuelve los metadatos de columna de tablaHasRows Una propiedad que indica si el lector de datos tiene filasRecordsAffected 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.SqlClientModule Module1 Sub Main() Dim connstring As String = ("Data Source=.\sqlexpress;Integrated Security=True;database=alumnos") Dim sql As String = "select nro , codalumno, fechapago , monto, codcurso from pagos" Dim conn As SqlConnection = New SqlConnection(connstring) Try conn.Open() Dim cmd As SqlCommand = New SqlCommand(sql, conn)

Page 44: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -234-

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("Number of columns in a row: {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 SubEnd Module

Figure 12-4. Displayando resultados de conjunto de metadatos

Page 45: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -235-

Ahora va a aprender cómo obtener información sobre los esquemas.

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.

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

Imports System.Data.SqlClientModule 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 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

Page 46: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -236-

conn.Close() End Try Console.ReadLine() End SubEnd Module

Figure 12-5. Displayando esquema metadatos

Cómo funciona. Este código es un poco diferente de lo que has escrito anteriormente. Cuando se realiza la llamada al método GetSchemaTable, se devuelve una instancia poblada de una tabla de datos:

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

¿Por lo tanto, hay una manera que puede obtener un lector de datos a través de un único bucle varios conjuntos de resultados? Sí, los lectores de datos tienen un método, NextResult(), que desplaza el lector hasta el siguiente conjunto de resultados.

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

Imports System.Data.SqlClientModule Module1 Sub Main() Dim connstring As String = ("Data Source=.\sqlexpress; Integrated Security=True;database=ALUMNOS") Dim sql1 As String = "SELECT * FROM ALUMNOS " Dim sql2 As String = "SELECT * FROM PAGOS " Dim sql3 As String = "SELECT * FROM CURSOS " Dim sql As String = sql1 + sql2 + sql3 Dim conn As SqlConnection = New SqlConnection(connstring) Try conn.Open() Dim cmd As SqlCommand = New SqlCommand(sql, conn) 'create data reader

Page 47: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -237-

Dim rdr As SqlDataReader = cmd.ExecuteReader Dim contador As Integer = 0 Do Console.WriteLine("TABLA {0} ", contador) While rdr.Read() ' imprime una fila en el tiempo Console.WriteLine("{0} : {1} {2}", rdr(0), rdr(1), rdr(2)) 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 SubEnd Module

CAPITULO 13 USANDO DATASET Y DATAADAPTERS ( FORMA DESCONECTADA)

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.

Page 48: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -238-

Pensar en adaptadores de datos como puentes entre conjuntos de datos y orígenes de datos. Sin un adaptador de datos, un conjunto de datos no puede acceder a cualquier tipo de origen de datos. El adaptador de datos se encarga de todos los detalles de conexión para el conjunto de datos, rellena con datos y actualice el origen de datos.Datasets vs.Data Readers. ( lectores de datos y conjuntos de datos)

Si simplemente desea leer y mostrar los datos, tendrá que utilizar un lector de datos, Si necesita manipular los datos en cualquier forma y, a continuación, actualizar la base de datos, debe utilizar un conjunto de datos..Una breve introducción a los conjuntos de datos.

Conjuntos de datos ayudan tremendamente aquí, porque le permiten almacenar y modificar grandes cantidades de datos en una memoria caché local, ver los datos como las tablas y procesar los datos de un modo sin conexión (en otras palabras, está desconectado de la base 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.

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

Page 49: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -239-

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.

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)

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.

Imports System.Data.SqlClient

Page 50: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -240-

Module Module1 Sub Main() Dim connstring As String = ("Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True") 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 'rellena dataset da.Fill(ds, "ALUMNOS") 'obtiene data table Dim dt As DataTable = ds.Tables("ALUMNOS") 'displaya los datos Dim row As DataRow For Each row In dt.Rows Dim col As DataColumn For Each col In dt.Columns Console.WriteLine(row(col)) Next col Console.WriteLine("".PadLeft(20, "="c)) Next row Catch e As Exception Console.WriteLine("Error Occurred:" & e.ToString) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

Figure 13-3. Poblando un dataset

Cómo funciona.

Page 51: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -241-

En esta etapa, todo lo que tiene es un conjunto de datos vacío. La clave es que utiliza el método Fill del adaptador de datos para ejecutar la consulta, recuperar los datos y rellenar el conjunto de datos:

'fill datasetda.Fill(ds, "alumnos")

Con un conjunto de datos poblada a su disposición, puede acceder a los datos en tablas de datos individuales.'get data tableDim dt As DataTable = ds.Tables("alumnos")

Para saber numero de columnas '*** nro de columna Dim nrocol As Integer = dt.Columns.Count Modifique la sentencia y vea el resultado 'displaya los datos 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

Ejemplo de for each y for next

Ejemplificaremos con arreglosFor 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}

Page 52: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -242-

Dim i 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 SubEnd Module

Ejemplo 2 Imports System.Data.SqlClientModule 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 SubEnd Module

Page 53: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -243-

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 SubEnd Class

Ejemplo mostrar el elemento de la fila y columna determinada

Imports System.Data.SqlClientModule Module1 Dim fila As Integer, col As Integer Sub Main() Dim connstring As String = "Data Source=.\sqlexpress;Integrated Security=True;database=alumnos" 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") 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 SubEnd Module

Page 54: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -244-

Se podría también mostrar otras característicasConsole.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)

Mostrar todas las tablasImports System.Data.SqlClientModule Module1 Dim fila As Integer, col As Integer, k As Integer Sub Main() Dim connstring As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\alumnos.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" 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 Console.Write(" {0}", ds.Tables(k).Columns(i).ColumnName.ToString.PadRight(12))

Page 55: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -245-

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 SubEnd Module

Puede también poblar el dataset de la siguiente maneraDim 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")

Page 56: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -246-

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

Imports System.Data.SqlClientModule Module1 Sub Main() 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" 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 Console.WriteLine("Results de la consulta {0} ", sql1) Console.WriteLine(("Nro".PadRight(10) + "Codalumno".PadLeft(10) + "Monto".PadLeft(10) + ControlChars.Lf)) '' poner filtro para displayar Dim fl As String = "codalumno = 'A1'" ' para ordenar Dim srt As String = "Nro" ' display los datos filtrado y ordenados Dim row As DataRow For Each row In dtc("pagos").Select(fl, srt) Console.WriteLine("{0} {1} {2} ", row("Nro").ToString.PadLeft(10), row("CodAlumno").ToString.PadLeft(10), row("Monto").ToString.PadLeft(10)) Next row Catch e As Exception Console.WriteLine("Error Occurred:" & e.ToString) Finally con.Close() End Try Console.ReadLine() End Sub

Page 57: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -247-

End Module

Mostrar todos los registros de filtrado por codigo del alumno y ordenado por numero

Imports System.Data.SqlClientModule Module1 Dim i As Integer Sub Main() 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 * 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 Dim nfilas As Integer nfilas = ds.Tables(0).Rows.Count Console.WriteLine("Resultados de la consulta {0} ", sql1) For i = 0 To ds.Tables(0).Columns.Count - 1 Console.Write(" {0} ", ds.Tables(0).Columns(i).ColumnName.ToString.PadRight(12)) Next Console.WriteLine() Dim fl As String = "codalumno = 'A1' " Dim srt As String = "Nro" Dim row As DataRow Dim ncol As Integer = ds.Tables(0).Columns.Count For Each row In dtc("pagos").Select(fl, srt) For k = 0 To ncol - 1 Console.Write("{0} ", row(k).ToString.PadLeft(10)) Next Console.WriteLine() Next row Catch e As Exception Console.WriteLine("Error Occurred:" & e.ToString)

Page 58: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -248-

Finally con.Close() End Try Console.ReadLine() End SubEnd 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 descendenteFor 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.SqlClientModule 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 Console.Write("{0}", ds.Tables(0).Rows(fila).Item(col).ToString.PadRight(12)) Next Console.WriteLine()

Page 59: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -249-

Next Catch e As Exception Console.WriteLine("Error Occurred:" & e.ToString) Finally con.Close() End Try Console.ReadLine() End SubEnd Module

Comparación de FilterSort a PopDataSet.

Por lo tanto, aunque los conjuntos de datos son completamente independientes de bases de datos (y conexiones), utiliza un conjunto de datos no significa que ejecuta desconectado de una base de datos. Si desea ejecutar desconectado, utilizar conjuntos de datos, pero no abrir conexiones antes de rellenarles (o, si una conexión está abierta, ciérrelo primero). Conjuntos de datos en sí mismos no implican operaciones conectadas o desconectadas.

Salir con el estándar conn.Close(); en el bloque finally. Ya que se puede llamar Close() sin error en una conexión cerrada, no presenta ningún problema si llama innecesariamente, pero definitivamente garantiza que se cerrará la conexión, pase lo que pase en el bloque try.

Usando vistas de datos.

Una vista de datos (una instancia de la clase System.Data.DataView) permite crear vistas dinámicas de los datos almacenados en una tabla de datos subyacente, lo que refleja todos los cambios realizados en su contenido y sus pedidos. Esto difiere del método Select, que devuelve una matriz de filas de datos cuyo contenido refleja los cambios en los valores de datos pero no los datos pedidos.

Nota Una vista de datos es una representación dinámica del contenido de una tabla de datos. Como una vista SQL, que realmente no contener datos

Perfeccionamiento de datos con una vista de datos.

ejemplo que utiliza una vista de datos para ordenar y filtrar una tabla de base de datos de forma dinámica . filtrado por código de alumno y ordenado por monto en forma descendente

Imports System.Data.SqlClientModule Module1 Sub Main() Dim connstring As String = ("Data Source=.\sqlexpress;Integrated Security=True;database=alumnos") Dim sql As String = "select * from pagos " Dim conn As SqlConnection = New SqlConnection(connstring) Try

Page 60: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -250-

Dim da As SqlDataAdapter = New SqlDataAdapter da.SelectCommand = New SqlCommand(sql, conn) Dim ds As DataSet = New DataSet da.Fill(ds, "pagos") Dim dt As DataTable = ds.Tables("pagos") ' crea vista de datos Dim dv As New DataView(dt, "codalumno = 'A1'", "monto desc", DataViewRowState.CurrentRows) Dim drv As DataRowView For Each drv In dv Dim i As Integer For i = 0 To dv.Table.Columns.Count - 1 Console.Write(" {0} ", drv(i)) Next i Console.WriteLine() Next drv Catch e As Exception Console.WriteLine("Error Occurred:" & e.ToString) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

Sin filtro y ordenado por codalumnoDim dv As New DataView(dt, "", "codalumno", DataViewRowState.CurrentRows)

Cómo funciona. Crea una nueva vista de datos y inicializarlo pasando parámetros a su constructor Dim dv As New DataView(dt, "codalumno = 'A1'", "codalumno", DataViewRowState.CurrentRows)

El primer parámetro es una tabla de datos, el segundo es un filtro para el contenido de la tabla de datos, la tercera es la columna de ordenación y la cuarta especifica los tipos de filas para incluir en la vista de datos.

Puede modificar la ordenacion

Dim dv As New DataView(dt, "codalumno = 'A1'", "codCurso DESC", DataViewRowState.CurrentRows)

Page 61: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -251-

System.Data.DataViewRowState es una enumeración de los Estados que pueden tener filas en la tabla de datos subyacente de una vista de datos. Tabla 13-1 se resumen los Estados

Table 13-1. Data View Row StatesMembers DescriptionAdded Adiciona una nueva filaCurrentRows Filas actuales incluso sin cambios, nuevos y modificadosDeleted Una fila eliminadaModifiedCurrent La version actual de una fila modificadaModifiedOriginal La versión original de una fila modificadaNone Ninguna de las filasOriginalRows Filas originales, incluyendo sin modificar y eliminan filasUnchanged Una fila que no ha sido modificadoCada vez que una fila es agregada, modificada o eliminada, cambia su estado de fila a la apropiada en el cuadro 13-1.

Como una fila de datos representa una fila en una tabla de datos, una vista de fila de datos (quizás hubiera sido mejor llamarlo una fila de la vista de datos) representa una única fila en una vista de datos.

Como sugiere este sencillo ejemplo, vistas de datos ofrecen un medio poderoso y flexible de cambiar dinámicamente qué funciona datos dentro de una tabla de datos.

Modificar datos en un Dataset.

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.

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

Page 62: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -252-

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 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 SubEnd Module

Figure 13-6.Modificando un data table

Propagar cambios a un origen de datos.

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.

Page 63: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -253-

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

Imports System.Data.SqlClientModule Module1 Sub Main() Dim connstring As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim qry As String = "select * from alumnos" Dim upd As String = "update alumnos set NombreAlumno = @Nombre where CodAlumno = @Codigo" Dim conn As SqlConnection = New SqlConnection(connstring) Try conn.Open() Dim da As New SqlDataAdapter() da.SelectCommand = New SqlCommand(qry, conn) Dim ds As New DataSet() da.Fill(ds, "alumnos") ' get data table reference Dim dt As DataTable = ds.Tables("alumnos") ' modifica nombre en la primera fila dt.Rows(0)("NombreAlumno") = "Alberto" ' display rows Dim row As DataRow For Each row In dt.Rows Console.WriteLine("{0} {1} {2}", _ row("codalumno").ToString().PadRight(15), row("nombrealumno").ToString().PadLeft(20), row("FechaNac")) Next row ' update alumnos Dim cmd As New SqlCommand(upd, conn) cmd.Parameters.Add("@Nombre", SqlDbType.VarChar, 50, "nombrealumno") ' Codalumno Dim parm As SqlParameter = cmd.Parameters.Add("@codigo", SqlDbType.NChar, 10, "codalumno") parm.SourceVersion = DataRowVersion.Original ' Update database da.UpdateCommand = cmd da.Update(ds, "alumnos") Catch e As Exception Console.WriteLine("Error: " + e.ToString) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

Page 64: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -254-

Figure 13-7.Modificando una fila

Cómo funciona.

Puedes agregar una instrucción UPDATE y cambian el nombre de la variable original de cadena de consulta de sql a upd para distinguirse claramente esta declaración:

, A continuación, llame al método Update del adaptador de datos para propagar el cambio a la base de datos. Aquí tiene sólo un cambio, pero ya tiene parámetros SQL, el adaptador de datos buscará todas las filas modificadas en la tabla de datos de empleados y enviar actualizaciones para todos ellos a la base de datos.' Update database da.UpdateCommand = cmd da.Update(ds, "alumnos")se puede ver la ,modificación en la tabla alumnos

Propiedad InsertCommand.

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,

Imports System.Data.SqlClientModule Module1 Sub Main() Dim connstring As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim qry As String = "select * from alumnos" 'SQL to insert alumnos Dim ins As String = "insert into alumnos (codalumno,nombrealumno,FechaNac)" & _ "values(@codigo,@nombre,@Fecha)" Dim conn As SqlConnection = New SqlConnection(connstring) Try conn.Open()

Page 65: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -255-

Dim da As New SqlDataAdapter() da.SelectCommand = New SqlCommand(qry, conn) Dim ds As New DataSet() da.Fill(ds, "alumnos") ' get data table reference Dim dt As DataTable = ds.Tables("alumnos") ' adiciona una nueva fila Dim newRow As DataRow = dt.NewRow() newRow("codalumno") = "A24" newRow("NombreAlumno") = "BETTY" newRow("FechaNac") = "15/06/2002" dt.Rows.Add(newRow) ' displaya filas Dim row As DataRow For Each row In dt.Rows Console.WriteLine("{0} {1} {2}", _ row("codalumno").ToString().PadRight(10), _ row("NombreAlumno").ToString().PadLeft(25), row("FechaNac").ToString) Next row ' inserta alumnos Dim cmd As New SqlCommand(ins, conn) ' mapa de los parametros cmd.Parameters.Add("@codigo", SqlDbType.NChar, 10, "Codalumno") cmd.Parameters.Add("@Nombre", SqlDbType.VarChar, 50, "NombreAlumno") cmd.Parameters.Add("@fecha", SqlDbType.DateTime, 50, "FechaNac") ' insert alumnos da.InsertCommand = cmd da.Update(ds, "alumnos") Catch e As Exception Console.WriteLine(("Error: " + e.ToString)) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

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.

Imports System.Data.SqlClientModule Module1

Page 66: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -256-

Sub Main() Dim connstring As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim qry As String = "select * from alumnos" Dim del As String = "delete from alumnos where codalumno = @codigo" Dim conn As SqlConnection = New SqlConnection(connstring) Try Dim da As SqlDataAdapter = New SqlDataAdapter da.SelectCommand = New SqlCommand(qry, conn) Dim ds As DataSet = New DataSet da.Fill(ds, "alumnos") Dim dt As DataTable = ds.Tables("alumnos") Dim cmd As SqlCommand = New SqlCommand(del, conn) cmd.Parameters.Add("@codigo", SqlDbType.NChar, 10, "codalumno") 'select alumnos Dim filt As String = "codalumno = 'A25'" Dim row As DataRow For Each row In dt.Select(filt) row.Delete() Next row da.DeleteCommand = cmd da.Update(ds, "alumnos") ' display rows For Each row In dt.Rows Console.WriteLine("{0} {1} {2}", _ row("codalumno").ToString().PadRight(15), _ row("nombrealumno").ToString().PadLeft(25), row("FechaNac")) Next row Catch e As Exception Console.WriteLine(("Error: " + e.ToString)) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

Figure 13-9. eliminando una fila

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.

Page 67: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -257-

Para crear un generador de comando, se crea una instancia de la clase de generador de comando del proveedor de datos, pasando de un adaptador de datos para su constructor. Por ejemplo, el código siguiente crea un generador de comandos de SQL Server:

Dim da As SqlDataAdapter=New SqlDataAdapterDim cb As SqlCommandsBuilder=New SqlCommandBuilder

Nota para un generador de comando para trabajar, la propiedad SelectCommand de adaptador de datos debe contener una consulta que devuelve una clave principal o una clave única para la tabla de base de datos. Si no está presente, se genera una excepción InvalidOperation, y no generaron los comandos

Utilizando SqlCommandBuilder.

Imports System.Data.SqlClientModule Module1 Sub Main() Dim connstring As String = "Data Source=ISMAEL-PC\SQLEXPRESS;Initial Catalog=ALUMNOS;Integrated Security=True" 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) ' create and fill dataset Dim ds As New DataSet() da.Fill(ds, "alumnos") ' get data table reference 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) ' display rows Dim row As DataRow For Each row In dt.Rows Console.WriteLine("{0} {1} {2}", _ row("codalumno").ToString().PadRight(15), _ 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()

Page 68: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -258-

End SubEnd Module

Figure 13-10. Adicionando una fila usando un command builder

Obviamente, es preferible a manualmente código SQL; utilizar constructores de comando funcionan sólo en tablas y que la tabla de base de datos subyacente debe tener una clave principal o única. También, el propiedad SelectCommand de adaptador de datos debe tener una consulta que incluya las columnas de clave.

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.

Listing 13-9. WriteXML.vb

Imports System.Data.SqlClientModule Module1 Sub Main()

Page 69: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -259-

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 SqlDataAdapter = New SqlDataAdapter da.SelectCommand = New SqlCommand(sql, conn) conn.Open() Dim ds As DataSet = New DataSet da.Fill(ds, "Alumnos") '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 SubEnd Module

Figure 13-11. Extracting a data table as XML

4. 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.<?xml version="1.0" standalone="yes"?><NewDataSet> <Alumnos> <CodAlumno>A1 </CodAlumno> <NombreAlumno>javier </NombreAlumno> <FechaNac>1989-01-01T00:00:00-05:00</FechaNac> </Alumnos> <Alumnos> <CodAlumno>a22 </CodAlumno> <NombreAlumno>JUAN CARLOS</NombreAlumno> <FechaNac>2001-01-01T00:00:00-05:00</FechaNac> </Alumnos> <Alumnos> <CodAlumno>A4 </CodAlumno> <NombreAlumno>JORGE</NombreAlumno> <FechaNac>1980-01-01T00:00:00-05:00</FechaNac> </Alumnos> <Alumnos> <CodAlumno>A5 </CodAlumno>

Page 70: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -260-

<NombreAlumno>EUTAQUIO </NombreAlumno> <FechaNac>2001-01-01T00:00:00-05:00</FechaNac> </Alumnos> <Alumnos> <CodAlumno>A9 </CodAlumno> <NombreAlumno>JOSE</NombreAlumno> <FechaNac>2001-01-01T00:00:00-05:00</FechaNac> </Alumnos> <Alumnos> <CodAlumno>B2 </CodAlumno> <NombreAlumno>KAREN</NombreAlumno> <FechaNac>2007-02-01T00:00:00-05:00</FechaNac> </Alumnos></NewDataSet>

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.

Como mencionamos en nuestro primer ejemplo, "Llenar un Dataset con un adaptador de datos," tablas de datos pueden utilizarse sin conjuntos de datos. La mayoría de los casos esto implica llamando a los mismos métodos en tablas de datos que utiliza para conjuntos de datos. Daremos un ejemplo. Entonces podrá analogize de ella para otros procesos.Note Conjuntos de datos y tablas de datos también pueden utilizarse sin adaptadores de datos. Sea más allá del alcance de este libro.

Rellenar una tabla de datos con un adaptador de datos. En este ejemplo se basa en nuestro primer ejemplo, PopDataSet.vb (listado de 13 - 1). Crear una tabla de datos, rellenarlo con un adaptador de datos y, a continuación, mostrar su contenido.

Imports System.Data.SqlClientModule 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 conn.Open() Dim da As SqlDataAdapter = New SqlDataAdapter(sql, conn) Dim dt As DataTable = New DataTable da.Fill(dt) Dim row As DataRow For Each row In dt.Rows Dim col As DataColumn

Page 71: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -261-

For Each col In dt.Columns Console.WriteLine(row(col)) Next col Console.WriteLine("".PadLeft(20, "="c)) Next row Catch e As Exception Console.WriteLine("Error Occurred:" & e.ToString) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

Cómo funciona. En lugar de crear un conjunto de datos Dim ds As New DataSet()crear una tabla de datos: Dim dt As DataTable = New DataTableY en lugar de rellenar un conjunto de datos: da.Fill(ds, "products")rellenar una tabla de datos: da.Fill(dt)

Entendiendo dataset con tipo y sin tipo

. Conjuntos de datos pueden ser con tipo sin tipo. Los conjuntos de datos que se ha utilizado hasta ahora han sido sin tipo. Eran casos de System.Data.DataSet. Un conjunto de datos sin tipo no tiene ningún esquema integrado. Un dataset con tipo es uno que se deriva de System.Data.DataSet y utiliza un esquema XML (normalmente en un archivo .xsd) en la declaración de la clase dataset. Información del esquema (tablas, columnas, etc.) es extraída, generada como código de Visual Basic y compilada, así que la nueva clase de conjunto de datos es un real.Tipo de NET con objetos adecuados y propiedades.

Conjuntos de datos con tipo o sin tipo son igualmente válidas, pero datasets con tipo son más eficientes y puede hacer algo más que el simple código. Por ejemplo, utilizando un conjunto de datos sin tipo, deberá escribir esto:

Console.WriteLine(ds.Tables(0).Rows(0)("CompanyName"))

Page 72: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -262-

para obtener el valor de la columna CompanyName de la tabla Customers, suponiendo que la tabla de datos fue el primero en el conjunto de datos. Con un dataset con tipo, puede acceder a sus tablas de datos y las columnas de datos como miembros de clase. El código anterior se podría reemplazar con esto:

Console.WriteLine(ds.Customers(0).CompanyName)

hacer el código más intuitiva. Además, el editor de código de Visual Studio tiene IntelliSense de soporte para datasets con tipo.

Datasets con tipo son más eficientes que los conjuntos de datos sin tipo porque datasets con tipo tienen un esquema definido, y cuando está rellena con datos, conversión y la identificación del tipo de tiempo de ejecución no es necesarios, ya que esto se ha cuidado de en tiempo de compilación. Conjuntos de datos sin tipo tienen mucho trabajo por hacer cada vez que se carga un conjunto de resultados.

Sin embargo, datasets con tipo no son siempre la mejor opción. Si usted está tratando con datos que básicamente no está bien definidos, cuya definición dinámicamente cambia, o es sólo de interés temporal, la flexibilidad de los conjuntos de datos sin tipo puede superar los beneficios de los escritos.

Tarea Cargar una base de datos excel con ODBC

Page 73: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -263-

CONFIGURAR ORIGEN DE DATOS ODBC CON WINDOWS XP

Buscar la ayuda y soporte técnico

Page 74: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -264-

Clic en iniciar búsqueda

Aparece el siguiente cuadro

Page 75: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -265-

Y continúe como con el Windows 7

MENU MODO CONECTADO

Menu de mantenimiento de base de datos alumnos

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

Case 2 conn.Open() Console.WriteLine("Ingrese el codigo del alumno a modificar") codalumno = Console.ReadLine() Console.WriteLine("Ingrese el NUEVO NOMBRE del alumno a modificar")

Page 76: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -266-

nombrealumno = Console.ReadLine() Console.WriteLine("Ingrese el NUEVA fecha de nacimiento '1/'1/1988'") FechaNac = Console.ReadLine() comando.CommandText = " UPDATE ALUMNOS SET NOMBREALUMNO ='" & nombrealumno & " ', FECHANAC=' " & FechaNac & "' WHERE CODALUMNO ='" & codalumno & " ' "

Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText) comando.ExecuteNonQuery() conn.Close()

Case 3 conn.Open() Console.WriteLine("Ingrese el codigo del alumno a Agregar") codalumno = Console.ReadLine() Console.WriteLine("Ingrese NOMBRE del alumno a insertar") nombrealumno = Console.ReadLine() Console.WriteLine("Ingrese fecha de nacimiento '1/'1/1988'") FechaNac = Console.ReadLine() comando.CommandText = " INSERT INTO ALUMNOS ( Codalumno,nombrealumno,fechanac) values ('" & codalumno & "' , '" & nombrealumno & "' , '" & FechaNac & "')"

Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText) 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 SubEnd Module

Page 77: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -267-

FOR EACH CON TRES TABLAS

Imports System.Data.SqlClientModule 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

Page 78: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -268-

da.Fill(ds, "ALUMNOS") da.SelectCommand.CommandText = "SELECT * FROM PAGOS " da.Fill(ds, "PAGOS") da.SelectCommand.CommandText = "SELECT * FROM CURSOS " da.Fill(ds, "CURSOS") Console.WriteLine(" nombre de dataset {0} ", ds.DataSetName) Console.WriteLine(" numero de tablas {0} ", ds.Tables.Count) For Each tabla In ds.Tables Console.WriteLine(" nombre de la tabla {0} ", tabla.TableName) For Each ColTabla In tabla.Columns Console.Write(" {0} ", ColTabla.ColumnName) Next Console.WriteLine() For Each filaTabla In tabla.Rows For Each ColTabla In tabla.Columns Console.Write(" {0} ", filaTabla.Item(ColTabla)) Next ColTabla Console.WriteLine()

Next filaTabla Next tabla Catch e As Exception Console.WriteLine("Error Occurred:" & e.ToString) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

MENU DE BASE DE DATOS EN FORMA DESCONECTADA

realizar el mantenimiento de la base de datos alumnos en forma desconectada usando dataset, datatable y/o dataview similar a la mostrada

Page 79: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -269-

Imports System.Data.SqlClientModule Module1 Sub Main() Dim cadenaconexion As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\alumnos.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" 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 ")

Page 80: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -270-

Opcion = Console.ReadLine() Select Case Opcion Case 1 nfilas = dt.Rows.Count ncol = dt.Columns.Count Console.WriteLine(" nombre de la tabla {0} ", dt.TableName) For col = 0 To ncol - 1 Console.Write(" {0} ", dt.Columns(col).ColumnName) Next Console.WriteLine() For fila = 0 To nfilas - 1 For col = 0 To ncol - 1 Console.Write(" {0} ", dt.Rows(fila).Item(col)) Next Console.WriteLine() Next

Case 2 ' modificar Console.WriteLine("Ingrese la fila de la tabla a modificar") pos = Console.ReadLine Console.WriteLine("Ingrese codigo de alumno a modifcar ") codalumno = Console.ReadLine() Console.WriteLine("Ingrese NOMBRE del alumno a insertar") nombrealumno = Console.ReadLine() Console.WriteLine("Ingrese fecha de nacimiento '1/'1/1988'") FechaNac = Console.ReadLine() ds.Tables(0).Rows(pos).Item(0) = codalumno ds.Tables(0).Rows(pos).Item(1) = nombrealumno ds.Tables(0).Rows(pos).Item(2) = FechaNac

Case 3 ' adicionar Console.WriteLine("Ingrese el codigo del alumno a Agregar") codalumno = Console.ReadLine() Console.WriteLine("Ingrese NOMBRE del alumno a insertar") nombrealumno = Console.ReadLine() Console.WriteLine("Ingrese fecha de nacimiento '1/'1/1988'") FechaNac = Console.ReadLine()

filaReg = dt.NewRow() filaReg("Codalumno") = codalumno filaReg(1) = nombrealumno filaReg(2) = FechaNac dt.Rows.Add(filaReg)

Case 4 Console.WriteLine("Ingrese la fila a eliminar") pos = Console.ReadLine filaReg = ds.Tables(0).Rows(Pos) filaReg.Delete() Case 5 conn.Open() Dim cbd As New SqlCommandBuilder(da)

Page 81: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -271-

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 SubEnd Module

TAREACrea una base de datos minimo 3 tablas y practique las Sentancias sqlLas sentencias sql puede practicar con EXCELAcceesSQL SERVER 2005Herramienta de visual basic 2008Con visual BASIC 2008 modo consola forma conectada y desconectadaCon visual basic modo formulario

EJECUCION DE CONSULTAS EN MODO CONSOLA

Imports System.Data.SqlClientModule Module1 Sub Main() Dim conn As SqlConnection = New SqlConnection("Data Source=.\sqlexpress;Integrated Security=True;database=alumnos") Dim Opcion As Integer Dim consulta As String Dim comando As SqlCommand = New SqlCommand("", conn) Dim rdr As SqlDataReader Dim nrocol As Integer Try Do Console.WriteLine(" 1. Consulta Seleccion 2 salir") Console.WriteLine(" Ingrese opcion ") Opcion = Console.ReadLine() Select Case Opcion Case 1 conn.Open() Console.WriteLine(" Escriba su consulta") consulta = Console.ReadLine comando.CommandText = consulta Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText) rdr = comando.ExecuteReader nrocol = rdr.FieldCount For i = 0 To nrocol - 1 Console.Write("{0} ", rdr.GetName(i).ToString.PadRight(10))

Page 82: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -272-

Next Console.WriteLine() 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() End Select Loop Until Opcion = 2 Catch ex As SqlException Console.WriteLine(ex) Finally conn.Close() Console.WriteLine("Conneccion cerrada.") End Try Console.ReadLine() End SubEnd Module

Se tiene una base alumnos llamado empresa que tiene una tabla llamada trabajadores que tiene la Siguiente estructura

Page 83: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -273-

Preguntas Listar los funcionariosSELECT * FROM TRABAJADORES WHERE TIPO = 3Promedio de sueldo por sexoPromedio de sueldo por tipoCual es el trabajador mas antiguo

Elaborar un programa en modo consola que obtenga los siguientes datosa) Cantidad de trabajadores por cada tiposb) Datos del trabajador que gana masc) Elaborar 3 listados uno de cada tipod) Dado el código del trabajador que me muestre los dato de ese registroe) Filtrar por nombre

Obtener los siguientes datos pero con codigo

Page 84: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -274-

Imports System.Data.SqlClientModule Module1 Sub Main() Dim connstring As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\alumnos.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim sql As String = "SELECT * FROM PAGOS " Dim conn As SqlConnection = New SqlConnection(connstring) Try conn.Open() Dim i As Integer 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") Dim nfilas As Integer = ds.Tables(0).Rows.Count Dim ncol As Integer = ds.Tables(0).Columns.Count Dim ntablas As Integer = ds.Tables.Count Console.WriteLine(" numero de tablas de dataset {0}", ntablas) Console.WriteLine(" numero de filas de esa consulta {0}", nfilas) Console.WriteLine(" {0} {1} {2}", ds.Tables(0).Columns(0).ColumnName, ds.Tables(0).Columns(1).ColumnName, ds.Tables(0).Columns(2).ColumnName) Dim SUMA As Single = 0 Dim MAYOR As Single = -1000 Dim MONTO As Single For i = 0 To nfilas - 1 With ds.Tables(0).Rows(i) MONTO = .Item(3) Console.WriteLine(" {0} {1} {2} ", .Item(0), .Item(2), .Item(3)) SUMA = SUMA + MONTO If MONTO > MAYOR Then MAYOR = MONTO End If End With Next Console.WriteLine("LA SUMA ES {0} ", SUMA) Console.WriteLine("el mayor es {0} ", MAYOR) Catch e As Exception Console.WriteLine("Error Occurred:" & e.ToString) Finally conn.Close() End Try Console.ReadLine() End SubEnd Module

Page 85: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -275-

Practica 4PROCEDIMIENTOS ALMACENADOSCrear 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 ServerListar la tabla alumnos usando proveedor de datos SQLServerListar la tabla alumnos usando proveedor de datos OLEDBListar la tabla alumnos usando proveedor de datos ODBCHACIENDO 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.

EJECUTANDO COMANDOSCrear 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 comandosMetodos de ejecución de comandosobtener un solo valor execute scalarEjecutar comandos con varios resultados. ExecuteReader() la clase SqlDataReaderEjecutar sentencias de modificación de datos método ExecuteNonQuery. Uso de parámetros de comandoUSANDO DATA READERSMostrar un campo , varios campos,etc de una tablaUtilizando los indizadores ordinales.Uso de columnas indexado por nombreUtilizando 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 nextEjemplo mostrar el elemento de la fila y columna determinada

Page 86: Si2011a 4ado Modo Consola (1)

Guía de prácticas de SI2012A \parte 4 ADO NET Modo Consola \Ismael Véliz Vilca -276-

Mostrar todas las tablasfiltrando 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 XMLRellenar una tabla de datos con un adaptador de datosUso de for eachMenu de mantenimiento de base de datos alumnos modo conectadoMenu de mantenimiento de base de datos alumnos modo desconectadoEJECUCION DE CONSULTAS EN MODO CONSOLAObtener datos con códigoEjemplo sumar los montos e,tc de los trabajadores