访问数据库文件在以编程方式中打开C#时未关闭



我是新手。实际上,这是我第一次在Stackoverflow上发布问题。我进行了许多搜索,但找不到答案。这是我要做的事情的要点。

  1. 使用Adox打开访问数据库文件。
  2. 对于数据库中的所有非隐藏和非系统表,请在"验证文本"属性中添加条目。
  3. 关闭访问数据库文件。

这是文件中正在发生的事情。

  1. 锁定文件 *.ldb存在于文件夹中,这触发了错误数据库是通过另一个过程打开的。

这是我徒劳地尝试的。

  1. 关闭在foreach循环的每次迭代时打开的桌子。
  2. 立即关闭目录类和对象。
  3. 删除foreach循环中的所有代码。

这是我打算做的。

  1. 使用尝试捕获来捕获错误。

        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();
    

您认为我试图完成我想做的事情有什么问题?谢谢你,祝你有美好的一天。

我很长时间而没有与AdoDB合作,但是根据我记得的:您应该关闭连接,gc.collect()将"最终"收集孤儿对象,但我相信您应该使用连接对象的密切方法。https://msdn.microsoft.com/en-us/library/ms807027.aspx

最新更新