如何处理DirectoryCenter.CommitChange()异常??C#

如何处理DirectoryCenter.CommitChange()异常??C#,c#,exception,active-directory,C#,Exception,Active Directory,我是Active Directory的新手 当我使用C#检查并编辑关于将用户和部门添加到Active Directory的应用程序时 在目录enter.CommitChage()中,会出现如下异常 目录服务无法对对象的RDN属性执行请求的操作。 但我之前提到过,我对Active Directory不太了解,我不知道如何处理它 请有人帮帮我。代码如下 void CreateADUser(string ppk,string pk,DataRow row) { string pass = Ge

我是Active Directory的新手

当我使用C#检查并编辑关于
将用户和部门添加到Active Directory的应用程序时

目录enter.CommitChage()
中,会出现如下异常

目录服务无法对对象的RDN属性执行请求的操作。

但我之前提到过,我对Active Directory不太了解,我不知道如何处理它

请有人帮帮我。代码如下

void CreateADUser(string ppk,string pk,DataRow row)
{
    string pass = GetPass(pk,row,LogSections.AD);
    DirectoryEntry addept = adm.FindOU(ppk);
    string sOU = adm.GetPrincipalPath(addept);
    var aduser = adm.CreateNewUser(sOU, pk, pass, pk, null, null, adm.sDomain);
    SetAdUserProperties(pk, pass, row);
    MoveUser(ppk,pk);
}



void SetAdUserProperties(string pk,string pass,DataRow row)
{
    if (row == null) return;
    List<ADMapping> MappingPatterns = GetAdMappings(Words.User,false);
    var colnames = Tool.GetColNames(row);
    var aduser = adm.GetUser(pk);
    var de=aduser.GetUnderlyingObject() as DirectoryEntry;
    foreach (var ADMap in MappingPatterns)
    {
        string val = ADMap.Mapping;
        val=Util.ReplaceColPattern(val, row);
        SetProperty(de, ADMap.CN, val);
    }
    if (!string.IsNullOrWhiteSpace(pass))
    {
       var UserPkColumn = AppConfigHelper.GetAppString(Words.SourceUserPKColumn);
       UserPkColumn = Util.GetActualColName(UserPkColumn);
       aduser.SetPassword(pass);
       QueryHelper.Update(QueryHelper.ConnectionString, Words.ShadowUserTable
                    ,new SqlParameter[] { new SqlParameter("@passwd", pass) }
                    , new SqlParameter("@"+UserPkColumn,pk));
    }

     aduser.Save();
}

public void SetProperty(DirectoryEntry oDE, string sPropertyName, object sPropertyValue)
{
    if (sPropertyValue != null && !string.IsNullOrWhiteSpace(sPropertyValue.ToString()))
    {
        if (oDE.Properties.Contains(sPropertyName))
        {
            oDE.Properties[sPropertyName].Value = sPropertyValue;
        }
        else
        {
            oDE.Properties[sPropertyName].Add(sPropertyValue);
        }
        try
        {
            oDE.CommitChanges(); //exception here.
            oDE.Close();
         }
        catch (Exception)
        {

        }

     }


  }
void CreateADUser(字符串ppk、字符串pk、数据行)
{
字符串pass=GetPass(pk、row、LogSections.AD);
DirectoryEntry addept=adm.FindOU(ppk);
字符串sOU=adm.GetPrincipalPath(addept);
var aduser=adm.CreateNewUser(sOU、pk、pass、pk、null、null、adm.sDomain);
SetAdUserProperties(主键、通过、行);
移动用户(ppk,pk);
}
void SetAdUserProperties(字符串主键、字符串传递、数据行)
{
if(row==null)返回;
List MappingPatterns=GetAdMappings(Words.User,false);
var colnames=Tool.GetColNames(行);
var aduser=adm.GetUser(pk);
var de=aduser.getUnderlineObject()作为DirectoryEntry;
foreach(映射模式中的var ADMap)
{
字符串val=ADMap.Mapping;
val=Util.ReplaceColPattern(val,行);
SetProperty(de,ADMap.CN,val);
}
如果(!string.IsNullOrWhiteSpace(pass))
{
var UserPkColumn=AppConfigHelper.GetAppString(Words.SourceUserPKColumn);
UserPkColumn=Util.GetActualColName(UserPkColumn);
aduser.SetPassword(pass);
Update(queryhelp.ConnectionString,Words.ShadowUserTable
,new SqlParameter[]{new SqlParameter(“@passwd”,pass)}
,新的SqlParameter(“@”+UserPkColumn,pk));
}
aduser.Save();
}
public void SetProperty(DirectoryEntry oDE、字符串SPPropertyName、对象SPPropertyValue)
{
if(sprPropertyValue!=null&&!string.IsNullOrWhiteSpace(sprPropertyValue.ToString())
{
if(oDE.Properties.Contains(sprPropertyName))
{
oDE.Properties[SPPropertyName].Value=SPPropertyValue;
}
其他的
{
oDE.Properties[SPPropertyName].Add(SPPropertyValue);
}
尝试
{
oDE.CommitChanges();//此处出现异常。
oDE.Close();
}
捕获(例外)
{
}
}
}

尝试在提交更改之前进行重命名,希望能有所帮助

  oDE.Rename("name=$name");
  oDE.CommitChanges();

对不起,我来晚了,看不到你的答案。我添加了你的代码,但它仍然抛出一个异常。。。