2017-03-09 138 views
0

我對此很陌生。事實上,這是我第一次在stackoverflow上發佈一個問題。我做了很多搜索,但是找不到答案。 這是我想要做的事情的要點。以編程方式在c#中打開時無法關閉Access數據庫文件

  1. 使用ADOX打開訪問數據庫文件。
  2. 對於數據庫中的所有非隱藏和非系統表,將條目添加到「驗證文本」屬性。
  3. 關閉訪問數據庫文件。

以下是該文件正在發生的事情。

  1. 該文件夾中存在鎖定文件* .ldb,這會觸發錯誤 數據庫被另一個進程打開。

這是我試過的徒然。

  1. 關閉在每次迭代foreach循環時打開的表。
  2. 在foreach循環後立即關閉目錄類和對象。
  3. 刪除foreach循環中的所有代碼。

這是我打算做的。

  1. 使用Try Catch捕獲錯誤。

    cn = new ADODB.Connection(); 
        cat = new ADOX.CatalogClass(); 
        cn.Open(tmpStr); 
        cat.ActiveConnection = cn; 
    
        //Loop through all tables to add the validation text 
        foreach (Table t in cat.Tables) 
        { 
    
    
         tname = t.Name; 
         ttype = t.Type == null ? string.Empty : t.Type; 
         tprop = t.Properties["Jet OLEDB:Table Hidden In Access"].Value.ToString(); 
         if (ttype.ToUpper() == "TABLE" && tprop.ToUpper() == "FALSE") // 
         { 
          t.Properties["Jet OLEDB:Table Validation Text"].Value = "this is table " + tname + "                        student1"; 
         } 
    
         //System.Runtime.InteropServices.Marshal.FinalReleaseComObject(t); 
    
        } 
        //Close all open objects 
    
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.Tables); 
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.ActiveConnection); 
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat); 
        GC.Collect(); 
    

你覺得有什麼問題,我想完成我想要做什麼呢?謝謝你,祝你有美好的一天。

+0

@Leskyam:謝謝你的建議,但它似乎仍然是不當行爲。這似乎很奇怪,即使我嘗試使用連接對象和GC.Collect關閉數據庫文件,也會發生這種情況。 – Lakki

回答

相關問題