Unidad 6 Conectividad de Bases de Datos


Unidad 6 / 5 — Taller de Bases de Datos

Conectividad de Bases de Datos en SQL Server 2025

Conectores ODBC, ADO.NET, JDBC y Arquitecturas de Conexión en Lenguajes Huésped y Dispositivos Móviles

1. Importancia de la Conectividad en SQL Server 2025

La Conectividad de Bases de Datos es la capa de infraestructura que permite a aplicaciones externas (escritorio, web y móviles) comunicarse eficientemente con el Gestor de Base de Datos (SGBD).

En Microsoft SQL Server 2025, los mecanismos de conectividad han sido optimizados para ofrecer cifrado TLS 1.3 nativo y obligatorio por defecto, soporte directo para tokens de autenticación federada (Microsoft Entra ID / OAuth 2.0) y rendimiento acelerado para entornos multihilo.

Esquema de Arquitectura de Conexión

Aplicación Cliente (C#, Java, Python, Mobile) Driver / Middleware ODBC | ADO.NET | JDBC SQL Server 2025 Puerto 1433 / Tabular Data Stream (TDS) Cifrado Estándar TLS 1.3

6.1 Estándares y Controladores: ODBC, ADO.NET y JDBC

Existen tres estándares universales principales para conectar aplicaciones a Microsoft SQL Server:

ODBC (Open DB Connectivity)

Nivel: Lenguaje C / C++ nativo (Nivel de Sistema Operativo).

Estándar que utiliza un Administrador de Fuentes de Datos (DSN – Data Source Name). Ideal para lenguajes heredados o multiplataforma como C, C++, PHP y Python.

ADO.NET (Microsoft .NET)

Nivel: Nativo para el ecosistema .NET (C#, VB.NET, F#).

Proporciona un proveedor de datos optimizado (Microsoft.Data.SqlClient) que ofrece conexión directa por sockets sin intermediarios, soportando arquitecturas desconectadas mediante DataSet y DataAdapter.

JDBC (Java DB Connectivity)

Nivel: Nativo para Plataforma Java (JVM).

API estándar en Java que utiliza un controlador de tipo 4 (100% Java puro) enviado directamente sobre el protocolo TDS de SQL Server. Utiliza URLs de conexión estandarizadas.

Ejemplos de Implementación de Conexión

Conexión segura en C# utilizando el paquete moderno Microsoft.Data.SqlClient:

using System;
using Microsoft.Data.SqlClient;

class Program 
{
    static void Main() 
    {
        // Cadena de Conexión optimizada para SQL Server 2025
        string connectionString = "Server=localhost;Database=EmpresaDB_U5;Trusted_Connection=True;Encrypt=True;TrustServerCertificate=True;";

        using (SqlConnection connection = new SqlConnection(connectionString)) 
        {
            try 
            {
                connection.Open();
                Console.WriteLine("¡Conexión Exitosa a SQL Server 2025!");

                string query = "SELECT ProductoID, NombreProducto, PrecioUnitario FROM Productos";
                SqlCommand command = new SqlCommand(query, connection);

                using (SqlDataReader reader = command.ExecuteReader()) 
                {
                    while (reader.Read()) 
                    {
                        Console.WriteLine($"ID: {reader["ProductoID"]} | Nombre: {reader["NombreProducto"]} | Precio: ${reader["PrecioUnitario"]}");
                    }
                }
            } 
            catch (Exception ex) 
            {
                Console.WriteLine($"Error de Conexión: {ex.Message}");
            }
        }
    }
}

Conexión en Java utilizando el controlador JDBC oficial mssql-jdbc:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class App {
    public static void main(String[] args) {
        // URL de conexión JDBC para SQL Server
        String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=EmpresaDB_U5;integratedSecurity=true;encrypt=true;trustServerCertificate=true;";

        try (Connection con = DriverManager.getConnection(connectionUrl); 
             Statement stmt = con.createStatement()) {
            
            System.out.println("¡Conectado exitosamente con JDBC!");
            String SQL = "SELECT TOP 5 ClienteID, Nombre, Email FROM Clientes";
            ResultSet rs = stmt.executeQuery(SQL);

            while (rs.next()) {
                System.out.println(rs.getString("ClienteID") + " - " + rs.getString("Nombre") + " (" + rs.getString("Email") + ")");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Conexión en Python a través de ODBC con la librería pyodbc:

import pyodbc

# Configuración de parámetros ODBC para SQL Server 2025
conn_str = (
    "DRIVER={ODBC Driver 18 for SQL Server};"
    "SERVER=localhost;"
    "DATABASE=EmpresaDB_U5;"
    "Trusted_Connection=yes;"
    "Encrypt=yes;"
    "TrustServerCertificate=yes;"
)

try:
    conn = pyodbc.connect(conn_str)
    cursor = conn.cursor()
    print("Conexión ODBC establecida exitosamente.")

    cursor.execute("SELECT VentaID, TotalVenta, FechaVenta FROM Ventas")
    for row in cursor.fetchall():
        print(f"Venta #{row.VentaID} - Total: ${row.TotalVenta} - Fecha: {row.FechaVenta}")

    conn.close()
except Exception as e:
    print("Error al conectar mediante ODBC:", e)

6.2 Conectividad desde Lenguaje Huésped y Dispositivos Móviles

Un Lenguaje Huésped es aquel lenguaje de programación de propósito general (C#, Java, Python, Node.js) dentro del cual se embeben instrucciones SQL o llamadas a procedimentos almacenados.

¿Cómo se conectan las Aplicaciones Móviles a SQL Server?

Regla de Oro en Arquitectura Móvil: Los dispositivos móviles (Android/iOS) NUNCA deben conectarse directamente a SQL Server (puerto 1433) debido a riesgos graves de seguridad y latencia en redes inestables. En su lugar, utilizan una Arquitectura de 3 Capas (N-Tier) basada en APIs RESTful (Web API / Node.js / ASP.NET Core) con intercambio de datos en formato JSON.

Arquitectura Segura Móvil vs. Servidor de BD

App Móvil (Flutter / Android / iOS) HTTP/HTTPS (JSON) Servidor API REST / Web (ASP.NET Core / Node.js) Capa de Autenticación & DTOs ADO.NET / JDBC SQL Server 2025 Base de Datos

Ejemplo: API Backend en Node.js Express con `mssql`

Script de un servicio web backend que expone los datos de SQL Server a dispositivos móviles mediante peticiones HTTP REST en JSON:

const express = require('express');
const sql = require('mssql');

const app = express();
app.use(express.json());

// Configuración de Conexión a SQL Server 2025
const dbConfig = {
    user: 'AppMobileUser',
    password: 'SecurePassword123!',
    server: 'localhost',
    database: 'EmpresaDB_U5',
    options: {
        encrypt: true,
        trustServerCertificate: true
    }
};

// Endpoint REST accesible desde aplicaciones móviles
app.get('/api/productos', async (req, res) => {
    try {
        let pool = await sql.connect(dbConfig);
        let result = await pool.request()
            .query('SELECT ProductoID, NombreProducto, PrecioUnitario, Stock FROM Productos WHERE Stock > 0');
        
        // Retorna los resultados en formato JSON
        res.status(200).json(result.recordset);
    } catch (err) {
        res.status(500).send("Error de servidor: " + err.message);
    }
});

app.listen(3000, () => Console.log('API REST activa en puerto 3000'));

3. Examen Interactivo de Conocimientos (Unidad 6)

Responde las siguientes preguntas para poner a prueba los conceptos aprendidos sobre conectividad:

1. ¿Cuál es la mejor práctica recomendada para conectar una aplicación móvil (Android/iOS) a SQL Server 2025?

2. ¿Qué tecnología de conectividad ofrece el mayor rendimiento y soporte nativo sin capas intermedias dentro del ecosistema .NET (C#)?

3. En JDBC, ¿cuál es el protocolo nativo a nivel de red utilizado para comunicarse con Microsoft SQL Server?


Unidad 6 | Conectividad de Bases de Datos
Unidad 6 · SQL Server 2025

Conectividad de Bases de Datos

Aprende cómo las aplicaciones se conectan de forma segura, rápida y escalable con SQL Server 2025. Una conexión bien diseñada convierte datos en soluciones útiles.

SQL
DATA
2025

6.1 Tecnologías esenciales

Tres caminos para hablar con una base de datos

ODBC, ADO.NET y JDBC son puentes entre una aplicación y SQL Server. Cada uno traduce las solicitudes de tu software en operaciones que la base de datos puede entender.

ODBC

Open Database Connectivity es un estándar que permite a distintas aplicaciones conectarse a diferentes gestores de datos mediante controladores.

  • Sirve para: conectar software diverso.
  • Ventaja: alta compatibilidad.
  • Úsalo: en herramientas multiplataforma.
.NET

ADO.NET

Conjunto de componentes para el ecosistema .NET. Facilita conexiones, comandos, lectores de datos y transacciones desde C# o ASP.NET.

  • Sirve para: apps C# y ASP.NET.
  • Ventaja: integración nativa.
  • Úsalo: en ecosistema Microsoft.
J

JDBC

Java Database Connectivity ofrece a aplicaciones Java una interfaz estándar para ejecutar consultas y administrar resultados.

  • Sirve para: apps Java.
  • Ventaja: portabilidad.
  • Úsalo: en servicios empresariales Java.
Tecnología
ODBC
ADO.NET
JDBC
Compatibilidad
Mejor escenario
Herramientas mixtas
Aplicaciones .NET
Aplicaciones Java
Developer working remotely, coding on a laptop with phone in hand, showcasing modern work culture.
Una app móvil no debería exponer SQL Server directamente: una API segura administra el acceso, las reglas y los permisos.

6.2 Desde aplicaciones y dispositivos

Del lenguaje huésped a los datos

La conectividad suele ocurrir en capas. Una interfaz solicita datos, una aplicación procesa la lógica y un driver o servicio establece la comunicación controlada con SQL Server.

1

Aplicación web

El backend recibe la solicitud y usa un driver para comunicarse con SQL Server.

2

Lenguaje huésped

C#, Java, Python o PHP ejecutan consultas mediante bibliotecas de conexión.

3

App móvil

La app consume una API segura; la API protege la base de datos y administra permisos.

Esquema del proceso de conexión

UsuarioSolicita información
AplicaciónWeb, escritorio o móvil
Driver / APIODBC · ADO.NET · JDBC
SQL Server 2025Procesa y responde

SQL Server 2025

¿Por qué la conectividad importa tanto?

Seguridad

Autenticación, cifrado y permisos por rol.

Escalabilidad

Más usuarios sin perder control operativo.

ϟ

Rendimiento

Consultas eficientes y conexiones administradas.

Integración

Conecta datos con sistemas y servicios.

Compatibilidad

Funciona con tecnologías actuales y heredadas.

Guía práctica

Conecta una aplicación paso a paso

Sigue esta ruta para construir conexiones claras, seguras y fáciles de mantener.

Define el acceso

Identifica servidor, base de datos, puerto y método de autenticación.

Elige el driver

Selecciona ODBC, ADO.NET o JDBC según el lenguaje de tu proyecto.

Configura la cadena

Guarda los parámetros en un archivo seguro, nunca dentro del código público.

Abre la conexión

Solicita una conexión solo cuando sea necesaria y ciérrala al terminar.

Ejecuta consultas

Usa parámetros para evitar inyección SQL y obtener resultados seguros.

Valida y monitorea

Registra errores, mide tiempos y revisa permisos regularmente.

Practica

Ejercicios de refuerzo

Actividad 1 · Diseña la ruta

Imagina una tienda en línea con una app web. Describe el camino que sigue una consulta desde el usuario hasta SQL Server.

  • ¿Qué aplicación se conectará?
  • ¿Qué tecnología elegirías?
  • ¿Qué dato no debes exponer?

Actividad 2 · Elige la tecnología

Relaciona cada escenario con ODBC, ADO.NET o JDBC. Justifica tu decisión considerando el lenguaje y el tipo de aplicación.

  • Una app C# interna.
  • Un servicio Java empresarial.
  • Una herramienta de análisis diversa.

Evalúa tus conocimientos

Examen rápido de conectividad

Selecciona una respuesta por pregunta y revisa tu comprensión de los conceptos principales.

1. ¿Qué tecnología es especialmente adecuada para aplicaciones .NET?
2. ¿Cuál es una práctica segura al crear consultas?
3. En una app móvil, ¿qué capa debería comunicarse con la base de datos?

Unidad 6 · Conectividad de Bases de Datos · Aprende a conectar con criterio, seguridad y propósito.