4 votos

¿Cómo puedo conectarme a un Geodatabase de esquema de usuario de Oracle utilizando ArcObjects?

He configurado un esquema de usuario de geodatabase de Oracle y he cargado algunos datos en él. Ahora quiero conectarme a él programáticamente usando ArcObjects, el problema es que no veo cómo. ¿Dónde puedo establecer el nombre del esquema recién creado en mi conjunto de propiedades de conexión, o cómo puedo cambiar el valor del esquema después de haberme conectado? En ArcCatalog se hace en la ventana de propiedades de conexión de la geodatabase: introducir descripción de la imagen aquí

El código a continuación funciona bien conectándose al esquema SDE predeterminado. ¿Qué debo cambiar para conectarme a una geodatabase de usuario? He intentado examinar IDatabaseConnectionInfo2 y IWorkspaceProperties pero no veo dónde puedo establecer o cambiar el esquema al que estoy conectado.

public static IWorkspace ConnectToTransactionalVersion(String dbclient, String dbConnProp, String user, String password, String database, String version, String authentication)
    {
        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);
        return workspaceFactory.Open(propertySet, 0);
    }

Intenté agregar "SCHEMA" como propiedad en propertySet y se ignoró, también intenté configurar la propiedad de la versión en la nueva versión predeterminada del esquema de usuario pero da un error de "versión no encontrada".

2voto

AngryHacker Puntos 610

¡Hola, este código me está funcionando bajo Java:

 IPropertySet propertySet = new PropertySet();
 propertySet.setProperty("SERVER", "myserver");
 propertySet.setProperty("INSTANCE", "5151:ASSESSOR");
 propertySet.setProperty("DATABASE", "");
 propertySet.setProperty("USER", "myusername");
 propertySet.setProperty("PASSWORD", "mypassword");
 propertySet.setProperty("VERSION", "ASSESSOR.DEFAULT");
 IWorkspaceFactory workspaceFactory = new SdeWorkspaceFactory();
 return (Workspace) workspaceFactory.open(propertySet, 0);

Lo especial aquí es la INSTANCE y la VERSION que contienen información relacionada al usuario-esquema, en tu caso assessor.

NUEVA ACTUALIZACIÓN: Aquí tienes el código para una conexión directa a una geodatabase de esquema de usuario:

  PropertySet propertySet = new PropertySet();
  propertySet.setProperty("INSTANCE", "sde:oracle:XE:DGP_OWNER");
  propertySet.setProperty("USER", "dgp_owner");
  propertySet.setProperty("PASSWORD", "xxxxxxx");
  propertySet.setProperty("VERSION", "DGP_OWNER.DEFAULT");
  workspace = workspaceFactory.open(propertySet, 0);

Este código se conectará a la geodatabase de esquema de usuario DGP_OWNER en la base de datos Oracle llamada XE.

2voto

Goodies Puntos 753

Cree un archivo de conexión (archivo sde) con ArcCatalog.

Solución 1: Use este archivo de conexión como en mi ejemplo (primeras 7 líneas). Creo que esto no es tan bueno, ya que también tienes que distribuir el archivo sde.

Solución 2: Tal vez puedas hacer algún tipo de 'ingeniería inversa'. En el ejemplo a continuación (todas las líneas) podrías establecer la conexión a tu espacio de trabajo mediante el archivo sde y leer las propiedades de este archivo. Espero que encuentres el parámetro faltante.

IWorkspaceFactory wsFactory = null;
IFeatureWorkspace featWs = null;
object names = null;
object values = null;
try
{
    wsFactory = new SdeWorkspaceFactoryClass();
    featWs = (IFeatureWorkspace)wsFactory.OpenFromFile(@"D:\Test.sde", 0);

    IWorkspace ws = featWs as IWorkspace;
    if (ws != null)
    {
        IPropertySet props = ws.ConnectionProperties;
        props.GetAllProperties(out names, out values);
    }
}
catch (Exception ex)
{
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X