Alih-alih mendapatkan dataset:
// Retrieve the first feature dataset from the workspace.
IEnumDatasetName enumDatasetName = workspace.get_DatasetNames
(esriDatasetType.esriDTFeatureDataset);
Anda bisa mendapatkan kelas fitur dengan:
IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass);
Lihat utas ini:
Mengekspor / mengimpor kelas fitur geodatabase ke file XML
MEMPERBARUI
Anda bisa mendapatkan nama fc dalam dataset geodatabase / fitur menggunakan kode ini (solusi di 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
Kode direferensikan dari pos ini:
ArcObjects - enumerating kelas fitur dan dataset dalam geodatabase
IEnumDatasetName
objek? The(IName)name.NameString
selalu mengembalikan sebuah string kosong. Saya juga mendapatkan pengecualian (Pengecualian dari HRESULT: 0x80040220) dariGenerateNameMapping
dengan contoh kode saat ini ...IName
keIFeatureClassName
atauIFeatureClass
dan kemudian membukanya, dan MAKA saya memiliki nama sebenarnya. Betapa berantakan itu!Jika Anda berada di 10.1, coba gunakan alat geoprosesing Dokumen XML Workspace (Manajemen Data) .
Saya tidak yakin apa yang akan dilakukan jika Anda menentukan kelas fitur yang berpartisipasi dalam kelas hubungan, tapi saya membayangkan itu akan mencakup kelas hubungan dan kelas objek terkait juga.
sumber