Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用ADO.NET/OLEDB获取Jet用户名册_Vb.net_Ms Access_Oledb_Jet - Fatal编程技术网

Vb.net 使用ADO.NET/OLEDB获取Jet用户名册

Vb.net 使用ADO.NET/OLEDB获取Jet用户名册,vb.net,ms-access,oledb,jet,Vb.net,Ms Access,Oledb,Jet,我有一个旧的遗留VB6应用程序,我最终要将其更新到.NET,但我遇到了一个障碍:它所做的一件事是使用ADODB提供一个到数据库的当前连接列表,并附带一个特定于提供程序的模式行集。下面是正在工作的ADODB代码 Set RS = CN.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}") 现在我知道,如果我要添加对最新COM ActiveX数据对象库的引用,我仍然可以使用这个ADODB方法

我有一个旧的遗留VB6应用程序,我最终要将其更新到.NET,但我遇到了一个障碍:它所做的一件事是使用ADODB提供一个到数据库的当前连接列表,并附带一个特定于提供程序的模式行集。下面是正在工作的ADODB代码

Set RS = CN.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
现在我知道,如果我要添加对最新COM ActiveX数据对象库的引用,我仍然可以使用这个ADODB方法,但如果可能的话,我真的希望避免这种情况,并找到一种使用OLEDB的方法

我已经创建了下面的函数,并尝试了GetOleDbSchemaTable和GetSchema的各种组合–有限制和无限制,GUID作为字符串传递,但它总是出错或返回空表

'Get a list of users connected to the core database
Public Function GetUserRoster() As DataTable
    Dim connString As String = GetConnString(coreDB)
    If String.IsNullOrEmpty(connString) Then Return Nothing
    Using conn As New OleDbConnection(connString)
        Try
            conn.Open()
            Dim oGUID As New Guid("{947bb102-5d43-11d1-bdbf-00c04fb92675}")
            Dim restrictions() As String = {Nothing, Nothing, Nothing, "Table"}
            Dim schemaTable As DataTable = conn.GetOleDbSchemaTable(oGUID, restrictions)
            Return schemaTable
        Catch ex As Exception
            logger.Error("Failed to evaluate the database user roster. {0}{1}", vbCrLf, ex.ToString)
        End Try
    End Using
    Return Nothing
End Function

那么,这是可能的,还是我除了使用旧的COM ADODB函数之外别无选择?

这不能像我们以前那样简单

也就是说,您实际上可以读取访问锁定文件.ldb

微软有一个dll也能做到这一点


这是类似的吗@YuriyGalanter是的,在过去的两天里,我已经看完了那篇文章——还有几十篇其他的文章,但我仍然一点也不明白。不幸的是,我找到的所有示例都只显示了如何检索表信息。。。我已经知道该怎么做了。我看起来也有一点,显然在.NET中没有直接的关联,你可能必须通过COM使用ADODBinterop@YuriyGalanter我很遗憾地得出了同样的结论。但是,不得不使用旧的、被认为是“劣质”的方法来完成人们认为应该是一项相对简单的任务,这是非常令人恼火的。我刚刚注意到,还有一个答案,即在堆栈溢出时读取ldb文件。是的,我已经考虑过了,但不幸的是,它只列出了连接的计算机,而没有列出用户。它也不可靠,因为当一个用户断开连接而另一个用户仍在连接时,它不会自动删除列出的计算机。只有在其他用户连接时,它才会被删除(或者更确切地说,被覆盖)。最后,我决定在一个“register”表中管理用户连接,该表中有一个轮询的
时间
字段,连接的用户会定期更新。不过,感谢您的努力。:)将此作为一个答案添加进来。很高兴为下一个人知道。