Ejercicio: Conexión a la base de datos e incorporación de datos de ejemplo

Completado

Antes de conectar la base de datos a la aplicación, queremos confirmar que podemos conectarnos a ella, agregar una tabla básica y trabajar con datos de ejemplo.

Mantenemos la infraestructura, las actualizaciones de software y las revisiones para Azure SQL Database. Puede tratar la instancia de Azure SQL Database como haría con cualquier otra instalación de SQL Server. Por ejemplo, puede usar Visual Studio, SQL Server Management Studio, Azure Data Studio u otras herramientas para administrar la instancia de Azure SQL Database.

Cómo acceder a la base de datos y conectarla a la aplicación es decisión suya. Para obtener algo de experiencia trabajando con la base de datos, conectémoslo directamente a ella desde el portal, crear una tabla y ejecutar algunas operaciones CRUD básicas. Aquí aprenderá:

  • Qué es Cloud Shell y cómo se accede desde el portal.
  • Cómo acceder a información sobre la base de datos desde la CLI de Azure, incluidas las cadenas de conexión.
  • Cómo conectarse a la base de datos con sqlcmd.
  • Cómo inicializar la base de datos con una tabla básica y algunos datos de ejemplo.

¿Qué es Azure Cloud Shell?

Azure Cloud Shell es una experiencia de shell basado en el explorador para administrar y desarrollar recursos de Azure. Piense en Cloud Shell como una consola interactiva que se ejecuta en la nube.

En segundo plano, Cloud Shell se ejecuta en Linux. Pero en función de si prefiere un entorno de Linux o Windows, puede elegir entre dos experiencias: Bash y PowerShell.

Cloud Shell es accesible desde cualquier lugar. Además del portal, también puede acceder a Cloud Shell desde shell.azure.com, Azure Mobile App o Visual Studio Code.

Cloud Shell incluye herramientas y editores de texto populares. Esta es una breve descripción de las utilidades az, jq y sqlcmd, que son tres herramientas que usará en este ejercicio.

  • az también se conoce como la CLI de Azure. Es la interfaz de la línea de comandos para trabajar con recursos de Azure. Usará esta interfaz para obtener información sobre la base de datos, incluida la cadena de conexión.
  • jq es un analizador JSON de la línea de comandos. Canalizará la salida de los comandos az a esta herramienta para extraer campos importantes de la salida JSON.
  • sqlcmd permite ejecutar instrucciones en SQL Server. Usará sqlcmd para crear una sesión interactiva con su instancia de Azure SQL Database.

Obtención de información sobre la instancia de Azure SQL Database

Antes de conectarnos a la base de datos, se recomienda comprobar que existe y que está en línea.

Aquí usamos la utilidad az para enumerar las bases de datos y mostrar cierta información sobre la base de datos Logistics, incluido su estado y tamaño máximo.

  1. Los comandos az que se van a ejecutar requieren el nombre del grupo de recursos y el nombre del servidor lógico de Azure SQL. Para guardar las pulsaciones de teclas y no tener que escribirlos, ejecute el comando azure configure para especificarlos como valores predeterminados.

    Reemplace [server-name] por el nombre del servidor lógico de Azure SQL que creó y [resource-group] por el grupo de recursos que usó para el servidor.

    az configure --defaults group=[resource-group] sql-server=[server-name]
    

    Nota:

    Dependiendo del panel en el que estemos en el portal, el nombre del servidor SQL se puede mostrar como FQDN (p. ej., nombreDeServidor.database.windows.net). pero en este comando solo necesitamos el nombre lógico sin el sufijo .database.windows.net.

  2. Ejecute el siguiente comando az sql db list para mostrar todas las bases de datos en el servidor lógico de Azure SQL:

    az sql db list
    

    Veremos un gran bloque de JSON como salida.

  3. Como solo queremos ver los nombres de la base de datos ejecute el comando de nuevo. Pero esta vez canalice la salida a jq para mostrar solo los campos de nombre.

    az sql db list | jq '[.[] | {name: .name}]'
    

    Debería obtener esta salida:

    [
      {
        "name": "Logistics"
      },
      {
        "name": "master"
      }
    ]
    

    Logistics es la base de datos. Al igual que SQL Server, la base de datos del sistema master incluye los metadatos del servidor, como inicios de sesión y los valores de configuración del sistema.

  4. Ejecute el siguiente comando az sql db show para obtener detalles sobre la base de datos Logistics:

    az sql db show --name Logistics
    

    Igual que antes, verá un gran bloque de JSON como salida.

  5. Ejecute por segunda vez el comando. Esta vez, canalice la salida a jq para limitarla solo al nombre, tamaño máximo y estado de la base de datos Logistics.

    az sql db show --name Logistics | jq '{name: .name, maxSizeBytes: .maxSizeBytes, status: .status}'
    

    Verá que la base de datos está en línea y la cantidad máxima de datos que puede almacenar esta.

    {
      "name": "Logistics",
      "maxSizeBytes": 2147483648,
      "status": "Online"
    }
    

