Thay vì lấy tập dữ liệu:
// Retrieve the first feature dataset from the workspace.
IEnumDatasetName enumDatasetName = workspace.get_DatasetNames
(esriDatasetType.esriDTFeatureDataset);
Bạn có thể nhận được lớp tính năng bằng cách:
IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass);
Xem chủ đề này:
Xuất / nhập lớp tính năng cơ sở dữ liệu địa lý sang tệp XML
CẬP NHẬT
Bạn có thể nhận tên fc trong bộ dữ liệu địa lý / dữ liệu tính năng bằng mã này (giải pháp trong VB.NET):
Sub TestGetContents()
Try
Dim pGxApp As IGxApplication
Dim Type As System.Type = System.Type.GetTypeFromCLSID(GetType(ESRI.ArcGIS.Framework.AppRefClass).GUID)
pGxApp = TryCast(Activator.CreateInstance(Type), ESRI.ArcGIS.CatalogUI.IGxApplication)
'select geodatabase in Catalog tree
If Not TypeOf pGxApp.SelectedObject Is IGxDatabase Then
Debug.Print("select a geodb first")
Exit Sub
End If
Dim c As Collection
c = GetContents(pGxApp.SelectedObject)
Dim l As Long
For l = 1 To c.Count
Dim pName As IName
pName = c.Item(l)
If TypeOf pName Is IFeatureClassName Then
Dim pFC As IFeatureClass
pFC = pName.Open
MessageBox.Show(pFC.AliasName)
ElseIf TypeOf pName Is IFeatureDatasetName Then
Dim pDSName As IDatasetName
pDSName = pName
MessageBox.Show(pDSName.Name)
End If
Next l
Catch ex As Exception
MessageBox.Show("Caught an unspecified error in the calling code: " & vbCrLf & ex.ToString)
End Try
End Sub
Function GetContents(ByVal pGxDB As IGxDatabase) As Collection
Try
Dim c As New Collection
Dim pEnumDSName As IEnumDatasetName
pEnumDSName = pGxDB.Workspace.DatasetNames(esriDatasetType.esriDTAny)
Dim pDSName As IDatasetName
pDSName = pEnumDSName.Next
Do Until pDSName Is Nothing
If TypeOf pDSName Is IFeatureClassName Then
c.Add(pDSName)
ElseIf TypeOf pDSName Is IFeatureDatasetName Then
c.Add(pDSName)
AddSubNames(pDSName, c)
End If
pDSName = pEnumDSName.Next
Loop
GetContents = c
Catch ex As Exception
MessageBox.Show("Caught an unspecified error in the calling code: " & vbCrLf & ex.ToString)
End Try
End Function
Sub AddSubNames(ByVal pDSName1 As IDatasetName, ByVal c As Collection)
Try
Dim pEnumDSName As IEnumDatasetName
pEnumDSName = pDSName1.SubsetNames
pEnumDSName.Reset()
Dim pDSName2 As IDatasetName
pDSName2 = pEnumDSName.Next
Do Until pDSName2 Is Nothing
If TypeOf pDSName2 Is IFeatureClassName Then
c.Add(pDSName2)
End If
pDSName2 = pEnumDSName.Next
Loop
Catch ex As Exception
MessageBox.Show("Caught an unspecified error in the calling code: " & vbCrLf & ex.ToString)
End Try
End Sub
Mã được tham chiếu từ bài viết này:
ArcObjects - liệt kê các lớp tính năng và bộ dữ liệu trong cơ sở dữ liệu địa lý
IEnumDatasetName
đối tượng khỏi đối tượng? Các(IName)name.NameString
luôn trả về một chuỗi rỗng. Tôi cũng nhận được một ngoại lệ (Ngoại lệ từ HRESULT: 0x80040220) từGenerateNameMapping
ví dụ mã hiện tại ...