ASP和LDAP:连接不能用于执行此操作。在此上下文中它是关闭的或无效的。

时间:2015-05-27 09:55:24

标签: asp-classic active-directory

继续使用ASP,我有一个正弦代码,它为用户提供一个表单,显示当前保存在Active Directory中的数据,并让用户更新他们的一些细节。我已经尝试了所有的东西但是仍然没有得到错误

" ADODB.Command错误' 800a0e7d'

连接不能用于执行此操作。在此上下文中它是关闭的或无效的。

/editentry.asp,第31行"

无论如何,我的代码是L

<%@ Language=VBScript  %>
<% response.Buffer = True
'Define the AD OU that contains our users


dim ADUser, user, firstname, lastname, email, telephonenumber, mobile
'This initializes all of our variables


user = request.querystring("account_name")
'This puts the value of the account_name into a variable
if len(user) = 0 then
'If the length of the username is equal to 0
             response.write "Please supply a username in the query string" 

elseif len(user) > 0 then
'Else is length of user is greater than 0
            ADUser = "LDAP://OU=Staff,OU=Users,DC=Something,DC=internal"
           ' Make AD connection and run query
             Set objCon = Server.CreateObject("ADODB.Connection")
             objCon.provider ="ADsDSOObject"
             objCon.Properties("User ID") = "EXAMPLE\Testuser"
            objCon.Properties("Password") = "TestUser1!"
           objCon.Properties("Encrypt Password") = TRUE
        objCon.open "Active Directory Provider"
    Set objCom = CreateObject("ADODB.Command")
  objCom.CommandText ="select ADsPath, givenName,sn,mail,telephonenumber,mobile,sAMAccountName FROM '"+ ADUser +"' where sAMAccountname='"& user & "'"
      'objCom.Properties("searchscope") = ADS_SCOPE_ONELEVEL

    Set objRS = objCom.Execute

     ' Loop over returned recordset and output HTML

    Response.Write vbCrLf
Do While Not objRS.EOF Or objRS.BOF
Response.Write " <form action='editentry.asp?account_name=" + user + "' method='POST'>"
Response.Write "<p><label for='firstname'>Firstname</label><input type='text' id='firstname' value='" + objRS("givenName") +"' name='fname'></p>"
Response.Write "<p><label for='lastname'>Lastname</label><input type='text' id='lastname' value='" + objRS("sn") +"' name='lname'></p>"
          Response.Write "<p><label for='mail'>E-Mail Address</label><input type='text' id='lastname' value='" + objRS("mail") +"' name='email'></p>"
          Response.Write "<p><label for='mobile'>Mobile</label><input type='text' id='mobile' value='" + objRS("mobile") +"' name='mobile'></p>"
          Response.Write "<p><label for='telephone'>Telephone Number</label><input type='text' id='email' value='" + objRS("telephonenumber") +"' name='telephonenumber'></p>"
          Response.Write "<p><input type='hidden' id='subval' value='1' name='subval'></p>"
          Response.Write "<p><input type='submit' name='submit'><input type='reset' name='reset'></p>"
           Response.Write "</form>" + vbCrLf
           objRS.MoveNext
            Response.Flush
Loop

if isEmpty(request.form("subval"))=FALSE then 
'Subval will contain 1 if the form is submitted, else it won't exist, so we can check the form has been submitted by reading it back
firstname = request.form("fname")
lastname = request.form("lname")
email = request.form("email")
mobile = request.form("mobile")
telephonenumber = request.form("telephonenumber")
Do While Not objRS.EOF
        Set usr = GetObject(objRS.Fields("ADsPath").Value)
       usr.Put "gjvenName", firstname
       usr.Put "sn", lastname
       usr.Put "mail", email
       usr.Put "mobile", mobile
       usr.Put "telephonenumber", telephonenumber
       usr.SetInfo
      objRS.MoveNext
loop


 response.write "Entry has been updated "

end if
end if
' Clean up
      objRS.Close
      objCon.Close
     Set objRS = Nothing
    Set objCon = Nothing
    Set objCom = Nothing

%GT;

我不确定这里有什么问题

1 个答案:

答案 0 :(得分:0)

分配命令对象的连接(在调用Execute函数之前),如下所示:

Set objCom.ActiveConnection = objCon