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

时间:2017-03-09 20:42:54

标签: c# access adox

我是新手。事实上,这是我第一次在stackoverflow上发布一个问题。我做了很多搜索但却找不到答案。 这是我要做的事情的要点。

  1. 使用ADOX打开访问数据库文件。
  2. 对于数据库中的所有非隐藏和非系统表,在"验证文本中添加一个条目"属性。
  3. 关闭访问数据库文件。
  4. 这是文件发生的事情。

    1. 锁定文件* .ldb出现在文件夹中,这会触发错误 数据库是由另一个进程打开的。
    2. 这是我徒劳无功的尝试。

      1. 关闭在foreach循环的每次迭代中打开的表。
      2. 在foreach循环之后立即关闭目录类和对象。
      3. 删除foreach循环中的所有代码。
      4. 这是我打算做的。

        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();
          
        2. 你认为我想要完成我想做的事情的方式有什么问题吗?谢谢你,祝你有个美好的一天。

1 个答案:

答案 0 :(得分:1)

我很长时间没有使用ADODB,但根据我的记忆: 你应该关闭连接,GC.Collect()将"最终"收集孤儿对象,但我相信你应该使用Connection对象的Close方法。 https://msdn.microsoft.com/en-us/library/ms807027.aspx