CÓMO
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.]
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.
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
Obtener ayuda de expertos en ArcGIS
Descargar la aplicación de soporte de Esri