Instrução

Obter todas as propriedades de um arquivo de conexão do banco de dados (SDE) do ArcGIS Enterprise utilizando ArcObjects

Last Published: February 5, 2024

Descrição

Em um aplicativo cliente ArcObjects ou ArcGIS Engine, podemos desejar conectar a uma área de trabalho de geodatabase multiusuário, como Oracle ou SQL Server, utilizando a interface IPropertySet. Um exemplo de código mostrando esse fluxo de trabalho é fornecido abaixo:

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);

Ao executar o código acima, pode-se receber uma exceção do tempo de execução, como a seguinte:

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

Causa

Essa exceção provavelmente é causada por um erro de digitação em uma das propriedades acima no conjunto de propriedades.

Solução ou Solução Provisória

Uma maneira de resolver esse problema é trabalhar ao contrário e usar o método IPropertySet.GetAllProperties para obter todas as propriedades de conexão SDE diretamente de um arquivo de conexão SDE.

Este arquivo de conexão SDE pode ser gerado conectando-se ao geodatabase multiusuário (SDE) a partir de um cliente de desktop, como ArcCatalog. O caminho do arquivo de conexão pode ser copiado da janela Propriedades do Banco de Dados da conexão SDE no ArcCatalog:

Clique com o botão direito na Conexão SDE na árvore do Catálogo e clique na guia Propriedades > Geral :

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

O método GetAllProperties é especialmente útil quando não temos certeza da sintaxe dos valores do conjunto de propriedades. É fácil cometer erros sintáticos ao escrevê-los, e seu código ArcObjects não será executado mesmo com o menor erro de digitação, por exemplo, dois pontos, barra invertida, ponto ou cifrão ausentes. O exemplo de código abaixo mostra como solicitar esse método e gerar os valores para o console de depuração do 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());
}

A saída do código acima seria pares de nome/valor semelhantes à saída de exemplo abaixo:

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

Agora você pode usar os valores do conjunto de propriedades acima para se conectar à sua área de trabalho SDE usando o código abaixo:

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 do Artigo: 000031500

Receba notificações e encontre soluções para problemas novos ou comuns

Obtenha respostas resumidas e soluções de vídeo do nosso novo chatbot de IA.

Baixe o Aplicativo de Suporte da Esri

Informações Relacionadas

Descubra mais sobre este tema

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com Suporte Técnico

Baixe o Aplicativo de Suporte da Esri

Ir para as opções de download