连接数据库Arcserver不关闭服务或是winform不关闭窗体无法显示编辑完毕的数据
来源:互联网 发布:java oracle 读表 编辑:程序博客网 时间:2024/06/14 20:38
地块入库接口开发中,需要在SOE中执行地块插入postgresql数据库,可是在实现过程中发现虽然已经在数据库中插入了数据,可是如果不断开server的服务,数据库里的数据就不能刷新显示出编辑之后的结果。后来在操作完毕的代码后我使用了 System.Runtime.InteropServices.Marshal.ReleaseComObject()方法释放连接的数据库空间,依然无果。
原代码:
guid = GetGuid();
guidlist.Add(guid);
count++;
IFeatureCursor feaCursor = pFC.Insert(true);
IFeatureBuffer feaBuffer = pFC.CreateFeatureBuffer();
feaBuffer.Shape = firstFea.Shape;//
object Ntime = DateTime.Now.ToShortDateString().ToString();
int idindex = feaBuffer.Fields.FindField("id");//
int fieldindex = feaBuffer.Fields.FindField("clsx_id");//
int timeindex = feaBuffer.Fields.FindField("createtime");//
if (fieldindex >= 0 && timeindex >= 0 && idindex >= 0)
{
feaBuffer.set_Value(fieldindex, id); feaBuffer.set_Value(timeindex, Ntime); feaBuffer.set_Value(idindex, guid);
}
改正之后(红色为新加入部分),在启动编辑之前使用IMultiuserWorkspaceEdit接口创建编辑:
var workspaceMulti = pSdeWorkspace as IMultiuserWorkspaceEdit;
var workspaceEdit = pSdeWorkspace as IWorkspaceEdit;
workspaceMulti.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMNonVersioned);
workspaceEdit.StartEditOperation();
guid = GetGuid();
guidlist.Add(guid);
count++;
IFeatureCursor feaCursor = pFC.Insert(true);
IFeatureBuffer feaBuffer = pFC.CreateFeatureBuffer();
feaBuffer.Shape = firstFea.Shape;//
object Ntime = DateTime.Now.ToShortDateString().ToString();
int idindex = feaBuffer.Fields.FindField("id");//
int fieldindex = feaBuffer.Fields.FindField("clsx_id");//
int timeindex = feaBuffer.Fields.FindField("createtime");//
if (fieldindex >= 0 && timeindex >= 0 && idindex >= 0)
{
feaBuffer.set_Value(fieldindex, id); feaBuffer.set_Value(timeindex, Ntime); feaBuffer.set_Value(idindex, guid);
}
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
即是开启多用户编辑(Non-versioned editing),并在工作空间编辑操作的开始与结束之间使用局部编辑,在一次编辑内进行多个局部具体的数据编辑操作。
但其实我觉得这是涉及到了ArcSDE的一个叫做版本机制(Versioning)的问题,即是说允许多个用户编辑同一个Geodatabase,将操作保存成快照,然后根据这个机制里的一些规则对更新后数据做处理,在编辑结束后返回更新的数据。在此使用IMultiuserWorkspaceEdit,声明了它不是一个多版本的操作,可能会避免掉这个问题,这也可能与ArcServer的运作方式有关,具体没有深究,但归根结底还是属于AE开发,只是用法做了些调整。
原代码:
guid = GetGuid();
guidlist.Add(guid);
count++;
IFeatureCursor feaCursor = pFC.Insert(true);
IFeatureBuffer feaBuffer = pFC.CreateFeatureBuffer();
feaBuffer.Shape = firstFea.Shape;//
object Ntime = DateTime.Now.ToShortDateString().ToString();
int idindex = feaBuffer.Fields.FindField("id");//
int fieldindex = feaBuffer.Fields.FindField("clsx_id");//
int timeindex = feaBuffer.Fields.FindField("createtime");//
if (fieldindex >= 0 && timeindex >= 0 && idindex >= 0)
{
feaBuffer.set_Value(fieldindex, id); feaBuffer.set_Value(timeindex, Ntime); feaBuffer.set_Value(idindex, guid);
}
改正之后(红色为新加入部分),在启动编辑之前使用IMultiuserWorkspaceEdit接口创建编辑:
var workspaceMulti = pSdeWorkspace as IMultiuserWorkspaceEdit;
var workspaceEdit = pSdeWorkspace as IWorkspaceEdit;
workspaceMulti.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMNonVersioned);
workspaceEdit.StartEditOperation();
guid = GetGuid();
guidlist.Add(guid);
count++;
IFeatureCursor feaCursor = pFC.Insert(true);
IFeatureBuffer feaBuffer = pFC.CreateFeatureBuffer();
feaBuffer.Shape = firstFea.Shape;//
object Ntime = DateTime.Now.ToShortDateString().ToString();
int idindex = feaBuffer.Fields.FindField("id");//
int fieldindex = feaBuffer.Fields.FindField("clsx_id");//
int timeindex = feaBuffer.Fields.FindField("createtime");//
if (fieldindex >= 0 && timeindex >= 0 && idindex >= 0)
{
feaBuffer.set_Value(fieldindex, id); feaBuffer.set_Value(timeindex, Ntime); feaBuffer.set_Value(idindex, guid);
}
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
即是开启多用户编辑(Non-versioned editing),并在工作空间编辑操作的开始与结束之间使用局部编辑,在一次编辑内进行多个局部具体的数据编辑操作。
但其实我觉得这是涉及到了ArcSDE的一个叫做版本机制(Versioning)的问题,即是说允许多个用户编辑同一个Geodatabase,将操作保存成快照,然后根据这个机制里的一些规则对更新后数据做处理,在编辑结束后返回更新的数据。在此使用IMultiuserWorkspaceEdit,声明了它不是一个多版本的操作,可能会避免掉这个问题,这也可能与ArcServer的运作方式有关,具体没有深究,但归根结底还是属于AE开发,只是用法做了些调整。
阅读全文
1 0
- 连接数据库Arcserver不关闭服务或是winform不关闭窗体无法显示编辑完毕的数据
- Winform不显示关闭按钮
- winform 窗体关闭但不释放资源
- winform 窗体关闭按钮禁用、不显示最大化、最小化、关闭按钮
- 不关闭数据连接的严重后果
- C# winform 窗口关闭按钮不显示
- 关闭web窗体不显示提示框
- javascript关闭当前窗体不显示提示框的脚本
- C# winform子窗体关闭后父窗体不前置的问题
- Spring的getSession方法造成的数据库不关闭连接
- Spring的getSession方法造成的数据库不关闭连接
- Spring的getSession方法造成的数据库不关闭连接
- WPF中让窗体不显示最大化,最小化,关闭按钮
- 关闭windows中不老实的服务
- mongodb连接不及时关闭的错误
- Eclipse不显示已关闭的工程
- winform关闭子窗体的同时关闭父窗体
- winform关闭子窗体的同时关闭父窗体
- 从零开始天池新人离线赛-数据预处理
- Python(4) Numpy,控制台完全输出ndarray
- bzoj 3550: [ONTAK2010]Vacation 单纯形
- pci驱动框架模版demo
- TextureView和地图
- 连接数据库Arcserver不关闭服务或是winform不关闭窗体无法显示编辑完毕的数据
- 安卓开发中的USB转串口通讯
- 稀疏矩阵快速转秩
- 河南省第十届ACM省赛题解 F Binary to Prime
- Android---网络编程(AsyncHttpClient)
- 大型网站架构之JAVA中间件
- Linux操作(持续补充)
- 快速排序实例
- WebSocket