2013-12-03 56 views
2

我有一箇舊的VB6應用程序,我終於更新到.NET,但我碰到了一個絆腳石:它提供的一件事是提供當前連接到數據庫的列表,使用ADODB和this GUID specified by Microsoft發佈的提供程序特定架構行集。這裏是工作ADODB代碼使用ADO.NET/OLEDB獲取Jet用戶名冊

Set RS = CN.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}") 

現在我知道我仍然可以使用這個ADODB方法,如果我要加入到最新的COM ActiveX數據對象庫的引用,但我真的想避免這種情況,如果在所有可能的,並找到一種使用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功能?

+1

這是類似的東西嗎? http://msdn.microsoft.com/en-us/library/kcax58fh.aspx –

+0

@YuriyGalanter是的,在過去的兩天裏我已經讀過那篇文章 - 還有其他幾十篇文章,而且我還沒有聰明。不幸的是,我發現的所有例子都只顯示瞭如何檢索表格信息......我已經知道該怎麼做。 – Antagony

+1

我看起來有點太明顯,在.NET中沒有直接關聯,你可能不得不通過COM interop使用ADODB –

回答

0

這個你不能像我們以前那樣簡單。

這就是說,你可以實際讀取的.ldb

訪問鎖定文件有一個從微軟一個DLL,它確實太多。

How to Read .LDB Files

+1

我剛剛也注意到有一個答案在堆棧溢出時讀取一個ldb文件。 http://stackoverflow.com/questions/15899930/how-to-see-who-is-using-my-access-2003-database-in-network – Archlight

+0

是的,我已經看過,作爲一種可能性,但不幸的是它只列出了連接的電腦,而不是用戶。這也是不可靠的,因爲如果一個用戶在另一個用戶連接時斷開連接,它不會自動刪除列出的計算機。如果有其他用戶連接,它只會被刪除(或者說,被覆蓋)。最後,我決定用一個連接用戶的「時間」字段管理用戶連接,並定期更新用戶連接。感謝您的努力:) – Antagony

+0

添加這個答案作爲答案。下一個男人。 – Archlight