【AE】SDE图层断开后重新连接的解决方法
2015-01-22 16:50
591 查看
问题描述:
大家在程序中使用SDE图层时,是不是经常碰到这种情况:因网络连接中断而导致SDE图层不见了。即使之后网络连接上了,SDE图层并不会自动重新显示。
解决方法:
在网上没找到相关资料。好吧,咱自力更生,好好研究研究AE的帮助文档,想来应该与SdeWorkspace有关,看了相关的接口,没发现什么。转念一想,SdeWorkspace 不都是由SdeWorkspaceFactory创建的嘛,查看SdeWorkspaceFactoryClass,果然发现了秘密,其实现了一个名为IWorkspaceFactoryStatus的接口。该接口的详细说明如下:
IWorkspaceFactoryStatus Interface
Provides access to members that manage workspace status information.Product Availability
Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.
Members
[csharp]
view plaincopyprint?
// 重新连接SDE图层 【dxcgis】
private void ReconnectSDELayer(IFeatureLayer featureLayer)
{
IDataset dataset = featureLayer as IDataset;
IWorkspaceFactory workspaceFactory = dataset.Workspace.WorkspaceFactory;
IWorkspaceFactoryStatus workspaceFactoryStatus = workspaceFactory
as IWorkspaceFactoryStatus;
IEnumWorkspaceStatus enumWorkspaceStatus = workspaceFactoryStatus.WorkspaceStatus;
IWorkspaceStatus workspaceStatus =
null;
while ((workspaceStatus = enumWorkspaceStatus.Next()) !=
null)
{
if (dataset.Workspace.Equals(workspaceStatus.Workspace))
{
break;
}
}
// 检测SDE连接是否断开
if (workspaceStatus !=
null &&
workspaceStatus.ConnectionStatus == esriWorkspaceConnectionStatus.esriWCSDown)
{
IWorkspaceStatus pingedStatus = workspaceFactoryStatus.PingWorkspaceStatus(dataset.Workspace);
if (pingedStatus.ConnectionStatus == esriWorkspaceConnectionStatus.esriWCSAvailable)
{
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactoryStatus.OpenAvailableWorkspace(pingedStatus);
featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(featureLayer.FeatureClass.AliasName);
}
else if (pingedStatus.ConnectionStatus == esriWorkspaceConnectionStatus.esriWCSDown)
{
MessageBox.Show("未能连接SDE数据库,请检查网络及数据库!",
"SDE连接提示");
}
}
}
后记: AE的接口真的是很丰富,我们需要好好深入研究其帮助文档,很可能,就有不少收获。
大家在程序中使用SDE图层时,是不是经常碰到这种情况:因网络连接中断而导致SDE图层不见了。即使之后网络连接上了,SDE图层并不会自动重新显示。
解决方法:
在网上没找到相关资料。好吧,咱自力更生,好好研究研究AE的帮助文档,想来应该与SdeWorkspace有关,看了相关的接口,没发现什么。转念一想,SdeWorkspace 不都是由SdeWorkspaceFactory创建的嘛,查看SdeWorkspaceFactoryClass,果然发现了秘密,其实现了一个名为IWorkspaceFactoryStatus的接口。该接口的详细说明如下:
IWorkspaceFactoryStatus Interface
Provides access to members that manage workspace status information.Product Availability
Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.
Members
OpenAvailableWorkspace | Makes an attempt to open a new instance of a workspace that is esriWCSDown but has since become esriWCSAvailable. | |
PingWorkspaceStatus | Checks if the status of an esriWCSDown workspace has changed. | |
WorkspaceStatus | Retrieve the workspace status information for all currently opened workspaces |
view plaincopyprint?
// 重新连接SDE图层 【dxcgis】
private void ReconnectSDELayer(IFeatureLayer featureLayer)
{
IDataset dataset = featureLayer as IDataset;
IWorkspaceFactory workspaceFactory = dataset.Workspace.WorkspaceFactory;
IWorkspaceFactoryStatus workspaceFactoryStatus = workspaceFactory
as IWorkspaceFactoryStatus;
IEnumWorkspaceStatus enumWorkspaceStatus = workspaceFactoryStatus.WorkspaceStatus;
IWorkspaceStatus workspaceStatus =
null;
while ((workspaceStatus = enumWorkspaceStatus.Next()) !=
null)
{
if (dataset.Workspace.Equals(workspaceStatus.Workspace))
{
break;
}
}
// 检测SDE连接是否断开
if (workspaceStatus !=
null &&
workspaceStatus.ConnectionStatus == esriWorkspaceConnectionStatus.esriWCSDown)
{
IWorkspaceStatus pingedStatus = workspaceFactoryStatus.PingWorkspaceStatus(dataset.Workspace);
if (pingedStatus.ConnectionStatus == esriWorkspaceConnectionStatus.esriWCSAvailable)
{
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactoryStatus.OpenAvailableWorkspace(pingedStatus);
featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(featureLayer.FeatureClass.AliasName);
}
else if (pingedStatus.ConnectionStatus == esriWorkspaceConnectionStatus.esriWCSDown)
{
MessageBox.Show("未能连接SDE数据库,请检查网络及数据库!",
"SDE连接提示");
}
}
}
// 重新连接SDE图层 【dxcgis】 private void ReconnectSDELayer(IFeatureLayer featureLayer) { IDataset dataset = featureLayer as IDataset; IWorkspaceFactory workspaceFactory = dataset.Workspace.WorkspaceFactory; IWorkspaceFactoryStatus workspaceFactoryStatus = workspaceFactory as IWorkspaceFactoryStatus; IEnumWorkspaceStatus enumWorkspaceStatus = workspaceFactoryStatus.WorkspaceStatus; IWorkspaceStatus workspaceStatus = null; while ((workspaceStatus = enumWorkspaceStatus.Next()) != null) { if (dataset.Workspace.Equals(workspaceStatus.Workspace)) { break; } } // 检测SDE连接是否断开 if (workspaceStatus != null && workspaceStatus.ConnectionStatus == esriWorkspaceConnectionStatus.esriWCSDown) { IWorkspaceStatus pingedStatus = workspaceFactoryStatus.PingWorkspaceStatus(dataset.Workspace); if (pingedStatus.ConnectionStatus == esriWorkspaceConnectionStatus.esriWCSAvailable) { IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactoryStatus.OpenAvailableWorkspace(pingedStatus); featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(featureLayer.FeatureClass.AliasName); } else if (pingedStatus.ConnectionStatus == esriWorkspaceConnectionStatus.esriWCSDown) { MessageBox.Show("未能连接SDE数据库,请检查网络及数据库!", "SDE连接提示"); } } }
后记: AE的接口真的是很丰富,我们需要好好深入研究其帮助文档,很可能,就有不少收获。
相关文章推荐
- 【AE】SDE图层断开后重新连接的解决方法
- VMware无法识别USB设备的解决方法 以及 从虚拟机中断开USB设备,使其重新连接到windows主机上
- VMware ESXi客户端连接控制台时提示"VMRC控制台连接已断开...正在尝试重新连接"的解决方法
- pixhawk 烧写自己编译的程序需要重新插拔或不能正常连接QGC的解决方法
- 关于【对象“***.rem”已经断开连接或不在服务器上】异常的解决方法
- 远程桌面连接出现"由于网络错误,连接被中断,请重新连接到远程计算机"错误的解决方法
- 安装网站时出现“连接数据库出现数据库服务器或登录密码无效,无法连接数据库,请重新设定”解决方法
- WPF学习笔记 - ”指定的元素已经是另一个元素的逻辑子元素。请先将其断开连接。“问题的解决方法之一
- Android Wear开启通过蓝牙调试后,显示"主机:已断开连接"解决方法
- 数据源不定时间段后连接中断(解决方法:连接关闭后设置自启动,重新自动连接
- Remobjects SDK 服务器断线后,客户端重新连接的解决方法
- 关于【对象“***.rem”已经断开连接或不在服务器上】异常的解决方法
- 安卓enableNetwork连接不上指定wifi或连接wifi后断开,连接到其他wifi的原因和解决方法
- 机房几台终端电脑,本地连接中不停的出现连接和断开,网络不通,解决方法
- 使用DBCP连接池时出现MySql 8小时断开连接的解决方法
- 关于解决数据库网络断开重新连接的尝试
- tomcat与mysql连接隔段时间没有访问总是自动断开解决方法
- IIS断开连接之后internet信息服务里面不显示本地计算机的解决方法
- Navicat 连接数据库老是自动断开连接解决方法