Conexión a la base de datos

Ahora que conoce un poco sobre la base de datos, vamos a conectarnos a ella mediante sqlcmd, crearemos una tabla que contiene información sobre conductores de transporte y realizaremos algunas operaciones CRUD básicas.

Recuerde que CRUD es el acrónimo de creación, lectura, actualización y eliminación, por sus siglas en inglés. Estos términos hacen referencia a las operaciones que se realizan en los datos de las tablas, y son las cuatro operaciones básicas que se necesitan en la aplicación. Este es un buen momento para comprobar que puede llevarlas a cabo.

  1. Ejecute el siguiente comando az sql db show-connection-string para llevar la cadena de conexión a la base de datos Logistics en un formato que sqlcmd puede usar:

    az sql db show-connection-string --client sqlcmd --name Logistics
    

    El resultado será similar al ejemplo siguiente. Copie esta salida para usarla en el paso siguiente.

    "sqlcmd -S tcp:<server-name>.database.windows.net,1433 -d Logistics -U <username> -P <password> -N -l 30"
    
  2. Ejecute la instrucción sqlcmd de la salida del paso anterior para crear una sesión interactiva. Quite las comillas circundantes y reemplace <username> y <password> por el nombre de usuario y la contraseña que especificó al crear la base de datos. Este es un ejemplo:

    sqlcmd -S tcp:<server-name>.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
    

    Sugerencia

    Coloque la contraseña entre comillas simples para que "&" y los demás caracteres especiales no se interpreten como instrucciones de procesamiento.

    Importante

    Es posible que vea un mensaje de error similar al ejemplo siguiente:

    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server:
    Cannot open server 'contoso' requested by the login.
    Client with IP address 'nnn.nnn.nnn.nnn' is not allowed to access the server.
    To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule
    on the master database to create a firewall rule for this IP address or address range.
    It may take up to five minutes for this change to take effect.
    

    Si este error se produce, tendrá que agregar otra regla de firewall para el cliente. Para ello, siga los pasos que se indican a continuación:

    • Inicie sesión en Azure Portal.

    • En la página Inicio de Azure, en Servicios de Azure, seleccione Todos los recursos. Aparece el panel Todos los recursos.

    • Busque y seleccione la base de datos. Se abre el panel Logistics de la base de datos SQL.

    • En la barra de menús superior, seleccione Establecer el firewall del servidor. Aparece el panel Redes.

    • En la sección Reglas de firewall, seleccione Agregar una regla de firewall. Aparece el panel Agregar una regla de firewall.

    • Especifique un nombre único en Nombre de la regla y escriba la dirección IP del mensaje de error en los campos IP inicial e IP final. Seleccione Aceptar.

    • Seleccione Guardar.

    • Vuelva a ejecutar la instrucción sqlcmd para iniciar la sesión interactiva sqlcmd. Debe tener un aspecto similar al siguiente ejemplo:

    sqlcmd -S tcp:<server-name>.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
    

    Ahora que ha iniciado la sesión de sqlcmd, los comandos restantes usan el lenguaje Transact-SQL o T-SQL.

    Sugerencia

    Al ejecutar los comandos de T-SQL en este módulo, es posible que el elemento GO en la segunda línea no se copie en el símbolo del sistema sqlcmd. Después de escribir la primera línea del comando, es posible que tenga que escribir en el comando GO. El comando T-SQL no se ejecutará sin él, así que asegúrese de ejecutar el comando GO.

  3. En la sesión sqlcmd, ejecute las siguientes instrucciones SQL para crear una tabla denominada Drivers:

    CREATE TABLE Drivers (DriverID int, LastName varchar(255), FirstName varchar(255), OriginCity varchar(255));
    GO
    

    La tabla contiene cuatro columnas: un identificador único, el apellido y el nombre del chofer y su ciudad de origen.

  4. Ejecute las siguientes instrucciones T-SQL para comprobar que la tabla Drivers existe:

    SELECT name FROM sys.tables;
    GO
    

    Debería obtener esta salida:

    name
    --------------------------------------------------------------------------------------------------------------------------------
    Drivers
    
    (1 rows affected)
    
  5. Para probar la operación de creación, ejecute las siguientes instrucciones T-SQL para agregar una fila de ejemplo a la tabla:

    INSERT INTO Drivers (DriverID, LastName, FirstName, OriginCity) VALUES (123, 'Zirne', 'Laura', 'Springfield');
    GO
    

    Esta salida indica que la operación se realizó correctamente:

    (1 rows affected)
    
  6. Para ejecutar la operación de lectura, ejecute las siguientes instrucciones T-SQL para enumerar las columnas DriverID y OriginCity de todas las filas de la tabla:

    SELECT DriverID, OriginCity FROM Drivers;
    GO
    

    Verá un resultado con DriverID y OriginCity para la fila que creó en el paso anterior.

    DriverID    OriginCity
    ----------- --------------------------
            123 Springfield
    
    (1 rows affected)
    
  7. Para probar la operación de actualización, ejecute las siguientes instrucciones T-SQL para cambiar la ciudad de origen de "Springfield" a "Boston" para el conductor con DriverID de 123:

    UPDATE Drivers SET OriginCity='Boston' WHERE DriverID=123;
    GO
    
  8. Ejecute las siguientes instrucciones T-SQL para volver a mostrar las columnas DriverID y OriginCity:

    SELECT DriverID, OriginCity FROM Drivers;
    GO
    

    Debería obtener esta salida. Fíjese en que OriginCity refleja la actualización a Boston.

    DriverID    OriginCity
    ----------- --------------------------
            123 Boston
    
    (1 rows affected)
    
  9. Por último, pruebe la operación de eliminación ejecutando las siguientes instrucciones T-SQL para eliminar el registro:

    DELETE FROM Drivers WHERE DriverID=123;
    GO
    
    (1 rows affected)
    
  10. Ejecute las siguientes instrucciones T-SQL para comprobar que la tabla Drivers está vacía:

    SELECT COUNT(*) FROM Drivers;
    GO
    

    Verá que la tabla no contiene ninguna fila.

    -----------
              0
    
    (1 rows affected)
    

Ahora que ya tiene una idea general sobre cómo trabajar con Azure SQL Database desde Cloud Shell, puede obtener la cadena de conexión de su herramienta de administración de SQL favorita, independientemente de si es de SQL Server Management Studio, Visual Studio u otro.

Cloud Shell permite que sea más sencillo acceder a los recursos de Azure y trabajar con ellos. Como Cloud Shell se basa en el explorador, puede acceder desde Windows, macOS o Linux; básicamente cualquier sistema con un explorador web.

Obtuvo experiencia práctica ejecutando comandos de la CLI de Azure para obtener información sobre la instancia de Azure SQL Database. Como ventaja extra, ha practicado sus aptitudes de T-SQL.

En la siguiente unidad, recapitularemos este módulo y describiremos cómo desmontar nuestra base de datos.