christian@0: /* christian@0: * Postarc christian@0: * christian@0: * Author: christian@0: * Christian Lins christian@0: * christian@0: * Copyright: christian@0: * Copyright (C) 2012 Intevation GmbH christian@0: * christian@0: * This program is free software: you can redistribute it and/or modify christian@0: * it under the terms of the GNU Lesser General Public License as published by christian@0: * the Free Software Foundation, either version 3 of the License, or christian@0: * (at your option) any later version. christian@0: * christian@0: * This program is distributed in the hope that it will be useful, christian@0: * but WITHOUT ANY WARRANTY; without even the implied warranty of christian@0: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the christian@0: * GNU General Public License for more details. christian@0: * christian@0: * You should have received a copy of the GNU Lesser General Public License christian@0: * along with this program. If not, see . christian@0: */ christian@0: christian@0: using System; christian@0: using System.Collections.Generic; christian@0: using System.Linq; christian@0: using System.Text; christian@0: using System.Runtime.Serialization; christian@0: using Npgsql; christian@0: christian@0: namespace Postarc christian@0: { christian@0: [Serializable] christian@0: public class PostGISConnection christian@0: { christian@0: private string name = ""; christian@0: private string host; christian@0: private int port = 5432; christian@0: private string user; christian@0: private string password; christian@0: private string database; christian@0: christian@0: public string Name christian@0: { christian@0: get christian@0: { christian@0: return this.name; christian@0: } christian@0: set christian@0: { christian@0: this.name = value; christian@0: } christian@0: } christian@0: christian@0: public string Host christian@0: { christian@0: get christian@0: { christian@0: return this.host; christian@0: } christian@0: set christian@0: { christian@0: this.host = value; christian@0: } christian@0: } christian@0: christian@0: public int Port christian@0: { christian@0: get christian@0: { christian@0: return this.port; christian@0: } christian@0: set christian@0: { christian@0: this.port = value; christian@0: } christian@0: } christian@0: christian@0: public string User christian@0: { christian@0: get christian@0: { christian@0: return this.user; christian@0: } christian@0: set christian@0: { christian@0: this.user = value; christian@0: } christian@0: } christian@0: christian@0: public string Password christian@0: { christian@0: get christian@0: { christian@0: return this.password; christian@0: } christian@0: set christian@0: { christian@0: this.password = value; christian@0: } christian@0: } christian@0: christian@0: public string Database christian@0: { christian@0: get christian@0: { christian@0: return "postgis"; // this.database; christian@0: } christian@0: set christian@0: { christian@0: this.database = value; christian@0: } christian@0: } christian@0: christian@0: public PostGISConnection() christian@0: { christian@0: } christian@0: christian@0: public string CreateConnectionString() christian@0: { christian@0: StringBuilder cs = new StringBuilder(); christian@0: cs.Append("Server="); cs.Append(host); christian@0: cs.Append(";Port="); cs.Append(port); christian@0: cs.Append(";User Id="); cs.Append(user); christian@0: cs.Append(";Password="); cs.Append(password); christian@0: cs.Append(";Database="); cs.Append(database); christian@0: cs.Append(";"); christian@0: return cs.ToString(); christian@0: } christian@0: christian@0: /// christian@0: /// Creates and opens an NpgsqlConnection to the PostGIS database christian@0: /// described by this PostGISConnection instance. christian@0: /// christian@0: /// christian@0: public NpgsqlConnection Open() christian@0: { christian@0: NpgsqlConnection conn = new NpgsqlConnection(CreateConnectionString()); christian@0: conn.ChangeDatabase(this.Database); christian@0: return conn; christian@0: } christian@0: christian@0: /// christian@0: /// Queries the table names from the information_schema.tables table christian@0: /// of the PostgreSQL system. christian@0: /// christian@0: /// christian@0: public List QueryTables() christian@0: { christian@0: List tables = new List(); christian@0: christian@0: NpgsqlConnection conn = Open(); christian@0: NpgsqlCommand cmd = new NpgsqlCommand( christian@0: "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';", christian@0: conn); christian@0: NpgsqlDataReader reader = cmd.ExecuteReader(); christian@0: while (reader.Read()) christian@0: { christian@0: string str = reader.GetString(0); christian@0: if (!str.Equals("spatial_ref_sys") && christian@0: !str.Equals("geography_columns") && christian@0: !str.Equals("geometry_columns") && christian@0: !str.Equals("raster_columns") && christian@0: !str.Equals("raster_overviews")) christian@0: { christian@0: tables.Add(str); christian@0: } christian@0: } christian@0: christian@0: conn.Close(); christian@0: return tables; christian@0: } christian@0: christian@0: public override string ToString() christian@0: { christian@0: return Name; christian@0: } christian@0: } christian@0: }