コード例 #1
0
        private static List <Table> GetDistinctTables(XmlWorkListWorkspace workspace, Geodatabase geodatabase)
        {
            var distinctTables = new Dictionary <GdbTableIdentity, Table>();

            foreach (XmlTableReference tableReference in workspace.Tables)
            {
                var table = geodatabase.OpenDataset <Table>(tableReference.Name);
                var id    = new GdbTableIdentity(table);
                if (!distinctTables.ContainsKey(id))
                {
                    distinctTables.Add(id, table);
                }
            }

            return(distinctTables.Values.ToList());
        }
コード例 #2
0
        private static Geodatabase GetGeodatabase([NotNull] XmlWorkListWorkspace workspace)
        {
            Assert.ArgumentNotNull(workspace, nameof(workspace));

            // DBCLIENT = oracle
            // AUTHENTICATION_MODE = DBMS
            // PROJECT_INSTANCE = sde
            // ENCRYPTED_PASSWORD = 00022e684d4b4235766e4b6e324833335277647064696e734e586f584269575652504534653763387763674876504d3d2a00
            // SERVER = topgist
            // INSTANCE = sde:oracle11g: topgist
            // VERSION = SDE.DEFAULT
            // DB_CONNECTION_PROPERTIES = topgist
            // USER = topgis_tlm

            try
            {
                Assert.True(
                    Enum.TryParse(workspace.WorkspaceFactory, ignoreCase: true, out WorkspaceFactory factory),
                    $"Cannot parse {nameof(WorkspaceFactory)} from string {workspace.WorkspaceFactory}");

                switch (factory)
                {
                case WorkspaceFactory.FileGDB:
                    return(new Geodatabase(
                               new FileGeodatabaseConnectionPath(
                                   new Uri(workspace.ConnectionString, UriKind.Absolute))));

                case WorkspaceFactory.SDE:
                    var builder = new ConnectionStringBuilder(workspace.ConnectionString);

                    Assert.True(
                        Enum.TryParse(builder["dbclient"], ignoreCase: true,
                                      out EnterpriseDatabaseType databaseType),
                        $"Cannot parse {nameof(EnterpriseDatabaseType)} from connection string {workspace.ConnectionString}");

                    Assert.True(
                        Enum.TryParse(builder["authentication_mode"], ignoreCase: true,
                                      out AuthenticationMode authMode),
                        $"Cannot parse {nameof(AuthenticationMode)} from connection string {workspace.ConnectionString}");

                    var connectionProperties =
                        new DatabaseConnectionProperties(databaseType)
                    {
                        AuthenticationMode = authMode,
                        ProjectInstance    = builder["project_instance"],
                        Database           = builder["server"],                               // is always null in CIMFeatureDatasetDataConnection
                        Instance           = builder["instance"],
                        Version            = builder["version"],
                        Branch             = builder["branch"] // ?
                                                               //Password = builder["encrypted_password"],
                                                               //User = builder["user"]
                    };


                    return(new Geodatabase(connectionProperties));

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            catch (Exception e)
            {
                _msg.Debug($"Cannot open geodatabase from connection string {workspace.ConnectionString}", e);
                return(null);
            }
        }