Пример #1
0
        async virtual public Task <IDatasetElement> Element(string title)
        {
            try
            {
                DataTable tab = new DataTable();
                using (DbConnection conn = this.ProviderFactory.CreateConnection())
                {
                    conn.ConnectionString = _connectionString;
                    await conn.OpenAsync();

                    DbDataAdapter adapter = this.ProviderFactory.CreateDataAdapter();
                    adapter.SelectCommand = this.ProviderFactory.CreateCommand();

                    if (title.Contains("."))
                    {
                        string schema = title.Split('.')[0];
                        string table  = title.Substring(schema.Length + 1);
                        adapter.SelectCommand.CommandText = "SELECT * FROM " + DbSchemaPrefix + OgcDictionary("geometry_columns") + " WHERE " + OgcDictionary("geometry_columns.f_table_name") + "='" + table + "' AND " + OgcDictionary("geometry_columns.f_table_schema") + "='" + schema + "'";
                    }
                    else
                    {
                        adapter.SelectCommand.CommandText = "SELECT * FROM " + DbSchemaPrefix + OgcDictionary("geometry_columns") + " WHERE " + OgcDictionary("geometry_columns.f_table_name") + "='" + title + "'";
                    }
                    adapter.SelectCommand.Connection = conn;

                    adapter.Fill(tab);
                    conn.Close();
                }
                if (tab.Rows.Count != 1)
                {
                    _errMsg = "Layer not found: " + title;
                    return(null);
                }

                return(new DatasetElement(await OgcSpatialFeatureclass.Create(this, tab.Rows[0])));
            }
            catch (Exception ex)
            {
                _errMsg = ex.Message;
                return(null);
            }
        }
Пример #2
0
        async virtual public Task <List <IDatasetElement> > Elements()
        {
            if (_layers == null || _layers.Count == 0)
            {
                List <IDatasetElement> layers = new List <IDatasetElement>();
                DataTable tab = new DataTable();
                try
                {
                    using (DbConnection conn = this.ProviderFactory.CreateConnection())
                    {
                        conn.ConnectionString = _connectionString;
                        conn.Open();

                        DbDataAdapter adapter = this.ProviderFactory.CreateDataAdapter();
                        adapter.SelectCommand             = this.ProviderFactory.CreateCommand();
                        adapter.SelectCommand.CommandText = "SELECT * FROM " + DbSchemaPrefix + OgcDictionary("geometry_columns");
                        adapter.SelectCommand.Connection  = conn;
                        adapter.Fill(tab);
                        conn.Close();
                    }
                }
                catch (Exception ex)
                {
                    _errMsg = ex.Message;
                    return(layers);
                }

                foreach (DataRow row in tab.Rows)
                {
                    IFeatureClass fc = await OgcSpatialFeatureclass.Create(this, row);

                    layers.Add(new DatasetElement(fc));
                }

                _layers = layers;
            }
            return(_layers);
        }