首页 新闻 会员 周边

在递归函数中使用OleDb查询Access报“不能再打开其他表了”

0
悬赏园豆:15 [已关闭问题] 关闭于 2015-10-08 09:21

有没有人在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;
}
白龙_YI的主页 白龙_YI | 初学一级 | 园豆:189
提问于:2015-08-21 15:03
< >
分享
所有回答(2)
0

主要是分页这块,access这块处理的不是很好。处理大数据肯定程序受不了

唯我独萌 | 园豆:537 (小虾三级) | 2015-08-21 17:02

我的问题跟分页没关,应该是对数据库操作过于频繁导致的,在网上看到有网友说Excel好像有类似的问题就是因为查询过快索引来不及释放引起的

支持(0) 反对(0) 白龙_YI | 园豆:189 (初学一级) | 2015-08-23 15:38
0

今天找了很多资料,却无意中想到自己应该在SQL执行前后重新连接试试,测试后发现就是这个原因,应该跟上面说的是同一类问题,由于程序执行过快,又是在递归函数中调用的,在函数的开始进行重新连接就好了,不过这样应该会牺牲一部分效率!!

白龙_YI | 园豆:189 (初学一级) | 2015-08-23 17:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册