IWorkspaceFactory, IWorkspace how to open feature class?

1428
4
08-17-2018 06:12 AM
JoseSanchez
Occasional Contributor III

Hello everyone,

I  am currently opening an SDE feature class  using "OpenFeatureClassFromString"

pathOutput = "C:\\SDEConnections\\EditingDatabase.sde\\FeatureDataset\\FeatureClass"

Dim pFeatureClass As IFeatureClass

pFeatureClass = gputilities.OpenFeatureClassFromString(pathOutput)

I would like to open a IWorkspaceFactory and a IWorkSpace and then open the feature class from the workspace.

Dim WorkspaceFactory As IWorkspaceFactory = New WorkspaceFactory()

Dim Workspace As IWorkspace = WorkspaceFactory.OpenFromFile(pathWorkspaceOutput, 0)

????

Thanks

0 Kudos
4 Replies
FrankHellwich1
New Contributor III

Hi,

first you should open your sde-workspace and then cast this workspace to IFeatureWorkspace to open your feature class.

1.) open Workspace: (Connecting to a workspace using IPropertySet )

public IWorkspace open_ArcSDE_Workspace(string server, string instance, string user,
string password, string database, string version)
{
ESRI.ArcGIS.esriSystem.IPropertySet propertySet = new ESRI.ArcGIS.esriSystem.PropertySetClass();
propertySet.SetProperty("SERVER", server);
propertySet.SetProperty("INSTANCE", instance);
propertySet.SetProperty("DATABASE", database);
propertySet.SetProperty("USER", user);
propertySet.SetProperty("PASSWORD", password);
propertySet.SetProperty("VERSION", version);

IWorkspaceFactory workspaceFactory = new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass();
return workspaceFactory.Open(propertySet, 0); 
}

2.)  open  feature class

IFeatureClass pFClass = ((IFeatureWorkspace)mySdeWorkspace).OpenFeatureClass(name);

0 Kudos
JoseSanchez
Occasional Contributor III

How do you write this line in vb.net:

IFeatureClass pFClass = ((IFeatureWorkspace)mySdeWorkspace).OpenFeatureClass(name);

0 Kudos
FrankHellwich1
New Contributor III

Hello Jose,

I'm no vb.net-guru but I think casting in vb.net is done by using DirectCast/TryCast:

1. if you're sure that casting will succeed (otherwise it throws an exception so use an exception handler) use DirectCast:

Dim pFWsp as IFeatureWorkspace= DirectCast(mySdeWorkspace, IFeatureWorkspace)
Dim pFClass as IFeatureClass = pFWsp.OpenFeatureClass(name) 

2. if you're not sure - use TryCast

Dim pFWsp as IFeatureWorkspace= TryCast(mySdeWorkspace, IFeatureWorkspace)
if pFWsp IsNot Nothing then
   Dim pFClass as IFeatureClass = pFWsp.OpenFeatureClass(name) 
   ...
End if
0 Kudos
JoseSanchez
Occasional Contributor III

i Frank,

This is how I did it:

Dim muWorkspaceEdit As IMultiuserWorkspaceEdit = CType(pFeatureWorkspace, IMultiuserWorkspaceEdit)

Dim pworkspaceEdit As IWorkspaceEdit = CType(pFeatureWorkspace, IWorkspaceEdit)

0 Kudos