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