Instruçã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.]
Essa exceção provavelmente é causada por um erro de digitação em uma das propriedades acima no conjunto de propriedades.
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
Obtenha ajuda de especialistas do ArcGIS
Baixe o Aplicativo de Suporte da Esri