sql server - El proveedor ''SQLNCLI'' no está registrado en la máquina local
sql-server nant (2)
¿Podría ser un problema con x86 / x64? Si la estación de trabajo en cuestión es x64, y ha instalado la versión x64 del cliente, pero la aplicación que está intentando ejecutar está en el espacio x86, es posible que también necesite la versión x86 del cliente en esa estación de trabajo. Una aplicación x86 solo buscará una versión x86 del proveedor, y al no verla, aparecerá un error como este. La versión x64 es probablemente lo suficientemente inteligente como para verificar cualquiera de las dos versiones, aunque quizás tengas la misma situación.
Lo mismo sucede con ODBC: los orígenes de datos x86 y x64 no están disponibles para el otro tipo de aplicación. Si desea que algo esté visible desde ambas versiones de aplicaciones, deberá crear un origen ODBC en la herramienta de administración de cada versión .
Tengo un script basado en NAnt que ejecuto en mi PC local que se conecta a SQL Server 2008 Express que también se ejecuta en mi PC local para eliminar y volver a crear bases de datos usando archivos .sql. Esto funciona bien, no hay problema aquí.
El problema viene cuando he recreado la misma configuración en otra PC, me aparece el error en mi secuencia de comandos NAnt que dice que:
System.InvalidOperationException: The ''SQLNCLI'' provider is not registered on the local machine.
at System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper)
at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.Open()
at NAnt.Contrib.Util.SqlHelper..ctor(String connectionString, Boolean useTransaction)
at NAnt.Contrib.Tasks.SqlTask.ExecuteTask()
at NAnt.Core.Task.Execute()
at NAnt.Core.Target.Execute()
at NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies)
at NAnt.Core.Project.Execute()
at NAnt.Core.Project.Run()
He buscado en línea y he encontrado que en un foro se sugirió que necesitaba instalar el cliente nativo de Microsoft SQL Server y lo obtuve de esta URL . (Es cierto, solo he instalado la parte Native Client de esto)
A pesar de que se instaló en mi segunda PC, el script aún me da el mismo error. ¿Alguna sugerencia?
El proveedor correcto para SQL Server 2008 es SQLNCLI10.1
.
Para SQL Server 2012, eso sería SQLNCLI11
. (source)
Lamentablemente, la migración a 2008 no recogió el cambio ...