HOW TO
In einer ArcObjects- oder ArcGIS Engine-Client-Anwendung kann über die IPropertySet-Schnittstelle eine Verbindung mit einem Mehrbenutzer-Geodatabase-Workspace hergestellt werden, z. B. Oracle oder SQL Server. Unten sehen Sie ein Codebeispiel, das diesen Workflow veranschaulicht:
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);
Beim Ausführen des obigen Codes erhalten Sie möglicherweise eine Runtime-Ausnahme wie die folgende:
Error: System.Runtime.InteropSerives.COMException: "Underlying DBMS error[ORA-12545: Connect failed because target host or object does not exist. No extended error.]
Diese Ausnahme wird höchstwahrscheinlich durch einen Tippfehler in einer der oben genannten Eigenschaften im Eigenschaftensatz verursacht.
Eine Möglichkeit, dieses Problem zu beheben, besteht darin, umgekehrt zu arbeiten und die IPropertySet.GetAllProperties-Methode zu verwenden, um alle SDE-Verbindungseigenschaften direkt aus einer SDE-Verbindungsdatei abzurufen.
Diese SDE-Verbindungsdatei kann generiert werden, indem über einen Desktop-Client, z. B. ArcCatalog, eine Verbindung mit der Mehrbenutzer-Geodatabase (SDE) hergestellt wird. Der Pfad der Verbindungsdatei kann aus dem Fenster "Datenbankeigenschaften" der SDE-Verbindung in ArcCatalog kopiert werden:
Klicken Sie mit der rechten Maustaste auf die SDE-Verbindung im Kataloginhaltsverzeichnis, und klicken Sie auf die Registerkarte Eigenschaften > Allgemein:
Name: C:\Users\myUserName\AppData\Roaming\ESRI\Desktop10.8\ArcCatalog\mySDEConnectionFile.sde
Die GetAllProperties-Methode ist besonders nützlich, wenn Sie sich im Hinblick auf die Syntax der Eigenschaftensatzwerte nicht sicher sind. Beim Schreiben kann es leicht zu syntaktischen Fehlern kommen, und der ArcObjects-Code kann selbst beim kleinsten Tippfehler nicht ausgeführt werden, z. B. wenn ein Doppelpunkt, ein umgekehrter Schrägstrich, ein Punkt oder ein Dollarzeichen fehlt. Das folgende Codebeispiel zeigt, wie Sie diese Methode aufrufen und die Werte in der Visual Studio-Debugkonsole ausgeben:
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()); }
Die Ausgabe des obigen Codes sind Name/Wert-Paare, die der folgenden Beispielausgabe ähneln:
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
Sie können jetzt die obigen Eigenschaftensatzwerte verwenden, um mithilfe des folgenden Codes eine Verbindung mit Ihrem SDE-Workspace herzustellen:
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.
Artikel-ID: 000031500
Unterstützung durch ArcGIS-Experten anfordern
Esri Support App herunterladen