This document was published with and applies to ArcGIS 9.3.
A 10 version also exists.
A 10 version also exists.
| Development licensing | Deployment licensing |
|---|---|
| ArcView | ArcView |
| ArcEditor | ArcEditor |
| ArcInfo | ArcInfo |
| Engine Developer Kit | Engine Runtime |
To use the code in this article, reference the following namespace via the using (C#) or Imports (VB .NET) statements. Add the corresponding reference to the project to gain access to the application programming interface (API):
- ESRI.ArcGIS.Geodatabase
In this topic
- Workspace properties
- Geodatabase release information
- Configuration keywords
- Database connection information
Workspace properties are objects that can be used to query a workspace about its capabilities and limitations. There are two types of workspace properties, those that indicate the capabilities of the workspace and those that indicate the capabilities of the tables in the workspace. The following table shows a complete list of workspace properties:
|
Property name
|
Description
|
Return type
|
|
CanExecuteSQL
|
Is the ExecuteSQL function supported?
|
Boolean
|
|
CanEdit
|
Is the workspace editable?
|
Boolean
|
|
IsReadonly
|
Is the workspace read-only?
|
Boolean
|
|
SupportsQualifiedNames
|
Does the workspace support qualified names?
|
Boolean
|
|
SupportsMetadata
|
Does the workspace support metadata?
|
Boolean
|
|
CanAnalyze
|
Can the workspace analyze tables?
|
Boolean
|
|
CanGetConfigurationKeywords
|
Can the workspace retrieve configuration keywords?
|
Boolean
|
|
IsGeoDatabase
|
Is the workspace a geodatabase?
|
Boolean
|
|
HasPrivateEditSession
|
Are the workspace's edit sessions privately managed?
|
Boolean
|
|
SupportsHighPrecisionStorage
|
Is high-precision geometry storage supported?
|
Boolean
|
|
SupportsExtensionDatasets
|
Does the workspace support the dataset extensibility model?
|
Boolean
|
|
SupportsArchiving
|
Is archiving supported?
|
Boolean
|
|
SupportsMoveEditsToBase
|
Is versioning with the option to move edits to base supported?
|
Boolean
|
Additionally, there are three workspace properties that aren't currently supported by (or fully implemented by) any workspaces, but might be in the future (MaxWhereClauseLength, LastCompressDate, and LastCompressStatus).
The following table shows a complete list of workspace table properties:
|
Property name
|
Description
|
Return type
|
|
RowCountIsCalculated
|
Are row counts calculated upon request?
|
Boolean
|
|
CanAddField
|
Can fields be added to tables?
|
Boolean
|
|
CanDeleteField
|
Can fields be deleted from tables?
|
Boolean
|
|
CanAddIndex
|
Can indexes be added to tables?
|
Boolean
|
|
CanDeleteIndex
|
Can indexes be deleted from tables?
|
Boolean
|
|
OIDIsRecordNumber
|
Are record numbers used as Object IDs?
|
Boolean
|
|
MaxFieldNameLength
|
What is the maximum number of characters that a field name can have?
|
Int32
|
|
BindCursor
|
Is cursor binding supported?
|
Boolean
|
|
SupportsMultiColumnIndexes
|
Are multi-column indexes supported?
|
Boolean
|
Workspace properties can be accessed from a workspace, through the IWorkspaceProperties interface. See the following illustration:
The second parameter of IWorkspaceProperties.Property isn’t strongly typed to a single enumeration, because the enumeration type that should be used depends on the value of the first parameter. To query a workspace property, the first parameter should be a value of esriWorkspacePropertyGroupType.esriWorkspacePropertyGroup, and the second parameter should be a value from the esriWorkspacePropertyType enumeration. To query a workspace table property, the first parameter should be a value of esriWorkspacePropertyGroupType.esriWorkspaceTablePropertyGroup, and the second should be a value from the esriWorkspaceTablePropertyType enumeration. Depending on the language and compiler parameters used, the second value may or may not have to be explicitly cast to a 32-bit integer.
IWorkspaceProperty.IsSupported indicates whether a workspace can be queried for a specific property, since not every workspace is "aware" of every property. IsSupported should be checked before accessing the PropertyValue property. The following code example shows how to display a workspace property to the console:
[C#]
public int GetMaximumFieldNameLength(IWorkspace workspace)
{
// Get the workspace property.
IWorkspaceProperties workspaceProperties = workspace as IWorkspaceProperties;
if (workspaceProperties == null)
{
throw new ArgumentException(
"Workspace does not implement IWorkspaceProperties.");
}
IWorkspaceProperty workspaceProperty = workspaceProperties.get_Property
(esriWorkspacePropertyGroupType.esriWorkspaceTablePropertyGroup, (int)
esriWorkspaceTablePropertyType.esriTablePropMaxFieldNameLength);
// See if the property is supported.
if (workspaceProperty.IsSupported)
{
// Get the property value.
object propertyValue = workspaceProperty.PropertyValue;
return Convert.ToInt32(propertyValue);
}
else
{
throw new Exception("The esriTablePropMaxFieldNameLength property is " +
"not supported by this workspace.");
}
}
[VB.NET]
Public Function GetMaximumFieldNameLength(ByVal workspace As IWorkspace) As Integer
' Get the workspace property.
Dim workspaceProperties As IWorkspaceProperties = TryCast(workspace, IWorkspaceProperties)
If workspaceProperties Is Nothing Then
Throw New ArgumentException("Workspace does not implement IWorkspaceProperties.")
End If
Dim workspaceProperty As IWorkspaceProperty = workspaceProperties.Property _
(esriWorkspacePropertyGroupType.esriWorkspaceTablePropertyGroup, _
CInt(esriWorkspaceTablePropertyType.esriTablePropMaxFieldNameLength))
' See if the property is supported.
If workspaceProperty.IsSupported Then
' Get the property value.
Dim propertyValue As Object = workspaceProperty.PropertyValue
Return CInt(propertyValue)
Else
Throw New Exception("The esriTablePropMaxFieldNameLength property is " + _
"not supported by this workspace.")
End If
End Function
To effectively evaluate a property value (that is, to include the result in logic), the return type must be known. Because workspace properties can return different types of values, it’s a developer’s responsibility to know the type of value that will be returned from a property, and to cast it appropriately.
The version of a geodatabase can be queried using the IGeodatabaseRelease interface. It can be used to determine whether the geodatabase release number is current with the client, whether a specific dataset type is supported by the geodatabase, and (if the geodatabase is an older release) whether the client can upgrade the geodatabase. Additionally, the IGeodatabaseRelease2 interface can be used to determine whether or not the geodatabase supports a specific type of dataset.
The following code example shows how the IGeodatabaseRelease interface can be used to upgrade an older geodatabase to the current release:
[C#]
public void UpgradeGeodatabase(IWorkspace workspace)
{
// Display the current version of the geodatabase.
IGeodatabaseRelease2 gdbRelease = (IGeodatabaseRelease2)workspace;
Console.WriteLine("GDB release: {0}.{1}.{2}", gdbRelease.MajorVersion,
gdbRelease.MinorVersion, gdbRelease.BugfixVersion);
if (gdbRelease.CurrentRelease)
{
Console.WriteLine("This geodatabase is current with the client.");
}
else
{
Console.WriteLine("This geodatabase is not current with the client.");
// Try to upgrade the geodatabase.
if (gdbRelease.CanUpgrade)
{
try
{
Console.WriteLine("Upgrading the geodatabase...");
gdbRelease.Upgrade();
Console.WriteLine("The new GDB release: {0}.{1}.{2}",
gdbRelease.MajorVersion, gdbRelease.MinorVersion,
gdbRelease.BugfixVersion);
}
catch (COMException comExc)
{
Console.WriteLine("Upgrading the geodatabase failed:");
Console.WriteLine("{0} ({1})", comExc.Message, comExc.ErrorCode);
}
}
else
{
Console.WriteLine("The geodatabase could not be upgraded.");
}
}
}
[VB.NET]
Public Sub UpgradeGeodatabase(ByVal workspace As IWorkspace)
' Display the current version of the geodatabase.
Dim gdbRelease As IGeodatabaseRelease2 = CType(workspace, IGeodatabaseRelease2)
Console.WriteLine("GDB release: {0}.{1}.{2}", gdbRelease.MajorVersion, _
gdbRelease.MinorVersion, gdbRelease.BugfixVersion)
If gdbRelease.CurrentRelease Then
Console.WriteLine("This geodatabase is current with the client.")
Else
Console.WriteLine("This geodatabase is not current with the client.")
' Try to upgrade the geodatabase.
If gdbRelease.CanUpgrade Then
Try
Console.WriteLine("Upgrading the geodatabase...")
gdbRelease.Upgrade()
Console.WriteLine("The new GDB release: {0}.{1}.{2}", _
gdbRelease.MajorVersion, gdbRelease.MinorVersion, _
gdbRelease.BugfixVersion)
Catch comExc As COMException
Console.WriteLine("Upgrading the geodatabase failed:")
Console.WriteLine("{0} ({1})", comExc.Message, comExc.ErrorCode)
End Try
Else
Console.WriteLine("The geodatabase could not be upgraded.")
End If
End If
End Sub
Configuration keywords represent a setting or a group of settings that tell the geodatabase where or in what format to store data contents in each dataset within ArcSDE and file geodatabases. For more information on configuration keywords and parameters, see the ArcGIS Desktop Help topic, An overview of configuration keywords and how they are used.
To access a list of available configuration keywords programmatically, developers can use the IWorkspaceConfiguration interface, which defines a single property, ConfigurationKeywords. This returns an enumerator of configuration keywords. Each configuration keyword has properties that describe it and a list of parameters that can be accessed through an enumerator.
ArcSDE configuration keywords cannot be created or modified using the ArcObjects API. For information on how to customize configuration keywords, see the ArcGIS Desktop Help topic, DBTUNE configuration keywords. File geodatabase configuration keywords cannot be created or modified.
The following code example shows how to access configuration keywords in a geodatabase and display their properties and parameters:
[C#]
public void DisplayConfigurationKeywords(IWorkspace workspace)
{
// Get a configuration keyword enumerator.
IWorkspaceConfiguration workspaceConfig = (IWorkspaceConfiguration)workspace;
IEnumConfigurationKeyword enumConfigKeyword =
workspaceConfig.ConfigurationKeywords;
enumConfigKeyword.Reset();
// Iterate through the configuration keywords.
IConfigurationKeyword configKeyword = null;
while ((configKeyword = enumConfigKeyword.Next()) != null)
{
// Display the keyword properties.
Console.WriteLine("Name: {0}", configKeyword.Name);
Console.WriteLine("Type: {0}", configKeyword.KeywordType);
Console.WriteLine("Description: {0}", configKeyword.Description);
Console.WriteLine("Comments: {0}", configKeyword.Comments);
// Iterate through the keyword's parameters.
IEnumConfigurationParameter enumConfigParameter =
configKeyword.ConfigurationParameters;
enumConfigParameter.Reset();
IConfigurationParameter configParameter = null;
while ((configParameter = enumConfigParameter.Next()) != null)
{
Console.WriteLine("Parameter: {0} ({1})", configParameter.Name,
configParameter.ConfigurationString);
}
}
}
[VB.NET]
Public Sub DisplayConfigurationKeywords(ByVal workspace As IWorkspace)
' Get a configuration keyword enumerator.
Dim workspaceConfig As IWorkspaceConfiguration = CType(workspace, IWorkspaceConfiguration)
Dim enumConfigKeyword As IEnumConfigurationKeyword = workspaceConfig.ConfigurationKeywords
enumConfigKeyword.Reset()
' Iterate through the configuration keywords.
Dim configKeyword As IConfigurationKeyword = enumConfigKeyword.Next()
While Not configKeyword Is Nothing
' Display the keyword properties.
Console.WriteLine("Name: {0}", configKeyword.Name)
Console.WriteLine("Type: {0}", configKeyword.KeywordType)
Console.WriteLine("Description: {0}", configKeyword.Description)
Console.WriteLine("Comments: {0}", configKeyword.Comments)
' Iterate through the keyword's parameters.
Dim enumConfigParameter As IEnumConfigurationParameter = configKeyword.ConfigurationParameters
enumConfigParameter.Reset()
Dim configParameter As IConfigurationParameter = enumConfigParameter.Next()
While Not configParameter Is Nothing
Console.WriteLine("Parameter: {0} ({1})", configParameter.Name, configParameter.ConfigurationString)
configParameter = enumConfigParameter.Next()
End While
configKeyword = enumConfigKeyword.Next()
End While
End Sub
The IDatabaseConnectionInfo and IDatabaseConnectionInfo2 interfaces are implemented by ArcSDE geodatabases to provide information about a workspace’s connection. The following code example shows how to use the interfaces to get the name of the workspace’s server, name of the connected user, name of the database, type of database (that is, Oracle, SQL Server), and the server class (that is, personal, workgroup, or enterprise).
[C#]
public void DisplayConnectionInfo(IWorkspace workspace)
{
IDatabaseConnectionInfo2 connectionInfo = (IDatabaseConnectionInfo2)workspace;
Console.WriteLine("Server: {0}", connectionInfo.ConnectionDBMS);
Console.WriteLine("User: {0}", connectionInfo.ConnectedUser);
Console.WriteLine("Database: {0}", connectionInfo.ConnectedDatabase);
Console.WriteLine("DBMS: {0}", connectionInfo.ConnectionDBMS);
Console.WriteLine("Server Class: {0}", connectionInfo.GeodatabaseServerClass);
}
[VB.NET]
Public Sub DisplayConnectionInfo(ByVal workspace As IWorkspace)
Dim connectionInfo As IDatabaseConnectionInfo2 = CType(workspace, IDatabaseConnectionInfo2)
Console.WriteLine("Server: {0}", connectionInfo.ConnectionDBMS)
Console.WriteLine("User: {0}", connectionInfo.ConnectedUser)
Console.WriteLine("Database: {0}", connectionInfo.ConnectedDatabase)
Console.WriteLine("DBMS: {0}", connectionInfo.ConnectionDBMS)
Console.WriteLine("Server Class: {0}", connectionInfo.GeodatabaseServerClass)
End Sub