Usuario
ASP y Active Directory

Pregunta
-
Hola, estoy haciendo un trabajo en ASP(no .net) con Visual Studio 6.0 que consiste en coger los usuarios del Active Directory y guardarlos en una base de datos de SQL Server2000. Hasta ahora tengo los usuarios ya sacados pero no se ir guardándolos en la base de datos a la misma vez los estoy sacando. He probado varias cosas y no me funcionan. Lo último es este error :
Tipo de error:
ADODB.Recordset (0x800A0BB9)
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
/PROYECTO/guardaAD.asp, line 27Aquí pongo el código por si alguien puede ayudarme!un saludo
<% Dim obConexion, obRecordset, sentenciaSQL,cont strDominio = "SELECT telephoneNumber,mail,displayName FROM 'LDAP://miproyecto.com' WHERE objectClass='user'" set oConn = server.CreateObject("ADODB.Connection") Set rst = Server.CreateObject("ADODB.Recordset") oConn.Provider = "ADsDSOOBJECT" strConn = "Active Directory Provider" oConn.Open strConn rst.Open strDominio, oConn, 1,1 Set obConexion = Server.CreateObject("ADODB.Connection") Set obRecordset = Server.CreateObject("ADODB.Recordset") obConexion.ConnectionString="PROVIDER=SQLOLEDB;DATA SOURCE=LOCALHOST;UID=sa;PWD=sa;DATABASE=ActiveDirectory" obConexion.Open sentenciaSQL = "usuario" cont = 1 'On Error Resume Next numCampos = rst.Fields.Count If Not rst.Eof Then obRecordset.Open sentenciaSQL, obConexion, adOpenStatic, adLockOptimistic %> <BODY> <H1><center>¡¡¡Resultados de búsqueda!!!</center></H1> <TABLE BORDER=5 align="center"> <TR> <TD bgcolor="#04B486" align="center"><font size=5><strong>Nombre</strong></font></TD> <TD bgcolor="#04B486" align="center"><font size=5><strong>Mail</strong></font></TD> <TD bgcolor="#04B486" align="center"><font size=5><strong>Telefono</strong></font></TD> </TR> <%While Not rst.Eof%> <TR> <% For Campo = 0 To numCampos -1 %> <TD bgcolor="#2ECCFA" align="center"><%= rst.Fields(Campo).Value %></TD> <% obRecordset.Addnew obRecordset.Fields("id")=cont obRecordset.Fields("nombre")=rst.Fields("displayName") obRecordset.Fields("mail")=rst.Fields("mail") obRecordset.Fields("telefono")=rst.Fields("telephoneNumber") obRecordset.UpDate cont = cont + 1 Next%> </TR> <% rst.MoveNext Wend Response.write("Los usuarios han sido guardados en la base de datos") %> </TABLE> <% Else Response.write("No existe el registro que desea") End If 'Cerramos el recordset' rst.close obRecordset.close 'Cerramos la conexión' oConn.Close obConexion.Close %> </BODY> </HTML>
Todas las respuestas
-
Ignoro qué es el 'Active DIrectory Provider'. Por lo general se indica allí la base de datos a la cual conectarse.
Cuando recorres los campos estás insertando nuevo registro; creo que allí esta mal planteado,
porque en cada for campo... se ejecuta el addnew
¿Cual es la línea 27?
-
SQL Server puede tener un linked server object a Active Directory y luego hacer un Insert..Select. Todo en un paso sin transmitir nada a ASP.
INSERT INTO miTabla (Telefono, CorreoE, Nombre) SELECT telephoneNumber,mail,displayName FROM 'LDAP://miproyecto.com' WHERE objectClass='user' ;
Jose R. MCP