连接到 AD 的奇怪错误 - visual basic
Posted
技术标签:
【中文标题】连接到 AD 的奇怪错误 - visual basic【英文标题】:Odd errors with connecting to AD - visual basic 【发布时间】:2018-06-11 19:47:37 【问题描述】:有几个奇怪的问题。我连接到 AD 以获取活动用户及其组的列表并将其写入 SQL 表中。代码是用 Visual Basic 编写的。有时我会收到一个错误“服务器上没有这样的对象”。但是当我尝试在 5 分钟后运行相同的进程时 - 一切正常。换句话说,我每次运行该过程时都不会收到该错误,只是偶尔。 问题的另一部分 - 如果我尝试从 sql 表中提取数据并使用报告创建 excel 文件 - 在运行上面的过程之后立即
我收到了错误:
System.AccessViolationException 未处理 H结果=-2147467261 Message=试图读取或写入受保护的内存。这通常表明其他内存已损坏。 源=系统.数据 堆栈跟踪: 在 System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString 常量,SessionWrapper & sessionWrapper) 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString 常量,OleDbConnection 连接) 在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)...
如果我停止处理,请关闭 Windows 应用程序,重新打开并仅运行导出到 excel - 运行良好。 我认为也许内存没有释放,但我在处理结束时确实有命令从 AD 中提取数据:
dirEntry.Dispose()
dirEntry = Nothing
连接AD后是否有清除内存的特殊命令?是什么导致了这 2 个零星的错误?谢谢!
根据请求 - 添加部分代码。 - 获取用户和组列表,然后处理 dirEntry:
Public Sub ListAllADUsers(dirEntry As DirectoryEntry) 将用户列表调暗为新集合() 将用户名列表变暗为新集合() 将结果作为 SearchResultCollection 变暗
Dim dirSearcher As DirectorySearcher = New DirectorySearcher("(&(objectCategory=Person)(objectClass=user))")
dirSearcher.SearchRoot = dirEntry
dirSearcher.PropertiesToLoad.Add("SAMAccountName")
dirSearcher.PropertiesToLoad.Add("givenname")
dirSearcher.PropertiesToLoad.Add("cn")
dirSearcher.ServerTimeLimit = New TimeSpan(0, 10, 0)
dirSearcher.PageSize = 10000
dirSearcher.ClientTimeout = TimeSpan.FromMinutes(12000)
oresult = dirSearcher.FindAll()
For Each result In oresult
If Not result.GetDirectoryEntry.Properties("cn").Value Is Nothing Then
UserList.Add(result.GetDirectoryEntry.Properties("cn").Value, result.GetDirectoryEntry.Properties("SAMAccountName").Value)
GetGroupsAD(result.GetDirectoryEntry.Properties("SAMAccountName").Value.ToString(), result.GetDirectoryEntry.Properties("cn").Value.ToString())
If StopFlag = 1 Then Exit Sub
End If
Next
dirSearcher.Dispose()
End Sub
【问题讨论】:
我们能看到你的代码的 sn-p 吗?即使它已经过消毒,也会有所帮助。 【参考方案1】:好吧 - 解决了。有我打算使用但决定不使用的收藏列表。一旦我将其注释掉 - 一切正常。谁知道它会像那样搞砸一切?关闭。因此,如果有人会使用我的代码 - 只需删除集合...
【讨论】:
以上是关于连接到 AD 的奇怪错误 - visual basic的主要内容,如果未能解决你的问题,请参考以下文章
在 Ubuntu 中使用 Python 连接到 MySQL(奇怪的错误)
无法再使用 Visual Studio 2008 连接到 Visual Studio Team Services
从 Visual Studio 连接到 SQL Server 2005