转自原文 向SDE图层中添加大量数据时,出现ORA-00604以及ORA-01000的解决办法

写了一个小程序,从一个列表中读取坐标串,每个坐标串生成一个IPolygon,然后将这些Polygon添加到一个SDE图层中,
向SDE中添加要素的初始代码类似下面:

IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();
for(int i=;i<polygons.count;i++)
{
IFeature tmpFea = fc.CreateFeature(); //fc是图层对应的IFeatureClass
tmpFea.Shape = GetPolygonFromCoord(polygons[i]);
tmpFea.Store();
}
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();

要素较少时可以正确地写入SDE图层,但大概超过300个左右,之后就会报这个错误:“ORA-00604: 递归 SQL 级别 1 出现错误,ORA-01000: 超出打开游标的最大数”,环境是ArcSDE9.3 + Oralce9i(之后还在ArcSDE9.3 + Oracle10g的环境里做了测试,结果基本相同,但将目标图层换为FileGDB图层后,没有出现该问题,说明应该是Oracle数据库的相关设置的原因)。
联系ESRI技术支持,说可能是游标没有释放的问题,而且谈到在向FeatureClass中添加大量数据时,使用IFeatureCursor效率会比较高,而且可以通过将IFeatureCursor释放的方法来避免出现这个问题,代码修改为:

IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();
IFeatureBuffer featureBuffer = fc.CreateFeatureBuffer(); //fc是图层对应的IFeatureClass
IFeatureCursor featureCursor = fc.Insert(true);
for(int i=;i<polygons.count;i++)
{
featureBuffer.set_Value(featureBuffer.Fields.FindField("PRODUCTID"), id);
featureBuffer.Shape = GetPolygonFromCoord(polygons[i]);
object featureOID = featureCursor.InsertFeature(featureBuffer);
}
featureCursor.Flush();
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();
System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);

修改后,问题依旧,再咨询ESRI技术支持后,可能是相关资源没有自动回收的原因,在代码最后加上GC.Collect();问题解决。

向SDE图层中添加大量数据时,出现ORA-00604以及ORA-01000的解决办法的更多相关文章

  1. 添加Chrome插件时出现“程序包无效”等问题的解决办法

    相较之各大浏览器,我最喜欢的便是Chrome了,不只因为Chrome搜索,也因为Google Chrome强大的插件功能. 而这一切的东风,就是"谷歌访问助手". 谷歌访问助手的下 ...

  2. jquery添加未来元素时,其绑定事件不起作用解决办法

    delegate说起对未来元素是其作用的,于是写下代码: <!DOCTYPE HTML> <html> <head> <meta charset=" ...

  3. Lucene6.6添加索引数据时字符个数超限,字符数不能超过BYTE_BLOCK_SIZE=32766

    最近发现Lucene6.6版本添加索引数据字符数超过32766时,出现报错,而Lucene4.6版本中则未出现这一问题,原因如下: 概述:         添加索引数据时,对于分词字段,分词后的Ter ...

  4. 在IntelliJ IDEA中添加框架支持时找不到Hibernate的解决办法

    问题描述 第一次在Add Frameworks support界面中添加hibernate支持的时候,异常中断,导致没有成功添加. 第二次进入Add Frameworks support窗口时,发现找 ...

  5. C#中向ListView控件中添加一行数据

    C#中向ListView控件中添加一行数据: ,先声明一个ListViewItem: ListViewItem item = new ListViewItem(); ,添加第一列数据: item.Te ...

  6. SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

    原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...

  7. Docekr 挂在卷之后访问目录时异常 cannot open directory '.': Permission denied 的解决办法

    1,原因,原因是CentOS7 中的安全模块 selinux 把权限禁掉了 2,解决办法如下 2.1,运行容器是加参数在 --privileged=true   (个人认为这是最佳方式,推荐使用) 如 ...

  8. excel双击文件打开时空白,使用菜单打开正常的解决办法

    excel双击文件打开时空白,使用菜单打开正常的解决办法 打开 excel的选项 找到高级->常规 取消“忽略使用动态数据交换...”的勾,确定. 问题解决.

  9. Vue微信自定义分享时安卓系统config:ok,ios系统config:invalid signature签名错误,或者安卓和ios二次分享时均config:ok但是分享无效的解决办法

    简述需求:要求指定页面可以进行微信自定义分享(自定义标题,描述,图片,链接),剩下的页面隐藏所有基础接口.二次分享依然可以正常使用,切换至其他页面也可以正常进行自定义分享. 这两天在做微信自定义分享的 ...

随机推荐

  1. jfinal上传下载

    1. 上传 <form id="form1" method="post" enctype="multipart/form-data" ...

  2. Could not initialize class org.apache.log4j.LogManager 报错

    部署项目的时候,在windows下一切正常,但是在centos下就发生如下错误 Caused by: java.lang.ExceptionInInitializerError at com.dsid ...

  3. 多线程读写共享变量时,synchronized与volatile的作用

    在<effective java>中看的的知识点,在工作中确实遇到了~ keywordsynchronized能够保证在同一时刻,仅仅有一个线程能够运行某一个方法,或者某一个代码块. 同步 ...

  4. PERCONA-TOOLKIT 工具的安装与使用2

    [root@server-mysql ~]# cd /usr/bin [root@server-mysql bin]# ls pt* pt-align pt-duplicate-key-checker ...

  5. 在MyEclipse中如何去掉JS或jsp语法错误提示!

    在MyEclipse中如何去掉JS或jsp语法错误提示! 关于在 MyEclipse 上 WEB 工程里面的 JS/JSP 经常会有语法错误提示,这是由于 MyEclipse 对其语法要求相当严格所造 ...

  6. openwrt chinadns

    opkg update opkg install ip ipset resolveip iptables-mod-tproxy resolveip libopenssl luci-i18n-base- ...

  7. struts1与struts2的区别

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...

  8. datetimepicker 初始化只显示年

    $("#overdue2").datetimepicker({ format: 'yyyy', autoclose: true, startView:4, minView:4, t ...

  9. mysql的分区技术(建立分区)

    -- mysql建立表分区,使用range方法建立: create table t_range( id int(11), money int(11) unsigned not null, date d ...

  10. @Resource注解省略name属性后的行为

    @Resource有一个name属性,该属性值为所要注入的Bean实例的id,类似于<property.../>元素的ref属性,不过在spring中允许省略name属性值,省略后在以下情 ...