Unidad 6 Conectividad 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
6.1 Estándares y Controladores: ODBC, ADO.NET y JDBC
Existen tres estándares universales principales para conectar aplicaciones a Microsoft SQL Server:
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.
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.
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
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?
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.
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.
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.
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.
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.
Aplicación web
El backend recibe la solicitud y usa un driver para comunicarse con SQL Server.
Lenguaje huésped
C#, Java, Python o PHP ejecutan consultas mediante bibliotecas de conexión.
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
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.