6 votos

¿Zoom al primer largometraje consultado utilizando ArcObjects?

Estoy tratando de consulta de una clase de entidad para todas las funciones que cumplen un determinado criterio (en este caso, el Status campo NULL). Sin embargo, yo no estoy muy lejos en el intento de método antes de ArcMap se bloquea completamente. No tengo idea razonable de cómo traza de errores que provocan la caída de un programa, para empezar, así que estoy más confundido de lo necesario, espero. Estoy construyendo esta en VS 2008 Express, por lo que vale.

 public void PerformAttributeQuery(ESRI.ArcGIS.Geodatabase.IFeatureClass fc)
    {
        ESRI.ArcGIS.Geodatabase.IQueryFilter queryFilter = new ESRI.ArcGIS.Geodatabase.QueryFilterClass();
        queryFilter.WhereClause = "[Status] IS NULL"; // create the where clause statement 

Todo está bien para que el primer par de declaraciones, pero esta consulta causa de un accidente:

        // query the table passed into the function and use a cursor to hold the results
        ESRI.ArcGIS.Geodatabase.IFeatureCursor featurecursor = fc.Search(queryFilter, false);

Se bloquea antes de llegar a la línea siguiente (pongo en la depuración de los cuadros de mensaje para las pruebas), pero voy a poner aquí por conveniencia:

        ESRI.ArcGIS.Geodatabase.IFeature feature = (ESRI.ArcGIS.Geodatabase.IFeature)featurecursor.NextFeature();
        ESRI.ArcGIS.ArcMapUI.IContentsView currentContentsView = ArcMap.Document.CurrentContentsView as IContentsView;
        ESRI.ArcGIS.Carto.IFeatureLayer featureLayer = (ESRI.ArcGIS.Carto.IFeatureLayer)currentContentsView.SelectedItem;
        ESRI.ArcGIS.Carto.IFeatureSelection fSelection = featureLayer as ESRI.ArcGIS.Carto.IFeatureSelection;
        fSelection.Add(feature);
        FindCommandAndExecute(ArcMap.Application as ESRI.ArcGIS.Framework.IApplication, "{AB073B49-DE5E-11D1-AA80-00C04FA37860}");
    }

Utilicé el PerformAttributeQuery fragmento de trabajar con FeatureClasses en lugar de las Tablas (o de lo que yo esperaba), si quieres una referencia adecuada. Mis preguntas son:

  1. Cómo puedo obtener una mejor presentación de informes de accidente de errores?
  2. ¿De dónde me salen mal? Respuesta: debo derrotados admitir que he utilizado el mal caracteres para indicar la ubicación de la tabla de la característica estaba consultando. El cambio de la [Status] mi queryFilter.WhereClause a \"Status\" literalmente resuelto todos los problemas obvios.

7voto

saint_groceon Puntos 2696

Ver código de abajo

Tenga en cuenta que mensajes de excepción a veces útil pueden ser embebidos dentro de un mensaje general bastante críptico, por lo que es importante examinar InnerExceptions.

protected override void OnClick()
{
    string path = @"C:\projects\NetTools\InfrastructureEditingTemplate\MapsandGeodatabase\LocalGovernment.gdb";
    try
    {
        var ws = Open(path);
        var fc = ((IFeatureWorkspace)ws).OpenFeatureClass("wMain");
        IFeature feat = QueryFirstFeature(fc);
        if (feat != null)
        {
            //todo: project if necessary
            ((IActiveView)ArcMap.Document.FocusMap).Extent = feat.Shape.Envelope;
            ((IActiveView)ArcMap.Document.FocusMap).Refresh();
        }
    }
    catch (Exception ex)
    {
        while (ex != null)
        {
            Debug.Print("{0} \n {1}", ex.Message, ex.StackTrace);
            ex = ex.InnerException;
        }
    }
}

private IFeature QueryFirstFeature(IFeatureClass fc)
{
    IFeature outFeat = null;
    IQueryFilter qf = new QueryFilterClass();
    qf.WhereClause = "LASTEDITOR = 'ESRI'";
    IFeatureCursor fCur = null;
    try
    {
        fCur = fc.Search(qf, false);
        outFeat = fCur.NextFeature();
    }
    catch (Exception ex)
    {
        var ex2 = new Exception("Exception when querying with " + qf.WhereClause, ex);
        throw ex2;
    }
    finally
    {
        if(fCur != null)
            Marshal.FinalReleaseComObject(fCur);
    }
    return outFeat;
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X