m0_54673574 2024-05-23 10:39 采纳率: 66.7%
浏览 28
已结题

C#做ArcGis插件开发报错用户订阅上的所有者 SID 不存在

使用C#做ArcGis插件开发,代码如下

// 查询过滤
IQueryFilter queryFilter = new QueryFilterClass
{
        //查询area 小于1.0的
        WhereClause= "area< 1.0"
};
IFeatureCursor fCursor = shpFeatureClass.Search(queryFilter, false);

最后一行代码报错每用户订阅上的所有者 SID 不存在 (Exception from HRESULT: 0x80040207),经检查,shpFeatureClass不为空且有符合条件的数值,但area是以string类型存储的,如何在WhereClause中做数据类型转化,或者有其他办法

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-23 10:39
    关注

    引自免费微信小程序:皆我百晓生

    看起来这个错误是由于你在执行SQL查询时,试图比较一个字符串类型的字段(area)与数字(1.0),这在SQL语法中是不允许的,因为不同数据类型之间不能直接进行比较。为了解决这个问题,你需要将比较值转换为与area字段相同的数据类型。在这个例子中,我们需要把数字1.0转换成字符串。

    修改后的代码如下所示:

    // 查询过滤
    IQueryFilter queryFilter = new QueryFilterClass();
    string whereClause = $"area < '{1.0.ToString()}'";
    queryFilter.WhereClause = whereClause;
    
    IFeatureCursor fCursor = shpFeatureClass.Search(queryFilter, false);
    

    这里的关键在于使用了ToString()方法将数字1.0转换为字符串,并在字符串比较时添加了单引号。这样,SQL语句会正确地处理字符串类型的area字段和转换后的字符串值。现在你应该可以成功运行这个查询了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月31日
  • 已采纳回答 5月23日
  • 创建了问题 5月23日