环境描述
在开发过程中使用的环境配置声明
- ArcEngine 10.2
- ArcSDE10.2
- Visual Studio 2012
- SQL Server 2012
问题描述
ArcEngine 连接sql server sde过程中 Arcsde was not running.

解决方法
- 通过连接sde文件
如果读者在数据库中创建SDE文件完成,则通过打开sde文件的形式,从sde数据库中获取数据!
连接代码如下:
string connectionString = @"C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.2\ArcCatalog\Connection to PC-20170517EXJJ.sde";
Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
IWorkspaceFactory2 workspaceFactory2 = (IWorkspaceFactory2)Activator.CreateInstance(factoryType);
IWorkspace pworkspace = workspaceFactory2.OpenFromFile(connectionString, );
IFeatureWorkspace pFeaWS = pworkspace as IFeatureWorkspace;
IFeatureClass pFeatureClas = pFeaWS.OpenFeatureClass("sde.dbo.REGIONS ");
IFeatureLayer pFLr = new FeatureLayerClass();
pFLr.FeatureClass = pFeatureClas;
axMapControl1.AddLayer(pFLr as ILayer);
实现的效果
- 第二种方式是通过数据库进行连接
链接的代码如下:
Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
IPropertySet propertySet = new PropertySetClass();
propertySet.SetProperty("SERVER", "PC-20170517EXJJ");
propertySet.SetProperty("SERVICE", "..");
propertySet.SetProperty("DATABASE", "sde");
propertySet.SetProperty("USER", "sde");
propertySet.SetProperty("PASSWORD", "sde");
propertySet.SetProperty("INSTANCE", "sde:sqlserver:..");
//propertySet.SetProperty("VERSION", "sde.DEFAULT");
propertySet.SetProperty("AUTHENTICATION_MODE", "DBMS");
//Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
IWorkspace workspace = workspaceFactory.Open(propertySet, );
//MessageBox.Show("数据库连接成功");
IEnumDataset enumDataSet = workspace.get_Datasets(esriDatasetType.esriDTAny);
enumDataSet.Reset();
IDataset dataSet;
dataSet = enumDataSet.Next();
while (dataSet != null)
{
if (dataSet is IFeatureDataset)
{
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset(dataSet.Name);
IEnumDataset pEnumDataset1 = featureDataset.Subsets;
pEnumDataset1.Reset();
IDataset pDataset1 = pEnumDataset1.Next();
if (pDataset1 is IFeatureClass)
{
IFeatureLayer pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(pDataset1.Name);
pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
main_mapControl1.Map.AddLayer(pFeatureLayer);
main_mapControl1.ActiveView.Refresh();
}
}
else if (dataSet is IFeatureClass)
{
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
IFeatureClass feature = featureWorkspace.OpenFeatureClass(dataSet.Name);
IFeatureLayer layer = new FeatureLayerClass();
layer.FeatureClass = feature;
layer.Name = feature.AliasName;
main_mapControl1.AddLayer(layer);
}
dataSet = enumDataSet.Next();
}
main_mapControl1.Refresh();
MessageBox.Show("数据读取完毕!");
this.Close();
实现的效果
最后,我来说说
这个是经过千幸万苦找到的回复,答案和大家分享。
http://support.esri.com/technical-article/000011662
在GIS的沙场,分享有价值的东西!