2009-09-26 129 views
18

Tengo un script basado en NAnt que ejecuto en mi PC local que se conecta a SQL Server 2008 Express también en mi PC local para descartar y volver a crear bases de datos. archivos sql: esto funciona bien, no hay problema aquí.El proveedor 'SQLNCLI' no está registrado en el equipo local

El problema viene cuando he recreado la misma configuración en otro PC, me sale el error en mi guión de NAnt diciendo 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 han encontrado que en un foro que se sugirió que necesitaba instalar Microsoft SQL Server Native Client, y got it from this URL. (Es cierto que solo he instalado la parte Native Client de esto)

A pesar de que está instalado en mi segunda PC, la secuencia de comandos todavía me da el mismo error. ¿Alguna sugerencia?

+0

Debería haber funcionado ... ¿Intentó reiniciar la máquina? –

+1

¿Alguna razón en particular por la que utiliza el proveedor OleDB de .Net? Utilice el proveedor de SqlClient, no requiere que se instale ningún controlador, todo se envía con .net. –

+0

Es posible que solo desee la flexibilidad de escribir en algo que no sea SQL Server si es necesario. – SqlRyan

Respuesta

21

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 ...

+0

¡Tenías razón! La cadena de conexión necesaria para hacer referencia a SQLNCL10, y no a la SQLNCLI que tenía en el script. Buena esa. –

+1

Brett, usted dijo SQLNCL10 en lugar del SQLNCLI10 correcto. Probablemente un error tipográfico, pero lo corté y pegué :-( –

+0

Editado para limpiarlo un poco. No pude encontrar una lista autorizada de proveedores. Algunas personas en Internet sugieren ** 'SQLNCLI11.1' ** también funciona para 2012. – Kobi

4

Podría ser un problema con x86/x64? Si la estación de trabajo en cuestión es x64, y usted ha instalado la versión x64 del cliente, pero la aplicación que está tratando de ejecutar está en el espacio x86, también puede necesitar 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 ver ninguna, dará un error como este. La versión x64 es probablemente lo suficientemente inteligente como para buscar cualquier versión, aunque tal vez tenga la misma situación.

Lo mismo ocurre con ODBC - x86 y las fuentes de datos x64 no están disponibles para el otro tipo de aplicación: si desea que algo esté visible en ambas compilaciones de aplicaciones, deberá crear una fuente ODBC en la herramienta de administración de cada versión.

+0

Las computadoras son máquinas de 64 bits, por lo que podría estar en algo allí ... ¡Tendré que investigar más! –

Cuestiones relacionadas