ADO .NET y ASP .NET
Instrucciones SQL en una aplicación de consola.
Conexión a una BD de Access, visualización y manipulación de datos.
Objeto DataReader como lector de datos.
INTRODUCCIÓN
La programación en ADO .NET, la tecnología de .NET
para el acceso a datos, ha despertado gran interés y muchas personas se están iniciando
en ella. A pesar de tratarse de una tecnología que facilita enormemente la programación
en relación con las bases de datos, hay algunas dificultades que pueden retrasar
el aprendizaje del programador principiante, entre ellas, aprender el uso adecuado
del lenguaje SQL para realizar las tareas deseadas en los datos dentro de la aplicación
ASP .NET.
Pensando en esos programadores que empiezan el estudio de ADO .NET, propongo este
ejercicio, realizado en lenguaje Visual Basic .NET, basado en estas premisas:
FUNDAMENTOS DEL EJERCICIO
Los pasos para desarrollar el ejercicio son:
DESARROLLO DEL EJERCICIO
Imports System Imports System.Data Imports System.Data.OleDb
Private con As OleDbConnection = New OleDbConnection Private com As OleDbCommand = New OleDbCommand Private col As OleDbDataReader ' OleDbDataReader no se construye con New, a diferencia de OleDbConnection y OleDbCommand
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=pruebasDB.mdb;" con.Open()
com.CommandText = "DROP TABLE Prueba;" com.ExecuteNonQuery()
com.CommandText = "CREATE TABLE Prueba1 " & _ "(Id INTEGER IDENTITY PRIMARY KEY, Nombre VARCHAR(40), Teléfono CHAR(9));" com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Fifth Third BanCorp', '920126032');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Ohio Casualty Corp.', '900125458');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Paine Webber Group Inc.', '999521477');"
com.ExecuteNonQuery()
' siguen comandos...
' Seleccionar todos los registros de la tabla com.CommandText = "SELECT * FROM Prueba1" com.ExecuteNonQuery()Para mostrar los datos ordenados por el campo Nombre:
' Seleccionar todos los registros de la tabla ordenados por Nombre com.CommandText = "SELECT * FROM Prueba1 ORDER BY Nombre" com.ExecuteNonQuery()Para borrar un registro con el Nombre especificado:
' Borrar un registro, el que tiene por nombre Eastman Kodak Co. com.CommandText = "DELETE FROM Prueba1 WHERE Nombre='Eastman Kodak Co.';" com.ExecuteNonQuery()Para borrar un registro con el ID especificado:
' Borrar un registro, el que tiene Id=6 com.CommandText = "DELETE FROM Prueba1 WHERE Id=6;" com.ExecuteNonQuery()Para insertar nuevos registros (sin proporcionar valor para el campo Id):
' Comando de inserción (inserta registros nuevos en la tabla)
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Parker Hannifin Corp.', '923652547');"
com.ExecuteNonQuery()
Para insertar un registro nuevo solicitando Nombre y Teléfono
al usuario mediante el método Console.ReadLine(), que lee la siguiente
línea de caracteres de la secuencia de entrada (la pantalla en este caso), es
decir, lee la cadena que teclea el usuario:' Variable para contener lo que teclea el usuario
Dim n1 As String
Console.WriteLine("--- Escribe un nombre y pulsa INTRO")
n1 = Console.ReadLine()
' Restricción sencilla para evitar que el nombre introducido supere
' los 40 caracteres de tamaño máximo del campo correspondiente de la tabla
While n1.Length > 40
Console.WriteLine("ERROR: El nombre no puede tener más de 40 caracteres.")
End While
com.CommandText = "INSERT INTO Prueba1 (Nombre) VALUES ('" & n1 & "');"
com.ExecuteNonQuery()
Para insertar nuevos registros pero copiándolos desde otra tabla existente llamada
Prueba2 (ambas tablas, origen y destino de la copia, han de tener idéntica
estructura):' Comando de inserción (inserta 16 registros nuevos en la tabla copiándolos desde la tabla Prueba2) com.CommandText = "INSERT INTO Prueba1 SELECT Nombre, Teléfono FROM Prueba2;" com.ExecuteNonQuery()
' Mostrar los nombres de las columnas de la tabla
Console.Write(col.GetName(0).ToUpper() & Space(4) & _
col.GetName(1).ToUpper() & Space(34) & _
col.GetName(2).ToUpper())
'
' Otra manera de mostrar los nombres de las columnas de la tabla:
' el DataReader tiene una propiedad FieldCount que devuelve el nº
' de campos o columnas de la tabla.
'For i = 0 To (col.FieldCount - 1)
'Console.Write(col.GetName(i).ToUpper() & Space((i + 2) * 7.7))
'Next
col = com.ExecuteReader()
' recorrer el DataReader hacia adelante
While (col.Read)
' Se muestran 3 formas de obtener datos de un OleDbDataReader:
' - recuperación por índice, devuelve datos de la columna
' con el índice declarado (variables ide y nom), se usan
' 2 propiedades diferentes: Item(i) y GetValue(i)
' - recuperación por nombre, devuelve datos de la columna
' con el nombre declarado (variable tel)
ide = CInt(col.Item(0))
nom = CStr(col.GetValue(1))
tel = CStr(col("Teléfono"))
' Mostrar los datos en pantalla
Console.WriteLine(ide.ToString & " / " & nom & " / " & tel)
End While
'
' Otra manera de mostrar los datos en pantalla
'While (col.Read)
' Console.Write(col(0).ToString() & " / ")
' Console.Write(col(1).ToString() & " / ")
' Console.WriteLine(col(2).ToString())
'End While
' el DataReader debe ser cerrado explícitamente al terminar de leer
col.Close()
' Cerrar la conexión y los objetos de comando
com.Dispose()
con.Close()
Console.WriteLine("Conexión OLEDB cerrada.")
Código de la aplicación para BD de Microsoft Access
Código de la aplicación para BD de SQL Server
Aplicación completa en una solución de Visual Studio 2003 (tamaño: 65 KB)