做arcgis开发时间长了。常常遇到一些莫名其妙的问题。
sde连接莫名不退出就是一个问题。非得重启sde服务。不能每次都重启服务啊。
后来发现 sde连接信息都是存在sde的一个系统表里的。删除连接信息之后。该连接就没了。
当然,这样可以迅速剔除sde连接。但是不知道有没有什么后果。目前我是没发现什么后果。
下面贴程序中调用的方式。直接连接数据库。执行sql即可。
string delSDEsession = "delete from (select t.*, t.rowid from SDE.PROCESS_INFORMATION t where t.owner='你的用户名' )";
string strconn = “连接字符串”;
OracleConnection oraConn = new OracleConnection(strconn);
OracleCommand oraCommand = new OracleCommand(delSDEsession, oraConn);
oraConn.Open();
oraCommand.ExecuteNonQuery();
OracleCommand oraCommand1 = new OracleCommand("commit", oraConn);
oraCommand1.ExecuteNonQuery();
oraConn.Close();
如果程序开着的时候直接这样断开又想重新连接。可以用下面的方法。
// 重新连接SDE
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;
}
}
// 检测连接是否断开
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失败,请检查网络!", "提示");
}
}
}
完毕!