正在提交对使用函数中的块返回的DirectoryEntry的更改
本文关键字:返回 DirectoryEntry 函数 提交 | 更新日期: 2023-09-27 18:21:06
我想我将展示我对在c#中使用语句的无知。
我正在尝试编写一个函数,该函数接受active directory中用户的唯一标识符并返回该用户。然后我想对用户进行更改并提交它们。
我怀疑这不起作用,因为我正在使用区块中返回。
以下是基本思想:
public static DirectoryEntry GetADUser( string prop1Value, string prop2Value )
{
using( var rootDE = new DirectoryEntry(LDAPPath, User, Password))
{
using( var searcher = new DirectorySearcher(rootDE))
{
searcher.Filter = string.Format("(&(prop1={0})(prop2={1}))", prop1Value, prop2Value);
var user = searcher.FindOne().GetDirectoryEntry();
return user;
}
}
}
//...
var user = GetADUser("val1","val2");
user.Properties["prop3"].Value = "Spagetti";
user.CommitChanges();
这样行吗?active directory似乎并没有以这种方式显示我所做的更改。在调用提交更改时,我没有得到任何异常。
这与:使用block从内部返回可以吗?当';return';从';使用';块
如果它不能以这种方式工作,那么如果我在不使用块的情况下重写那个函数,它会有多糟糕?
将您的用户声明为using块之外的SearchResult,然后将其分配到using(var searcher….)块中,然后将返回语句放在using块结束后
即
SearchResult user = null;
using( var rootDE = new DirectoryEntry(LDAPPath, User, Password))
{
using( var searcher = new DirectorySearcher(rootDE))
{
searcher.Filter = string.Format("(&(prop1={0})(prop2={1}))", prop1Value, prop2Value);
var user = searcher.FindOne().GetDirectoryEntry();
}
}
return user;
您还可以通过使用块更改搜索器来简化一些事情
using (var searcher = new DirectorySearcher(rootDD, string.Format("(&(prop1={0})(prop2={1}))", prop1Value, prop2Value))
{
user = searcher.FindOne();
}
不要硬编码Value Spagetti如果用户。属性["prop3"]。给出值并尝试出错
(string)user.Properties["prop3"] = some variable if it's type is a string or
user.Properties["prop3"].Value = someVariable.ToString()
如果它是一个被转换为整数的整数,这有意义吗。。?如果用户不在提交方面的using内部,您将无法访问该用户。。所以在using..中移动提交。。