我是新手。实际上,这是我第一次在Stackoverflow上发布问题。我进行了许多搜索,但找不到答案。这是我要做的事情的要点。
- 使用Adox打开访问数据库文件。
- 对于数据库中的所有非隐藏和非系统表,请在"验证文本"属性中添加条目。
- 关闭访问数据库文件。
这是文件中正在发生的事情。
- 锁定文件 *.ldb存在于文件夹中,这触发了错误数据库是通过另一个过程打开的。
这是我徒劳地尝试的。
- 关闭在foreach循环的每次迭代时打开的桌子。
- 立即关闭目录类和对象。
- 删除foreach循环中的所有代码。
这是我打算做的。
-
使用尝试捕获来捕获错误。
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