環境描述
在開發過程中使用的環境配置聲明
- 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的沙場,分享有價值的東西!