Actualizar una aplicación de SQL Server 2019 a SQL Server 2022 y al controlador ODBC Driver 18 suele ser un proceso directo, pero cuando se despliega en una máquina virtual limpia pueden surgir fallos inesperados si faltan redistribuibles nativos o el runtime de .NET. A continuación se explica por qué ocurre y cómo resolverlo.
Resumen del problema
Una aplicación C#/.NET que se conectaba a SQL Server 2019 fue recompilada para admitir SQL Server 2022 y el controlador Microsoft ODBC Driver 18 for SQL Server. Al probarla en una VM limpia donde solo se instaló el controlador, la aplicación se bloqueó al iniciar. Sin embargo, el problema desapareció al instalar Visual Studio 2022 en la misma VM. Esto hace pensar que existe una dependencia “mágica” entre SQL Server 2022, Visual Studio 2022 y el controlador ODBC 18, pero la realidad es más simple: Visual Studio instala, de forma incidental, varios componentes en tiempo de ejecución que su aplicación necesita.
¿Existe dependencia obligatoria entre SQL Server 2022, Visual Studio 2022 y ODBC 18?
No. SQL Server 2022 es el motor de base de datos; Visual Studio 2022 es un entorno de desarrollo integrado; y ODBC Driver 18 es un proveedor de conectividad. La única relación directa es que el proveedor pueda aprovechar características nuevas del servidor (TLS 1.2, Always Encrypted, compatibilidad con IPv6, etc.).
La confusión surge porque Visual Studio incluye redistribuibles como:
- Microsoft Visual C++ Redistributable 2015‑2022 (x86/x64)
- Bibliotecas de tiempo de ejecución de .NET (si instala cargas de trabajo .NET)
- Herramientas de diagnóstico que registran dependencias faltantes
Cuando la aplicación se ejecuta sin estas DLL, el sistema lo considera un error de carga y Windows genera un mensaje ambiguo (“la aplicación dejó de funcionar”) sin indicar la DLL que falta. Al instalar Visual Studio se copian automáticamente los redistribuibles y el problema desaparece, lo que lleva a la conclusión equivocada de que Visual Studio es un requisito.
Tabla de soluciones y recomendaciones principales
Tema | Respuesta / Acción recomendada |
---|---|
¿Es necesario instalar Visual Studio 2022 para que la aplicación se ejecute? | No. Visual Studio solo es útil en tiempo de desarrollo (depurador, SSDT, perfilado). Instalarlo “arregla” el error porque aporta redistribuibles de VC++ y .NET que su aplicación necesita. Incluya estos componentes en el instalador de la aplicación y Visual Studio dejará de ser necesario. |
Componentes que suelen faltar | .NET Runtime correspondiente a la versión objetivo (ej.: .NET 6 Runtime o .NET Framework 4.8). Microsoft Visual C++ Redistributables 2015‑2022 (x86 y/o x64). Microsoft ODBC Driver 18 para SQL Server (ya instalado). Cualquier otra DLL nativa que su proyecto referencie (revíselo con Dependency Walker, ProcMon o Process Explorer). |
SQL Server Native Client (SNAC) | Fue deprecado y eliminado del instalador de SQL Server 2022 y SSMS 19. No es obligatorio cuando se usa ODBC 18 y no debe emplearse en nuevos desarrollos salvo que exista código heredado que invoque explícitamente SQLNCLI o SQLNCLI11 . |
Cadena de conexión recomendada | Use Driver={ODBC Driver 18 for SQL Server};Server=tcp:miServidor.database.windows.net,1433;Database=MiBD; .Para entornos de laboratorio añada TrustServerCertificate=yes ; en producción configure certificados TLS válidos. |
Pruebas recomendadas | Genere una VM limpia (Windows Server 2022 o Windows 10/11) sin Visual Studio. Instale solo el .NET Runtime, los VC++ Redistributables y ODBC 18. Ejecute la aplicación y revise el Visor de eventos o el registro de errores de .NET (%LOCALAPPDATA%\CrashDumps ) para detectar DLL faltantes. Añada la dependencia detectada al instalador (MSI, MSIX, ClickOnce, Wix). |
Buenas prácticas de despliegue | Distribuya su aplicación mediante un instalador que incluya todas las dependencias nativas y administradas. Automatice pruebas en entornos “mínimos” (CI/CD) para detectar faltantes antes de producción. Mantenga los controladores (ODBC 18 u OLE DB Driver 19) actualizados. |
Diagnóstico paso a paso de DLL faltantes
Si la aplicación falla con un error genérico, siga estos pasos:
- Habilite volcados de usuario creando la clave de registro
HKLM\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps
y estableciendoDumpFolder
. - Ejecute la aplicación: al fallar se genera un archivo
.dmp
. Ábralo con WinDbg y busque excepciones0xC0000135
o0xC0000139
(DLL no encontrada). - Con Dependency Walker (o su alternativa moderna Dependencies) analice el ejecutable para encontrar DLL en rojo.
- Copie o instale la versión correcta de la DLL (suele ser
vcruntime140.dll
omscoree.dll
).
Versiones mínimas de componentes recomendadas
Aunque SQL Server 2022 funciona con controladores antiguos, Microsoft recomienda emparejar la versión de motor y controlador para aprovechar nuevas características de seguridad y rendimiento.
Componente | Versión mínima | Notas |
---|---|---|
Microsoft ODBC Driver for SQL Server | 18.3 | Soporta TLS 1.2, Azure AD MFA y Always Encrypted. |
MS OLE DB Driver for SQL Server | 19.3 | Reemplazo del antiguo SQLOLEDB. |
.NET Runtime | .NET 6 LTS o .NET Framework 4.8 | .NET 8 LTS desde noviembre 2024. |
Visual C++ Redistributable | 14.38 (2022) | Paquete unificado 2015‑2022. |
SQL Server Native Client (SNAC): estado actual
SNAC fue marcado como retired en la documentación oficial y retirado del instalador desde SQL Server 2012. En SQL Server 2022 no existe la carpeta C:\Program Files\Microsoft SQL Server\130\Tools\Binn
que contenía sqlncli11.dll
. Si una aplicación lo necesita se debe instalar manualmente el paquete heredado (no recomendado) o migrar a:
- Microsoft ODBC Driver 18 for SQL Server para código ODBC.
- MS OLE DB Driver for SQL Server 19 para aplicaciones OLE DB/ADO Classic.
Entre las ventajas de migrar: soporte oficial, actualizaciones de seguridad, cifrado moderno y compatibilidad con autenticación de Azure.
Cadenas de conexión recomendadas con ODBC 18
Driver={ODBC Driver 18 for SQL Server};
Server=tcp:miServidor.database.windows.net,1433;
Database=MiBD;
Uid=usuario;Pwd=MiContraseña;
Encrypt=yes;
TrustServerCertificate=no;
Añada Authentication=ActiveDirectoryIntegrated
o Authentication=ActiveDirectoryMsi
cuando use Azure AD. Si se conecta a un servidor on‑premises sin CA interna configure TrustServerCertificate=yes
.
Cómo crear un instalador robusto
Existen múltiples tecnologías de empaquetado; todas cumplen el mismo objetivo: incluir los redistribuibles que faltan. Opciones comunes:
- Wix Toolset: define un
.wxs
conBundle
yChain
que agregue .NET Runtime, VC++ Redistributables y ODBC 18. Puede condicionar la instalación a la versión del sistema operativo. - MSIX Packaging Tool: captura la instalación, firma el paquete y simplifica las actualizaciones.
- ClickOnce: ideal para aplicaciones WinForms/WPF pequeñas; publica automáticamente dependencias detectadas.
- Inno Setup o NSIS: scripts sencillos; útil si el proyecto no requiere MSI.
Cualquiera de estas herramientas permite ejecutar línea de comandos silenciosas como:
vc_redist.x64.exe /install /quiet /norestart
o referenciar instaladores redistributable merge modules.
Automatización CI/CD y pruebas en entorno mínimo
- Incorpore en la canalización de build (Azure Pipelines, GitHub Actions, Jenkins) un paso que genere la imagen base de la VM o contenedor Docker con Packer o Dockerfile.
- Ejecute pruebas de integración con un contenedor de SQL Server 2022 Linux o con
sqlcmd
para validar la cadena de conexión. - Suba el artefacto firmado (MSIX o MSI) a la release y emplee winget para la distribución interna.
- Implemente pruebas de humo que verifiquen la abertura de conexión con
IDbConnection.Open()
y sentenciaSELECT 1
.
Impacto de TLS 1.2 y versiones de cifrado
SQL Server 2022 y ODBC 18 requieren TLS 1.2 habilitado en el servidor y el cliente. Si la máquina cliente ejecuta Windows 7 o Windows Server 2008 R2 asegúrese de instalar:
- KB3140245 (cifrado TLS 1.1/1.2)
- KB4056568 (actualización de racv2)
En entornos modernos (Windows 10 1909 y superior) TLS 1.2 está activado por defecto. Deje Encrypt=yes
y no use TrustServerCertificate
salvo en pruebas.
Preguntas frecuentes
¿Puedo usar ODBC 17 en lugar de ODBC 18?
Es posible y compatible con SQL Server 2022, pero ODBC 17 no recibirá mejoras funcionales nuevas; solo parches críticos. Use ODBC 18 para nuevas implementaciones.
¿La aplicación .NET Framework necesita recompilarse?
No, siempre que utilice System.Data.Odbc
o System.Data.SqlClient
con cadenas de conexión que hagan referencia al nuevo controlador. En .NET 6+ equivale a Microsoft.Data.SqlClient
.
¿Puedo redistribuir ODBC Driver 18 junto con mi instalador?
Sí; el EULA permite la redistribución. Copie el instalador msodbcsql18.msi
y ejecute con ADDLOCAL=ALL IACCEPTMSODBCSQLLICENSETERMS=YES /quiet
.
Conclusiones
No existe una relación técnica que obligue a instalar Visual Studio 2022 en los equipos cliente. El problema radica en que Visual Studio acompaña redistribuibles de VC++ y el runtime de .NET que su aplicación requiere para funcionar. La estrategia correcta es:
- Identificar todas las dependencias nativas y administradas (
vcruntime140.dll
,mfplat.dll
, runtimes .NET). - Incluir dichos componentes en el paquete de instalación (MSI, MSIX, Wix Bundle).
- Instalar y actualizar Microsoft ODBC Driver 18 for SQL Server o MS OLE DB Driver 19, según corresponda.
- Evitar SQL Server Native Client salvo que sea imprescindible para código heredado.
- Validar en máquinas virtuales limpias antes de desplegar a producción.
Con estas prácticas garantizará que la aplicación funcione en cualquier entorno sin requerir Visual Studio y con total compatibilidad con SQL Server 2022.