AE “每使用者訂閱上的所有人SID 不存在”
今天執行以前engine寫的屬性查詢的例子,執行到pFeatCursor = pFeatCls.Search(pQueryFilter, true);出現如下錯誤提示:
未處理 System.Runtime.InteropServices.COMException
Message="每使用者訂閱上的所有人 SID 不存在 (異常來自 HRESULT:0x80040207)"
Source="ESRI.ArcGIS.Geodatabase"
ErrorCode=-2147220985
貌似是升級到v9.3才有的錯誤,檢查發現是QueryFilter.WhereClause語句在查詢shapefile格式的圖層出現了問題,試驗在查詢gdb格式的圖層不會報錯。開啟ArcGIS比較了兩種格式的屬性查詢存在以下的區別:
1.shapefile的欄位名用雙引號如:"fieldName"而GDB的採用[fieldName]格式;
2.shapefile的模糊查詢用like '%A%' 而GDB用like '*A*' ;
3.shapefile的非字元欄位不支援模糊查詢而GDB格式的支援;不過我記得9.2的時候好像支援^_^。
所以在查詢前必須判斷一下圖層的資料來源型別:
if (pDateset.Workspace.Type == esriWorkspaceType.esriFileSystemWorkspace)
{
pQueryFilter.WhereClause = "\"" + fldName + "\"" + " like '%" + this.txt_findObject.Text.Trim() + "%'"; //shpfile
}
else
{
pQueryFilter.WhereClause = "[" + fldName + "]" + " like '*" + this.txt_findObject.Text.Trim() + "*'"; //gdb
}