示例#1
0
        /// <summary>
        /// Queries the data t
        /// </summary>
        /// <returns></returns>
        private PostGisSpatialObjectType GetSpatialObjectType()
        {
            var sql = string.Format("SELECT \"udt_name\" from \"information_schema\".\"columns\" " +
                                    "WHERE \"table_schema\"='{0}' AND \"table_name\"='{1}' AND \"column_name\"='{2}';",
                                    _schema, _table, _geometryColumn);

            using (var conn = new NpgsqlConnection(ConnectionString))
            {
                conn.Open();
                using (var rdr = new NpgsqlCommand(sql, conn).ExecuteReader())
                {
                    if (rdr.HasRows)
                    {
                        rdr.Read();
                        switch (rdr.GetString(0))
                        {
                            case "geometry":
                                return PostGisSpatialObjectType.Geometry;
                            case "geography":
                                _geometryCast = "::geometry";
                                return PostGisSpatialObjectType.Geography;
                            default:
                                throw new ArgumentException(
                                    "Provided geometry/geography column name does not yield geometry/geography data");
                        }
                    }
                }
                throw new NotSupportedException("Could not find geometry column within tables, need to check view definition");
            }
        }
示例#2
0
        /// <summary>
        /// Get the non-spatial columns
        /// </summary>
        private void GetNonSpatialColumns()
        {
            if (!string.IsNullOrEmpty(_columns))
                return;

            if (string.IsNullOrEmpty(ConnectionID))
                return;

            using (var conn = new NpgsqlConnection(ConnectionString))
            {
                conn.Open();
                using (var dr = new NpgsqlCommand(string.Format(
                    "SELECT \"column_name\" FROM \"information_schema\".\"columns\" "+
                    "WHERE \"table_schema\"='{0}' AND \"table_name\"='{1}';", Schema, Table), conn).ExecuteReader())
                {
                    if (!dr.HasRows)
                        throw new InvalidOperationException("Provider configuration incomplete or wrong!");

                    var columns = new List<string>{ "\"" + ObjectIdColumn + "\"" };
                    while (dr.Read())
                    {
                        var column = dr.GetString(0);
                        if (string.Equals(column, ObjectIdColumn)) continue;
                        if (string.Equals(column, GeometryColumn)) continue;
                        columns.Add(string.Format("\"{0}\"", column));
                    }

                    _columns = string.Join(", ", columns);
                }
            }
        }