HOW TO

Abrufen aller Eigenschaften aus einer ArcGIS Enterprise-Datenbankverbindungsdatei (SDE) mithilfe von ArcObjects

Last Published: February 5, 2024

Beschreibung

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.]

Ursache

Diese Ausnahme wird höchstwahrscheinlich durch einen Tippfehler in einer der oben genannten Eigenschaften im Eigenschaftensatz verursacht.

Lösung oder Problemumgehung

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

Benachrichtigungen erhalten und Lösungen für neue oder häufige Probleme finden

Unser neuer KI-Chatbot stellt zusammengefasste Antworten und Videolösungen für Sie bereit.

Esri Support App herunterladen

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden

Unterstützung durch ArcGIS-Experten anfordern

An den technischen Support wenden

Esri Support App herunterladen

Zu Download-Optionen wechseln