Interaccion entre Provider=MSDASQL y Provider=SQLOLEDB

12/10/2008 - 17:50 por Jaime Palli | Informe spam
En una red tengo un Windows 2000 Server y en este servidor un SQL Server
2000.
Casi todos los puestos son Windows XP/Vista y 2 de ellos son Windows 2000.
Tanto en los puestos con Windows 2000 como el servidor cuando se accede via
Terminal Server tengo el mismo problema. Esto no ocurre en los puestos con
XP/Vista.
El problema es el conocido "3706 Provider cannot be found".
Despues de mucho buscar por todo tipo de foros no consigo encontrar una
solucion.
Como el problema es el mismo en el servidor que en los puestos, he empezado
a experimentar con uno de los puestos donde he hecho lo siguiente:

Actualizar a SP4.
Instalar MDAC 27 SP1
Instalar SQL Native Client (pero no lo uso, quiero utilizar SQLOLEDB).
Registro con regsvr32 MSDASQL.DLL y SQLOLEDB.DLL

Si establezco una conexion utilizando SQLOLEDB:

Provider=SQLOLEDB.1;Initial Catalog=dtstore;Data
Source=SERVERDT;UID=sa;PWD=pwdxx8;

me aparece el fatidico error, pero si arranco el programa y primero utilizo
esto:

Provider=MSDASQL;Driver={SQL
Server};Database=ArchiMED;Server=SERVERDT;UID=sa;PWD=pwdxx8;

Luego, cierro el recordset utilizado y la conexion y sin salir del programa
utilizo el Provider=SQLOLEDB me funciona hasta que salgo del programa.

Agradeceria cualquier comentario de quien haya experimentado este error y
como lo ha solucionado.

Preguntas similare

Leer las respuestas

#1 Victor Koch
14/10/2008 - 15:47 | Informe spam
Hola,

Seria bueno que nos muestres el código fuente que usas para abrir la
conexión a la base de datos.
En principio te diría que pruebes con este string de conexion:

Provider=SQLOLEDB;Data Source=SERVERDT;Initial Catalog=dtstore;User
ID=sa;Password=pwdxx8;

Un Saludo, Víctor Koch



"Jaime Palli" escribió en el mensaje
news:
En una red tengo un Windows 2000 Server y en este servidor un SQL Server
2000.
Casi todos los puestos son Windows XP/Vista y 2 de ellos son Windows 2000.
Tanto en los puestos con Windows 2000 como el servidor cuando se accede
via Terminal Server tengo el mismo problema. Esto no ocurre en los puestos
con XP/Vista.
El problema es el conocido "3706 Provider cannot be found".
Despues de mucho buscar por todo tipo de foros no consigo encontrar una
solucion.
Como el problema es el mismo en el servidor que en los puestos, he
empezado a experimentar con uno de los puestos donde he hecho lo
siguiente:

Actualizar a SP4.
Instalar MDAC 27 SP1
Instalar SQL Native Client (pero no lo uso, quiero utilizar SQLOLEDB).
Registro con regsvr32 MSDASQL.DLL y SQLOLEDB.DLL

Si establezco una conexion utilizando SQLOLEDB:

Provider=SQLOLEDB.1;Initial Catalog=dtstore;Data
Source=SERVERDT;UID=sa;PWD=pwdxx8;

me aparece el fatidico error, pero si arranco el programa y primero
utilizo esto:

Provider=MSDASQL;Driver={SQL
Server};Database=ArchiMED;Server=SERVERDT;UID=sa;PWD=pwdxx8;

Luego, cierro el recordset utilizado y la conexion y sin salir del
programa utilizo el Provider=SQLOLEDB me funciona hasta que salgo del
programa.

Agradeceria cualquier comentario de quien haya experimentado este error y
como lo ha solucionado.






Respuesta Responder a este mensaje
#2 Jaime Palli
16/10/2008 - 12:17 | Informe spam
Gracias Victor,

Como este problema me daba en direrentes clientes, he hecho un pequeño
programa en Visual Basic para probar strings de conexion. Me he dado cuenta
que en alguno de las pruebas poniendo "User Id" en vez de "UID" funcionaba.
A pesar de que ya lo he cambiado, no deja de extrañarme cuando el programa
lleva mas de tres años funcionando utilizando sin problemas "UID".

Por otra parte, esto no ha sido suficiente para solucionarlo.
Al final he utilizado FileMon para ver que pasaba cuando se hacia la llamada
a la conexion y me he dado cuenta de que empezaban a ocurrir errores a
partir de la carga de WS2_32.DLL. Investigando he visto que esta DLL tambien
se copia en la instalacion de mi programa a la carpeta donde se instala el
programa, porque la utilizo para enviar automaticamente emails.
Como que cuando el sistema busca DLLs empieza en buscarlas en el directorio
del programa, cargaba esta en vez de la que hay en winnt\system32 y esta dll
era mas nueva de la que esperaba el sistema en Windows 2000. He borrado esta
dll de mi directorio y a partir de entonces ya me ha funcionado.

Espero de que esta solucion sirva para otros que se encuentren con este
mismo problema. En particular, el programa FileMon me ha sido de mucha
utilidad en este caso.




"Victor Koch" <v i c t o r (arroba)correo(punto)waldbott(punto)com(punto)ar>
escribió en el mensaje news:%
Hola,

Seria bueno que nos muestres el código fuente que usas para abrir la
conexión a la base de datos.
En principio te diría que pruebes con este string de conexion:

Provider=SQLOLEDB;Data Source=SERVERDT;Initial Catalog=dtstore;User
ID=sa;Password=pwdxx8;

