Пример #1
0
        /// <summary>
        /// Method to get the number of features in the datasource
        /// </summary>
        /// <returns>The number of features</returns>
        protected virtual int GetFeatureCountInternal()
        {
            using (var conn = CreateOpenDbConnection())
            {
                using (var command = conn.CreateCommand())
                {
                    var sql = new StringBuilder();
                    sql.AppendFormat("SELECT COUNT(*) FROM {0}", _dbUtility.DecorateEntity(Table));
#pragma warning disable 612,618
                    if (!String.IsNullOrEmpty(DefinitionQuery))
                    {
                        sql.AppendFormat(" WHERE {0}", DefinitionQuery);
                    }
#pragma warning restore 612,618
                    else
                    {
                        sql.Append(FeatureColumns.GetWhereClause());
                    }

                    sql.Append(";");

                    command.CommandText = sql.ToString();
                    return((int)command.ExecuteScalar());
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Function to get a specific feature from the database.
        /// </summary>
        /// <param name="oid">The object id</param>
        /// <returns>A feature data row</returns>
        protected virtual FeatureDataRow GetFeatureInternal(uint oid)
        {
            using (var cn = CreateOpenDbConnection())
            {
                using (var cmd = cn.CreateCommand())
                {
                    cmd.CommandText = FeatureColumns.GetSelectClause(From)
                                      + string.Format(" WHERE {0}={1};", _dbUtility.DecorateEntity(ObjectIdColumn), oid);

                    Logger.Debug(t => t("Executing query:\n{0}", PrintCommand(cmd)));
                    using (var dr = cmd.ExecuteReader())
                    {
                        if (dr.HasRows)
                        {
                            dr.Read();
                            var            fdt = CreateNewTable();
                            FeatureDataRow row = null;
                            fdt.BeginLoadData();
                            var numColumns = fdt.Columns.Count;
                            var data       = new object[numColumns + 1];
                            if (dr.GetValues(data) > 0)
                            {
                                var loadData = new object[numColumns];
                                Array.Copy(data, 0, loadData, 0, numColumns);
                                row          = (FeatureDataRow)fdt.LoadDataRow(loadData, true);
                                row.Geometry = GeometryFromWKB.Parse((byte[])data[numColumns], Factory);
                            }
                            fdt.EndLoadData();
                            return(row);
                        }
                    }
                }
            }
            return(null);
        }
Пример #3
0
        /// <summary>
        /// Gets the SQL ORDER BY clause.
        /// </summary>
        /// <returns>The order by</returns>
        public string GetOrderByClause()
        {
            var orderBy = string.Empty;

            foreach (var featureColumn in Items)
            {
                switch (featureColumn.OrderBy)
                {
                case null:
                    continue;

                case "ASC":
                    orderBy += string.Format(", {0}", _spatialDbUtility.DecorateEntity(featureColumn.As));
                    break;

                case "DESC":
                    orderBy += string.Format(", {0} DESC", _spatialDbUtility.DecorateEntity(featureColumn.As));
                    break;
                }
            }

            return(orderBy.Length > 0 ? orderBy.Substring(2) : null);
        }