none
ASP y Active Directory RRS feed

  • 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 27

     Aquí 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>



    sábado, 26 de mayo de 2012 18:06

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?

    domingo, 27 de mayo de 2012 13:43
  • 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

    domingo, 27 de mayo de 2012 16:43