Un Saludo, Víctor Koch



"Jaime Palli" escribió en el mensaje
news:
En una red tengo un Windows 2000 Server y en este servidor un SQL Server
2000.
Casi todos los puestos son Windows XP/Vista y 2 de ellos son Windows
2000.
Tanto en los puestos con Windows 2000 como el servidor cuando se accede
via Terminal Server tengo el mismo problema. Esto no ocurre en los
puestos con XP/Vista.
El problema es el conocido "3706 Provider cannot be found".
Despues de mucho buscar por todo tipo de foros no consigo encontrar una
solucion.
Como el problema es el mismo en el servidor que en los puestos, he
empezado a experimentar con uno de los puestos donde he hecho lo
siguiente:

Actualizar a SP4.
Instalar MDAC 27 SP1
Instalar SQL Native Client (pero no lo uso, quiero utilizar SQLOLEDB).
Registro con regsvr32 MSDASQL.DLL y SQLOLEDB.DLL

Si establezco una conexion utilizando SQLOLEDB:

Provider=SQLOLEDB.1;Initial Catalog=dtstore;Data
Source=SERVERDT;UID=sa;PWD=pwdxx8;

me aparece el fatidico error, pero si arranco el programa y primero
utilizo esto:

Provider=MSDASQL;Driver={SQL
Server};Database=ArchiMED;Server=SERVERDT;UID=sa;PWD=pwdxx8;

Luego, cierro el recordset utilizado y la conexion y sin salir del
programa utilizo el Provider=SQLOLEDB me funciona hasta que salgo del
programa.

Agradeceria cualquier comentario de quien haya experimentado este error y
como lo ha solucionado.










Respuesta Responder a este mensaje
#3 Victor Koch
16/10/2008 - 14:35 | Informe spam
Hola Jaime,

El orden de búsqueda de las dll es: primero en la carpeta de la aplicación
que la llama, si no existe entonces se busca en Windows/System.

Por otro lado UID y PWD se usan cuando se hace una conexion con DSN, pero si
usas el proveedor OLEDB nativo para MSSQL la forma correcta es User ID y
Password.

Un Saludo, Víctor Koch



"Jaime Palli" escribió en el mensaje
news:
Gracias Victor,

Como este problema me daba en direrentes clientes, he hecho un pequeño
programa en Visual Basic para probar strings de conexion. Me he dado
cuenta que en alguno de las pruebas poniendo "User Id" en vez de "UID"
funcionaba. A pesar de que ya lo he cambiado, no deja de extrañarme cuando
el programa lleva mas de tres años funcionando utilizando sin problemas
"UID".

Por otra parte, esto no ha sido suficiente para solucionarlo.
Al final he utilizado FileMon para ver que pasaba cuando se hacia la
llamada a la conexion y me he dado cuenta de que empezaban a ocurrir
errores a partir de la carga de WS2_32.DLL. Investigando he visto que esta
DLL tambien se copia en la instalacion de mi programa a la carpeta donde
se instala el programa, porque la utilizo para enviar automaticamente
emails.
Como que cuando el sistema busca DLLs empieza en buscarlas en el
directorio del programa, cargaba esta en vez de la que hay en
winnt\system32 y esta dll era mas nueva de la que esperaba el sistema en
Windows 2000. He borrado esta dll de mi directorio y a partir de entonces
ya me ha funcionado.

Espero de que esta solucion sirva para otros que se encuentren con este
mismo problema. En particular, el programa FileMon me ha sido de mucha
utilidad en este caso.




"Victor Koch" <v i c t o r
(arroba)correo(punto)waldbott(punto)com(punto)ar> escribió en el mensaje
news:%
Hola,

Seria bueno que nos muestres el código fuente que usas para abrir la
conexión a la base de datos.
En principio te diría que pruebes con este string de conexion:

Provider=SQLOLEDB;Data Source=SERVERDT;Initial Catalog=dtstore;User
ID=sa;Password=pwdxx8;

Un Saludo, Víctor Koch



"Jaime Palli" escribió en el mensaje
news:
En una red tengo un Windows 2000 Server y en este servidor un SQL Server
2000.
Casi todos los puestos son Windows XP/Vista y 2 de ellos son Windows
2000.
Tanto en los puestos con Windows 2000 como el servidor cuando se accede
via Terminal Server tengo el mismo problema. Esto no ocurre en los
puestos con XP/Vista.
El problema es el conocido "3706 Provider cannot be found".
Despues de mucho buscar por todo tipo de foros no consigo encontrar una
solucion.
Como el problema es el mismo en el servidor que en los puestos, he
empezado a experimentar con uno de los puestos donde he hecho lo
siguiente:

Actualizar a SP4.
Instalar MDAC 27 SP1
Instalar SQL Native Client (pero no lo uso, quiero utilizar SQLOLEDB).
Registro con regsvr32 MSDASQL.DLL y SQLOLEDB.DLL

Si establezco una conexion utilizando SQLOLEDB:

Provider=SQLOLEDB.1;Initial Catalog=dtstore;Data
Source=SERVERDT;UID=sa;PWD=pwdxx8;

me aparece el fatidico error, pero si arranco el programa y primero
utilizo esto:

Provider=MSDASQL;Driver={SQL
Server};Database=ArchiMED;Server=SERVERDT;UID=sa;PWD=pwdxx8;

Luego, cierro el recordset utilizado y la conexion y sin salir del
programa utilizo el Provider=SQLOLEDB me funciona hasta que salgo del
programa.

Agradeceria cualquier comentario de quien haya experimentado este error
y como lo ha solucionado.














email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida