SDE是ESRI开发的一个空间数据引擎,能够利用文件数据库良好的管理优势去管理数据的图形和属性。AccessDatabase 与后来的 FileGeoDataBase同样也能够很好的管理数据,但是与SDE数据库最大差别是它们不支持多用户同时编辑,也就是SDE的版本技术。虽然大家都知道这些,但是懒羊羊还是要顺便提一下。
很多人第一次接触SDE数据的时候思想可能还停留在对shp文件或是MDB文件的操作上面。事实上它们大部分的操作时一致的,但接入的方式有所不同。由于SDE多了一个版本的控制,所以在数据的载入与打开FeatureClass的时候有很大的差别。下面开始转入正题,讲述一下如何对SDE数据进行操作。
1.打开SDE数据。
SDE数据一定要使用工作空间工厂去初始化工作空间,在工作空间打开FeatureClass,这是最常规的操作。下面通过一段C#代码连接SDE,打开并返回一个IWorkspace。
很多人第一次接触SDE数据的时候思想可能还停留在对shp文件或是MDB文件的操作上面。事实上它们大部分的操作时一致的,但接入的方式有所不同。由于SDE多了一个版本的控制,所以在数据的载入与打开FeatureClass的时候有很大的差别。下面开始转入正题,讲述一下如何对SDE数据进行操作。
1.打开SDE数据。
SDE数据一定要使用工作空间工厂去初始化工作空间,在工作空间打开FeatureClass,这是最常规的操作。下面通过一段C#代码连接SDE,打开并返回一个IWorkspace。
public IWorkspace FindWsByDefault()
{
IPropertySet propSet = new PropertySetClass();
propSet.SetProperty("Server", Lan);
propSet.SetProperty("Instance", yangyang);
propSet.SetProperty("Database", "");
propSet.SetProperty("User", user);
propSet.SetProperty("Password", pwd);
propSet.SetProperty("Version", version);
IWorkspaceFactory factory = new SdeWorkspaceFactoryClass();
IWorkspace workspace = factory.Open(propSet, 0);
return workspace;
}
通过上述代码打开了SDE的工作空间,接下来要做的就是获取要编辑的FeatureClass。写一个函数,通过FeatureClass的别名和所在的Dataset返回FeatureClass。做法是先遍历所有的DataSet,找到符合要求的Dataset之后遍历里面的要素,返回与参与别名一致的FeatureClass(顺便说一下,FeatureClass在没有指定别名的时候默认与FeatureClass名称相同)
//查找指定要素
public IFeatureClass FindClassByName(IWorkspace ws, string className, string dsName)
{
IEnumDataset enumDs;
if (dsName != "")
{
enumDs = ws.get_Datasets(esriDatasetType.esriDTFeatureDataset);
IFeatureDataset featureDs = enumDs.Next() as IFeatureDataset;
while (featureDs != null)
{
if (featureDs.Name == dsName)
{
return GetFcFromDataset(featureDs, className);
//查找指定要素
public IFeatureClass FindClassByName(IWorkspace ws, string className, string dsName)