2017-03-24 107 views
0

我有一個不斷拋出錯誤的CAML查詢。CAML查詢...它有什麼問題?

System.Web.Services.dll中發生第一次機會異常'System.Web.Services.Protocols.SoapException' 線程0x1574已退出,代碼爲0(0x0)。

是的,所以不是很具描述性。我猜測這與我如何使用「Or」元素有關。

這裏是我的查詢看起來是這樣的:

<Where> 
<And> 
    <IsNotNull> 
    <FieldRef Name='myRefID' /> 
    </IsNotNull> 
    <And> 
    <Or> 
     <In> 
     <FieldRef Name='myRefID' /> 
     <Values> 
      <Value Type='Number'>1</Value> 
     <Value Type='Number'>2</Value> 
     <Value Type='Number'>3</Value> 
     <Value Type='Number'>4</Value> 
     ... 
     <Value Type='Number'>499</Value> 
     </Values> 
     </In> 
     <In> 
    <FieldRef Name='myRefID' /> 
    <Values> 
      <Value Type='Number'>500</Value> 
     <Value Type='Number'>501</Value> 
     <Value Type='Number'>502</Value> 
     <Value Type='Number'>503</Value> 
     ... 
     <Value Type='Number'>999</Value> 
    </Values> 
     </In> 
     <In> 
     <FieldRef Name='myRefID' /> 
     <Values> 
       <Value Type='Number'>1000</Value> 
      <Value Type='Number'>1001</Value> 
      <Value Type='Number'>1002</Value> 
      <Value Type='Number'>1003</Value> 
      ... 
      <Value Type='Number'>1111</Value> 
     </Values> 
     </In> 
    </Or> 
    </And> 
</And> 
</Where> 

另外需要注意的是,我需要尋找特定的ID,因此這就是爲什麼我使用這麼多的IN子句。這些ID僅用於說明目的。在我的真實案例中,數字不合適。所以我不能使用在開始和結束號碼之間搜索的查詢。

回答

0

您有語義錯誤。只是刪除此包裝元素:

<Where> 
    <And> 
    <IsNotNull> 
     <FieldRef Name='myRefID' /> 
    </IsNotNull> 
    <And> <<================================ remove it 
     <Or> 
     <In> 
      <FieldRef Name='myRefID' /> 
      <Values> 
      <Value Type='Number'>1</Value> 
      <Value Type='Number'>2</Value> 

爲了簡化CAML查詢創建,使用的工具:

  1. Caml Designer - 最好的,在我看來
  2. MSDN officially recommended tools
1

你可以試試這個查詢,你不需要運算符「和」和「或」,記住CAML中的運算符只能處理2個元素。

<Where> 
    <And> 
     <IsNotNull> 
      <FieldRef Name='myRefID' /> 
     </IsNotNull> 
     <In> 
      <FieldRef Name='myRefID' /> 
      <Values> 
       <Value Type='Number'>1</Value> 
       <Value Type='Number'>2</Value> 
       <Value Type='Number'>3</Value> 
       <Value Type='Number'>4</Value> 
       <Value Type='Number'>499</Value> 
      </Values> 
     </In> 
    </And> 
</Where>