CÓMO

Obtener todas las propiedades de un archivo de conexión de base de datos (SDE) de ArcGIS Enterprise mediante ArcObjects

Last Published: February 5, 2024

Descripción

En una aplicación cliente de ArcObjects o ArcGIS Engine, es posible que deseemos conectarnos a un espacio de trabajo de geodatabase multiusuario, como Oracle o SQL Server, mediante la interfaz IPropertySet. A continuación se proporciona un ejemplo de código que muestra este flujo de trabajo:

C#
string dbclient = "sqlserver";
string dbConnProp = @"myMachineName\SQLEXPRESS";
string database = "myDatabase";
string user = "myUserName";
string password = "myPassword";
string version = "sde.DEFAULT";
string authentication = "DBMS";

IPropertySet propertySet = new PropertySet();
propertySet.SetProperty("DBCLIENT", dbclient);
propertySet.SetProperty("DB_CONNECTION_PROPERTIES", dbConnProp);
propertySet.SetProperty("DATABASE", database);
propertySet.SetProperty("USER", user);
propertySet.SetProperty("PASSWORD", password);
propertySet.SetProperty("VERSION", version);
propertySet.SetProperty("AUTHENTICATION_MODE", authentication);

Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
IWorkspace workspace = workspaceFactory.Open(propertySet, 0);

Al ejecutar el código anterior, se puede recibir una excepción de tiempo de ejecución, como la siguiente:

Error: System.Runtime.InteropSerives.COMException: "Underlying DBMS error[ORA-12545: Connect failed because target host or object does not exist. No extended error.]

Causa

Lo más probable es que esta excepción se deba a un error tipográfico en una de las propiedades anteriores del conjunto de propiedades.

Solución o solución alternativa

Una manera de resolver este problema es trabajar a la inversa y usar el método IPropertySet.GetAllProperties para obtener todas las propiedades de conexión SDE directamente de un archivo de conexión SDE.

Este archivo de conexión SDE se puede generar conectándose a la geodatabase multiusuario (SDE) desde un cliente de escritorio, como ArcCatalog. La ruta del archivo de conexión se puede copiar desde la ventana Propiedades de la base de datos de la conexión SDE en ArcCatalog:

Haga clic con el botón derecho en la conexión SDE en el árbol de catálogo y haga clic en Propiedades > pestaña General:

Name: C:\Users\myUserName\AppData\Roaming\ESRI\Desktop10.8\ArcCatalog\mySDEConnectionFile.sde

El método GetAllProperties es especialmente útil cuando no estamos seguros de la sintaxis de los valores del conjunto de propiedades. Es fácil cometer errores sintácticos al escribirlos, y su código de ArcObjects no se ejecutará incluso con el más mínimo error tipográfico, por ejemplo, ausencia de dos puntos, una barra invertida, un punto o un signo de dólar. En el ejemplo de código siguiente se muestra cómo llamar a este método y generar los valores en la consola de depuración de Visual Studio:

C#
// Get the Workspace from an existing SDE file (after a successful connection to an Enterprise Geodatabase)
IWorkspace workspace = IWorkspaceFactory.openFromFile(pathToSDEFile, int);

// Use IPropertySet.GetAllProperties() to return all the property values from a successful Enterprise workspace connection.
object oNames = null;
object oValues = null;
IPropertySet propertySet = IWorkspace.ConnectionProperties;
propertySet.GetAllProperties(oNames, oValues);

// Cast as array
string[] stringArray_oNames = (string[])oNames;
object[] objectArray_oValues = (object[])oValues;

// Print out the property set name : value pairs
for (int i = 0; i <= stringArray_oNames.Length - 1; i++)
{
    Debug.Write("Name of Property(" + i.ToString() + "): " + stringArray_oNames(i) + ", ");
    Debug.WriteLine("Value(" + i.ToString() + "): " + objectArray_oValues(i).ToString());
}

La salida del código anterior serían pares de nombre/valor similares a la salida de ejemplo siguiente:

Name of Property(0): SERVER, Value(0): myMachineName
Name of Property(1): INSTANCE, Value(1): sde:sqlserver:myMachineName\SQLEXPRESS
Name of Property(2): DBCLIENT, Value(2): sqlserver
Name of Property(3): DB_CONNECTION_PROPERTIES, Value(3): myMachineName\SQLEXPRESS
Name of Property(4): DATABASE, Value(4): myDatabase
Name of Property(5): IS_GEODATABASE, Value(5): true
Name of Property(6): AUTHENTICATION_MODE, Value(6): DBMS
Name of Property(7): USER, Value(7): myUserName
Name of Property(8): PASSWORD, Value(8): System.Byte[]
Name of Property(9): CONNPROP-REV, Value(9): Rev1.0
Name of Property(10): VERSION, Value(10): sde.DEFAULT

Ahora puede usar los valores de conjunto de propiedades anteriores para conectarse al área de trabajo de SDE mediante el código siguiente:

IWorkspace workspace = workspaceFactory.Open(propertySet, 0);
Note about Licensing:
If using ArcGIS Engine, make sure you have licensed your Engine app appropriately before making any ArcObjects API calls, or else an error will occur on the first ArcObjects API call. If using an ArcMap Add-in or custom COM component, make sure to license ArcMap appropriately.

Id. de artículo: 000031500

Recibir notificaciones y encontrar soluciones a problemas nuevos o comunes

Obtenga respuestas resumidas y soluciones de vídeo de nuestro nuevo chatbot de IA.

Descargar la aplicación de soporte de Esri

Información relacionada

Descubrir más sobre este tema

Obtener ayuda de expertos en ArcGIS

Contactar con el soporte técnico

Descargar la aplicación de soporte de Esri

Ir a opciones de descarga