protected internal void RebuildSpatialIndex(IDbConnection conn, SqlServer2008SpatialIndexGridDensity level1, SqlServer2008SpatialIndexGridDensity level2, SqlServer2008SpatialIndexGridDensity level3, SqlServer2008SpatialIndexGridDensity level4) { Func <SqlServer2008SpatialIndexGridDensity, string> dlgtName = delegate(SqlServer2008SpatialIndexGridDensity o) { switch (o) { case SqlServer2008SpatialIndexGridDensity.Low: return("LOW"); case SqlServer2008SpatialIndexGridDensity.Medium: return("MEDIUM"); default: return("HIGH"); } }; IExtents2D ext = GetExtents() as IExtents2D; StringBuilder sb = new StringBuilder(); string ndxName = string.Format("[sidx_{0}_{1}]", Table, GeometryColumn); sb.AppendFormat( @"IF EXISTS(SELECT * FROM sys.indexes where name='{0}' and object_id = object_id('{1}')) BEGIN DROP INDEX {0} ON {1} END ", ndxName, QualifiedTableName); sb.AppendFormat(CultureInfo.InvariantCulture, @"CREATE SPATIAL INDEX {0} ON {2}({1}) USING GEOMETRY_GRID WITH ( BOUNDING_BOX = ( xmin={3}, ymin={4}, xmax={5}, ymax={6} ), GRIDS = ({7}, {8}, {9}, {10})); ", ndxName, GeometryColumn, QualifiedTableName, ext.Min[Ordinates.X], ext.Min[Ordinates.Y], ext.Max[Ordinates.X], ext.Max[Ordinates.Y], dlgtName(level1), dlgtName(level2), dlgtName(level3), dlgtName(level4)); using (IDbCommand cmd = conn.CreateCommand()) { cmd.CommandText = sb.ToString(); cmd.CommandType = CommandType.Text; cmd.ExecuteNonQuery(); } }
public void RebuildSpatialIndex(SqlServer2008SpatialIndexGridDensity level1, SqlServer2008SpatialIndexGridDensity level2, SqlServer2008SpatialIndexGridDensity level3, SqlServer2008SpatialIndexGridDensity level4) { using (IDbConnection conn = DbUtility.CreateConnection(ConnectionString)) { conn.Open(); RebuildSpatialIndex(conn, level1, level2, level3, level4); } }