有没有人在Access中遇到过 “不能再打开其他表” 的异常!!
今天在对大量数据进行循环操作时被提示 “不能再打开其他表” ,本人本身对Access数据库不太懂,函数代码如下:
//获取后继节点 private static void GetDescendantNodes(XmlDocument Xml, XmlNode ParentNode, string ParentContent, string Sort, string level) { OleDbDataAdapter adapter = new OleDbDataAdapter(); string sqlstr = @"select distinct * from (select [GNS123].* from [GNS123] right join (select * from [GNS123] where [GNS123].[名称]='" + ParentContent + "') T1 on [GNS123].[pid] = [T1].[pid]) T2 where ([T2].[属性分类] like '" + Sort + "' or [T2].[属性分类] like '%" + Sort + "' or [T2].[属性分类] like '%" + Sort + "%') and [T2].[关联类型]='" + level + "' order by [T2].[关联名称]"; DataSet reference_DS = new System.Data.DataSet(); adapter.SelectCommand = new OleDbCommand(sqlstr, my_cnt); adapter.Fill(reference_DS, level); if ((reference_DS.Tables[level] != null) && (reference_DS.Tables[level].Rows.Count > 0)) { //在此添加本次递归层级得到的子级 for (int index = 0; index < reference_DS.Tables[level].Rows.Count; index++) { string current_title = reference_DS.Tables[level].Rows[index]["关联名称"].ToString(); XmlNode structurediv_node = Global.CreateElement(Xml, ParentNode, "structurediv", null); Global.CreateElement(Xml, structurediv_node, "title", current_title); UpdateFinishedNum("GNS123", (int)reference_DS.Tables[level].Rows[index]["ORDER"], 1); //进行下一次递归 GetDescendantNodes(Xml, structurediv_node, current_title, Sort, level); } } return; }
主要是分页这块,access这块处理的不是很好。处理大数据肯定程序受不了
我的问题跟分页没关,应该是对数据库操作过于频繁导致的,在网上看到有网友说Excel好像有类似的问题就是因为查询过快索引来不及释放引起的
今天找了很多资料,却无意中想到自己应该在SQL执行前后重新连接试试,测试后发现就是这个原因,应该跟上面说的是同一类问题,由于程序执行过快,又是在递归函数中调用的,在函数的开始进行重新连接就好了,不过这样应该会牺牲一部分效率!!