初学者想在arcgine中想设置按属性查询功能,按书上一段代码执行获取图层属性字段对应的值,运行中断出错不懂为啥子?

 
2.JPG

// 5.获取唯一值按钮的单击事件
         private void btnOnlyAttributeValue_Click(object sender, EventArgs e)
         {
                //将图层的某个字段进行唯一值获取操作,并将所有的唯一值显示在listBox2控件中
             
                 //使用FeatureClass对象的IDataset接口来获取dataset和workspace的信息
                 IDataset dataset = (IDataset)currentFeatureLayer.FeatureClass;
                 //使用IQueryDef接口的对象来定义和查询属性信息。通过IWorkspace接口的CreateQueryDef()方法创建该对象。
                 IQueryDef queryDef = ((IFeatureWorkspace)dataset.Workspace).CreateQueryDef();
                 //设置所需查询的表格名称为dataset的名称
                 queryDef.Tables = dataset.Name;
                 //设置查询的字段名称。可以联合使用SQL语言的关键字,如查询唯一值可以使用DISTINCT关键字。
                 queryDef.SubFields = "DISTINCT (" +currentFileName  + ")";
                 //执行查询并返回ICursor接口的对象来访问整个结果的集合
                 ICursor cursor = queryDef.Evaluate();
                 //使用IField接口获取当前所需要使用的字段的信息
                 IFields fields = currentFeatureLayer.FeatureClass.Fields;
                 IField field = fields.get_Field(fields.FindField(currentFileName));
 
                 //对整个结果集合进行遍历,从而添加所有的唯一值
                 //使用IRow接口来操作结果集合。首先定位到第一个查询结果。
                 IRow row = cursor.NextRow();
                 //如果查询结果非空,则一直进行添加操作
                while (row != null)
                 {
                    //对String类型的字段,唯一值的前后添加'和',以符合SQL语句的要求
                     if (field.Type == esriFieldType.esriFieldTypeString)
                     {
                        listBox2.Items.Add("\'" + row.get_Value(0).ToString() + "\'");
                     }
                     else
                     {
                         listBox2.Items.Add(row.get_Value(0).ToString());
                     }
                     //继续执行下一个结果的添加
                     row = cursor.NextRow();
                 }                         
         }
已邀请:

朱新颖

赞同来自:

1,在哪句代码处报错?
2,一般单表查询使用IQueryFilter即可,IQueryDef常用来进行多表查询

要回复问题请先登录注册