Archivo Mod_sql.vb
' EJERCICIO DE CONEXION A BD DE ACCESS EN CONSOLA
' Antes de ejecutarlo por primera vez, hay que crear
' una nueva base de datos, llamada pruebasDB.mdb
' que contenga 3 tablas:
' - Prueba1: tabla que es modificada desde el programa
' - Prueba2: registros que el programa copia a Prueba1
' - Prueba3: tabla de reserva con todos los registros originales
'
' Las 3 tablas han de tener la misma estructura:
' - Nombre: campo de texto, max. 40 caracteres
' - Teléfono: campo de texto, max. 10 caracteres
'
' pruebasDB.mdb ha de estar en la carpeta \bin del proyecto.
' La tabla Prueba1 puede estar vacía, pero la tabla Prueba2 ha de
' tener registros.
'
' Espacios de nombres (NAMESPACE): es la manera que tiene .NET
' de organizar componentes cuyo código ha de ser compartido.
' Las clases que forman parte de .NET se agrupan, para mejor funcionalidad,
' en unidades de orden superior (Namespace).
' Declarando un mismo Namespace para ambos módulos de la aplicación,
' es posible compartir objetos entre ellos.
' Este módulo sólo contiene el procedimiento de entrada al programa (Main),
' el otro módulo contiene los procedimientos que realizan casi todo el trabajo
'
Namespace Access_Sql
'
Module Mod_sql
'
' Procedimiento Main, es la entrada al programa
Sub Main()
'
Try
'
' Procedimiento principal: conexión con la BD, comandos SQL, etc.
Call manejoSQL()
'
' mostrar errores y permitir salir del programa
Catch pollo As Exception
Console.WriteLine("ERROR: " & pollo.Message)
Console.WriteLine("")
Console.WriteLine(" ------------------------")
Console.WriteLine("| Pulsa INTRO para salir |")
Console.WriteLine(" ------------------------")
Console.ReadLine()
Return ' salir del programa
End Try
'
' terminar el programa
Console.WriteLine("")
Console.WriteLine("")
Console.WriteLine(" ------------------------")
Console.WriteLine("| Pulsa INTRO para salir |")
Console.WriteLine(" ------------------------")
Console.ReadLine()
End Sub
'
End Module
'
End Namespace
Archivo Mod_sql2.vb
' EJERCICIO DE CONEXION A BD DE ACCESS EN CONSOLA
' Antes de ejecutarlo por primera vez, hay que crear
' una nueva base de datos, llamada pruebasDB.mdb
' que contenga 3 tablas:
' - Prueba1: tabla que es modificada desde el programa
' - Prueba2: registros que el programa copia a Prueba1
' - Prueba3: tabla de reserva con todos los registros originales
'
' Las 3 tablas han de tener la misma estructura:
' - Nombre: campo de texto, max. 40 caracteres
' - Teléfono: campo de texto, max. 9 caracteres
'
' pruebasDB.mdb ha de estar en la carpeta \bin del proyecto.
' La tabla Prueba1 puede estar vacía, pero la tabla Prueba2 ha de
' tener registros.
'
' Espacios de nombres (NAMESPACE): es la manera que tiene .NET
' de organizar componentes cuyo código ha de ser compartido.
' Las clases que forman parte de .NET se agrupan, para mejor funcionalidad,
' en unidades de orden superior (Namespace).
' Declarando un mismo Namespace para ambos módulos de la aplicación,
' es posible compartir objetos entre ellos.
' Este módulo contiene los procedimientos que realizan casi todo el trabajo,
' el otro módulo sólo contiene el procedimiento de entrada al programa (Main),
'
Imports System
Imports System.Data
Imports System.Data.OleDb
'
Namespace Access_Sql
'
Module Mod_sql2
'
#Region " Declaración de variables"
'
' Objeto conexión de tipo OleDb
Private con As OleDbConnection = New OleDbConnection
' Objeto de comando, permite ejecutar las sentencias SQL
Private com As OleDbCommand = New OleDbCommand
' Las clases pueden ser abstractas ("abstract") o selladas ("sealed", precintadas):
' - una clase abstracta requiere una clase derivada para proporcionar una implementación.
' - una clase sellada no admite una clase derivada.
' DataReader es una clase precintada o sellada, no se puede heredar de ella
Private col As OleDbDataReader
' Variables para las columnas de la tabla
Private nom, tel As String ' valores de cadena
Private ide As Integer ' valor autonumérico (ver más adelante)
' Variable para contar por las columnas de la tabla
Private i As Integer
' Variables para contener lo que teclea el usuario
Private n1, t1 As String
' Variable para contener avisos al usuario
Private letrero As String
'
#End Region
'
#Region " Procedimiento principal: conexión con la BD, comandos SQL, etc... "
'
Sub manejoSQL()
'
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=pruebasDB.mdb;"
Console.WriteLine("")
letrero = "CONEXION A UNA BASE DE DATOS DE MICROSOFT ACCESS - COMANDOS SQL"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
' El método PadLeft actúa sobre una cadena colocándola a la derecha
' y rellenando espacio a la izquierda con el carácter especificado en su
' argumento 2º repiténdolo el nº de veces que especifica su argumento 1º:
' en este caso coloca el carácter = a la derecha y rellena a su
' izquierda con tantos caracteres = como tiene la longitud de letrero
Console.WriteLine("")
Console.WriteLine("")
'
letrero = "1 --- Nueva conexión OLEDB"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & con.ConnectionString & """")
Console.WriteLine("")
con.Open()
Console.WriteLine("Conexión abierta.")
Console.WriteLine("")
'
' Asignar el comando a la conexión creada
com.Connection = con
'
' Los objetos de comando tienen distintos métodos de ejecución:
' - visualizar los datos: ExecuteReader() ejecuta una sentencia SQL y
' devuelve un objeto OleDbDataReader con los datos (se captura su valor de retorno)
' - modificar los datos: ExecuteNonQuery() ejecuta una sentencia SQL
' que no devuelve datos(DELETE, UPDATE, INSERT...) (no se captura su valor de retorno)
' - devolver un valor único (una única columna) después de ejecutar
' una sentencia SELECT: ExecuteScalar()
'
Try
' Primero se borra la tabla Prueba1 para que no haya error al crearla
com.CommandText = "DROP TABLE Prueba1;"
letrero = "2 --- Borrar la tabla ""Prueba1"""
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
com.ExecuteNonQuery()
Catch pollo2 As Exception
' Seguir con el paso siguiente si no existe la tabla Prueba1
Console.WriteLine("ERROR AL BORRAR LA TABLA: la tabla ""Prueba1"" no existe. " & vbCrLf & _
"Este ejercicio requiere una tabla ""Prueba1"" en la base de datos.")
'Console.WriteLine("ERROR: " & pollo2.Message)
Console.WriteLine("")
Console.WriteLine("")
Console.WriteLine("--- Pulsa INTRO para seguir y crear la tabla ""Prueba1"" ---")
Console.WriteLine("")
' El programa se detiene hasta que se pulsa INTRO
Console.ReadLine()
End Try
'
' Crear la tabla Prueba1 con 3 campos (Id, Nombre, Teléfono).
' El campo Id se declara como:
' - Tipo: entero (INTEGER)
' - IDENTITY: la propia base de datos va asignando valores incrementalmente
' por lo que no se declaran explícitamente en los comandos SQL. Es
' equivalente al campo Autonumérico de Microsoft Access
' - PRIMARY KEY: es la clave primaria de la tabla
'
com.CommandText = "CREATE TABLE Prueba1 " & _
"(Id INTEGER IDENTITY PRIMARY KEY, Nombre VARCHAR(40), Teléfono CHAR(9));"
letrero = "3 --- Crear la tabla ""Prueba1"""
' Variable para contener el texto del comando de inserción
' y mostrarlo en pantalla con saltos de línea para mejor visibilidad
Dim insertar As String
insertar = "CREATE TABLE Prueba1 " & vbCrLf & _
"(Id INTEGER IDENTITY PRIMARY KEY, " & vbCrLf & _
"Nombre VARCHAR(40), " & vbCrLf & _
"Teléfono CHAR(9));"
letrero = "3 --- Crear la tabla ""Prueba1"""
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & insertar & """")
Console.WriteLine("")
com.ExecuteNonQuery()
Console.WriteLine("")
Console.WriteLine("--- Pulsa INTRO para seguir")
Console.ReadLine()
'
insertar = "INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('AEK Group INC', '923652547');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Orion Capital Corp.', '900125458');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('IBM', '956985447');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('ACE Hardware Corp.', '945896325');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Baxter International Inc.', '936521452');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Lockheed Martin Corp.', '903056898');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Bay Networks Inc.', '985654125');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('MCI Communications Corp.', '900326587');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('BDO Seidman LLP', '978563214');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Caterpillar Inc.', '932655096');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Data General Corp.', '955561023');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Gateway Inc.', '993201145');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Hewlett-Packard Co.', '975556912');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('ICF Kaiser International Inc.', '990023654');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('ADI Systems Inc.', '922569687');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Ikon Office Solutions Inc.', '914525890');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('J.P. Morgan and Co. Inc.', '922258961');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Kansas City Southern Industries Inc.', '926352145');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Dayton Hudson Corp.', '987654789');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Eastman Kodak Co.', '933655896');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Case Corp.', '900125458');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Eaton Corp.', '923659654');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Medtronic Inc.', '900125458');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Mellon Bank Corp.', '900125458');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Edison International', '944456902');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Fifth Third BanCorp', '920126301');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Ohio Casualty Corp.', '900125458');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Paine Webber Group Inc.', '999521477');"
' Comandos de inserción (insertan registros nuevos en la tabla)
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('AEK Group INC', '923652547');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Orion Capital Corp.', '900125458');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('IBM', '956985447');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('ACE Hardware Corp.', '945896325');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Baxter International Inc.', '936521452');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Lockheed Martin Corp.', '903056898');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Bay Networks Inc.', '985654125');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('MCI Communications Corp.', '900326587');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('BDO Seidman LLP', '978563214');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Caterpillar Inc.', '932655096');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Data General Corp.', '955561023');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Gateway Inc.', '993201145');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Hewlett-Packard Co.', '975556912');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('ICF Kaiser International Inc.', '990023654');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('ADI Systems Inc.', '922569687');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Ikon Office Solutions Inc.', '914525890');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('J.P. Morgan and Co. Inc.', '922258961');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Kansas City Southern Industries Inc.', '926352145');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Dayton Hudson Corp.', '987654789');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Eastman Kodak Co.', '933655896');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Case Corp.', '900125458');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Eaton Corp.', '923659654');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Medtronic Inc.', '900125458');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Mellon Bank Corp.', '900125458');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Edison International', '944456902');"
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()
'
letrero = "4 --- Insertar registros nuevos"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & insertar & """")
Console.WriteLine("")
Console.WriteLine("--- Pulsa INTRO para seguir")
Console.ReadLine()
'
' Seleccionar todos los registros de la tabla
com.CommandText = "SELECT * FROM Prueba1"
letrero = "5 --- Mostrar registros"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
Console.WriteLine("--- Registros de la tabla Prueba1:")
'
' Procedimiento que muestra los nombres de columnas y los datos
Call mostrarDatos()
'
' Seleccionar todos los registros de la tabla ordenados por Nombre
com.CommandText = "SELECT * FROM Prueba1 ORDER BY Nombre"
letrero = "6 --- Mostrar registros ordenados por Nombre"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
Console.WriteLine("--- Registros de la tabla ordenados por Nombre:")
'
' Procedimiento que muestra los nombres de columnas y los datos
Call mostrarDatos()
'
' Modificar un registro, el que tiene por nombre Fulano Fulanito G
com.CommandText = "UPDATE Prueba1" & vbCrLf & _
"SET Nombre='Paragon Health Network Inc.', Teléfono='977589658' " & vbCrLf & _
"WHERE Nombre='J.P. Morgan and Co. Inc.';"
letrero = "7 --- Modificar 1 registro (""Paragon Health Network Inc."" por ""J.P. Morgan and Co. Inc."")"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
com.ExecuteNonQuery()
'
' Seleccionar todos los registros de la tabla
com.CommandText = "SELECT * FROM Prueba1"
Console.WriteLine("--- Mostrar registros modificados")
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
Console.WriteLine("--- Registros de la tabla Prueba1 modificada:")
'
' Procedimiento que muestra los nombres de columnas y los datos
Call mostrarDatos()
'
' Borrar un registro, el que tiene por nombre Eastman Kodak Co.
com.CommandText = "DELETE FROM Prueba1" & vbCrLf & _
"WHERE Nombre='Eastman Kodak Co.';"
letrero = "8 --- Eliminar 1 registro (Eastman Kodak Co.)"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
com.ExecuteNonQuery()
'
com.CommandText = "SELECT * FROM Prueba1"
Console.WriteLine("--- Mostrar registros modificados")
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
Console.WriteLine("--- Registros de la tabla Prueba1 modificada:")
'
' Procedimiento que muestra los nombres de columnas y los datos
Call mostrarDatos()
'
' Borrar un registro, el que tiene Id=6
com.CommandText = "DELETE FROM Prueba1" & vbCrLf & _
"WHERE Id=6;"
letrero = "9 --- Eliminar 1 registro (Id 6)"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
com.ExecuteNonQuery()
'
com.CommandText = "SELECT * FROM Prueba1"
Console.WriteLine("--- Mostrar registros modificados")
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
Console.WriteLine("--- Registros de la tabla Prueba1 modificada:")
'
' Procedimiento que muestra los nombres de columnas y los datos
Call mostrarDatos()
'
' 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()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Quest Diagnostics Inc.', '945896325');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Republic New York Corp.', '900325684');"
com.ExecuteNonQuery()
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('Reynolds Metals Co.', '990123657');"
com.ExecuteNonQuery()
'
insertar = "INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Parker Hannifin Corp.', '923652547');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Quest Diagnostics Inc.', '945896325');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Republic New York Corp.', '900325684');" & vbCrLf & _
"INSERT INTO Prueba1 (Nombre, Teléfono) " & vbCrLf & _
Space(3) & "VALUES ('Reynolds Metals Co.', '990123657');"
'
letrero = "10 --- Insertar registros nuevos"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & insertar & """")
Console.WriteLine("")
'
' Seleccionar todos los registros de la tabla
com.CommandText = "SELECT * FROM Prueba1"
Console.WriteLine("--- Mostrar registros")
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
Console.WriteLine("--- Registros de la tabla Prueba1:")
'
' Procedimiento que muestra los nombres de columnas y los datos
Call mostrarDatos()
'
' 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;"
letrero = "11 --- Insertar registros copiándolos desde otra tabla"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
com.ExecuteNonQuery()
'
' Seleccionar todos los registros de la tabla
com.CommandText = "SELECT * FROM Prueba1"
Console.WriteLine("--- Mostrar registros")
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
Console.WriteLine("--- Registros de la tabla Prueba1:")
' '
' Procedimiento que muestra los nombres de columnas y los datos
Call mostrarDatos()
'
' Insertar un registro solicitando Nombre y Teléfono al usuario
letrero = "12 --- Insertar un registro solicitando Nombre y Teléfono al usuario"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
Console.WriteLine("--- Escribe un nombre y pulsa INTRO")
Console.WriteLine("")
' Console.ReadLine() lee la siguiente línea de caracteres de la secuencia
' de entrada (la pantalla en este caso): lee la cadena que teclea el usuario
n1 = Console.ReadLine()
' Proponer un nombre en caso de que el usuario no teclee nada
If n1.Length = 0 Then
n1 = "Allman Brothers INC."
End If
Console.WriteLine("")
Console.WriteLine("(Se usará este nombre: """ & n1 & """)")
Console.WriteLine("")
' 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.")
Console.WriteLine("")
Console.WriteLine("--- Escribe un nombre adecuado y pulsa INTRO")
Console.WriteLine("")
n1 = Console.ReadLine()
Console.WriteLine("")
End While
Console.WriteLine("--- Escribe un número de teléfono y pulsa INTRO")
Console.WriteLine("")
t1 = Console.ReadLine()
' Proponer un teléfono en caso de que el usuario no teclee nada
If t1.Length = 0 Then
t1 = "922045883"
End If
Console.WriteLine("")
Console.WriteLine("(Se usará este Teléfono: """ & t1 & """)")
Console.WriteLine("")
Console.WriteLine("--- Pulsa INTRO para seguir")
' El programa se detiene hasta que se pulsa INTRO
Console.ReadLine()
' Restricción sencilla para evitar que el número introducido supere
' los 10 caracteres de tamaño máximo del campo correspondiente de la tabla
While t1.Length > 9
Console.WriteLine("ERROR: El número de teléfono no puede tener más de 9 caracteres.")
Console.WriteLine("")
Console.WriteLine("--- Escribe un número de teléfono adecuado y pulsa INTRO")
Console.WriteLine("")
t1 = Console.ReadLine()
Console.WriteLine("")
End While
'
' Comando de inserción (inserta un registro nuevo en la tabla)
com.CommandText = "INSERT INTO Prueba1 (Nombre, Teléfono) VALUES ('" & n1 & "', '" & t1 & "');"
com.ExecuteNonQuery()
Console.WriteLine("--- Comando: insertar registro")
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
'
' Seleccionar todos los registros de la tabla
com.CommandText = "SELECT * FROM Prueba1"
Console.WriteLine("--- Mostrar registros")
Console.WriteLine("")
Console.WriteLine("""" & com.CommandText & """")
Console.WriteLine("")
Console.WriteLine("--- Registros de la tabla Prueba1:")
'
' Procedimiento que muestra los nombres de columnas y los datos
Call mostrarDatos()
'
' Cerrar la conexión
Console.WriteLine("")
letrero = "13 --- Cerrar la conexión OLEDB"
Console.WriteLine(letrero)
Console.WriteLine("=".PadLeft(letrero.Length, "="))
Console.WriteLine("")
com.Dispose()
con.Close()
Console.WriteLine("Conexión OLEDB cerrada.")
'
End Sub
'
#End Region
'
#Region " Procedimiento que muestra en pantalla los nombres de columnas y los datos "
'
Sub mostrarDatos()
Console.WriteLine("")
' El objeto de comando tiene un método ExecuteReader() que
' devuelve un DataReader. El DataReader:
' - no puede trabajar en modo desconectado
' - es un objeto de sólo lectura
' - su finalidad es la de acceder lo más rápido posible a los datos
' - sólo permite movimiento hacia adelante a través de los registros
' - se usan bucles para recorrer el DataReader hasta el final
col = com.ExecuteReader()
Console.WriteLine("")
' 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 y una propiedad GetName
' que, para cada una de las columnas, devuelve su nombre.
'For i = 0 To (col.FieldCount - 1)
' Console.Write(col.GetName(i).ToUpper() & Space((i + 2) * 7.7))
'Next
' Subrayar los títulos de las columnas
Console.WriteLine(vbCrLf & "==" & Space(4) & "======" & Space(34) & "========")
'
' Otra manera de subrayar los nombres de columna:
' El método PadLeft actúa sobre una cadena colocándola a la derecha
' y rellenando espacio a la izquierda con el carácter especificado en su
' argumento 2º repiténdolo el nº de veces que especifica su argumento 1º:
' en este caso coloca el carácter = a la derecha y rellena a su
' izquierda con 42 caracteres =
'Console.WriteLine(vbCrLf & "=".PadLeft(42, "="))
'
' 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
' El métodoPadRight hace como PadLeft pero alineando a la izquierda
Console.WriteLine(ide.ToString.PadRight(6, " ") & nom.PadRight(40, " ") & 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()
Console.WriteLine("")
Console.WriteLine("--- Pulsa INTRO para seguir")
' El programa se detiene hasta que se pulsa INTRO
Console.ReadLine()
End Sub
'
#End Region
'
End Module
'
End Namespace