Archivo Mod_sql.vb

' EJERCICIO DE CONEXION A BD DE SQL SERVER EN CONSOLA
' Antes de ejecutarlo por primera vez, hay que crear
' una nueva base de datos, llamada pruebasDB
' que contenga 3 tablas:
' - Prueba1: tabla que es modificada desde el programa
' - Prueba2: registros que el programa copia a Prueba1
' - Prueba3: registros de reserva
'
' Las 3 tablas han de tener la misma estructura:
' - Nombre: campo de texto, max. 40 caracteres
' - Teléfono: campo de texto, max. 9 caracteres
'
' 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),
' 
Namespace Sql_Server
    '
    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 SQL SERVER EN CONSOLA
' Antes de ejecutarlo por primera vez, hay que crear
' una nueva base de datos, llamada pruebasDB
' que contenga 3 tablas:
' - Prueba1: tabla que es modificada desde el programa
' - Prueba2: registros que el programa copia a Prueba1
' - Prueba3: registros de reserva
'
' Las 3 tablas han de tener la misma estructura:
' - Nombre: campo de texto, max. 40 caracteres
' - Teléfono: campo de texto, max. 9 caracteres
'
' 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.SqlClient
'
Namespace Sql_Server
    '
    Module Mod_sql2
        '
#Region " Declaración de variables"
        '
        ' Objeto conexión de tipo SQL
        Private con As SqlConnection = New SqlConnection
        ' Objeto de comando, permite ejecutar las sentencias SQL
        Private com As SqlCommand = New SqlCommand
        ' 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 SqlDataReader
        ' 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()
            '
            ' Connect Timeout configura los segundos que el programa esperará
            ' a establecer la conexión antes de lanzar una excepción
            ' (sólo se puede usar en las clases SQL, no en OleDb)
            con.ConnectionString = "Server=home;Database=pruebasDB;Trusted_Connection=True;Connect Timeout=2;"
            Console.WriteLine("")
            letrero = "CONEXION A UNA BASE DE DATOS DE SQL SERVER - 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 SQL"
            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("--- Pulsa INTRO para seguiry crear la tabla ""Prueba1"" ---")
                Console.ReadLine()
                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()
            '
            ' Variable para contener el texto del comando de inserción
            ' y mostrarlo en pantalla. Las sentencias INSERT se envían
            ' de una en una (ver más abajo) en vez de todas juntas.
            Dim insertar As String
            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 Mengano Menganito K
            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.Write("--- Escribe un nombre adecuado y pulsa INTRO")
                Console.WriteLine("")
                n1 = Console.ReadLine()
                Console.WriteLine("")
            End While
            Console.Write("--- 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 SQL"
            Console.WriteLine(letrero)
            Console.WriteLine("=".PadLeft(letrero.Length, "="))
            Console.WriteLine("")
            com.Dispose()
            con.Close()
            Console.WriteLine("Conexión SQL 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

Volver al artículo

ir al índice