为什么在查询包含null的值的odata服务时会出现异常?

时间:2012-04-19 11:38:30

标签: oracle wcf-data-services odata

我有一个在Oracle数据库之上运行的OData服务。我可以这样查询:

http://localhost:4930/Oracle.svc/XXKE_L2E_ADDRESSES_V%28%29?
$filter=PARTY_ID eq 10925&$select=*

然后一切正常。

对于以下内容,一切正常(没有字段包含空值):

http://localhost:4930/Oracle.svc/XXKE_L2E_ADDRESSES_V%28%29?
$filter=PARTY_ID eq 10925&
$select=ADDRESS_ID,PARTY_ID,CITY,ADDRESS1,PARTY_NAME

但是以下失败(ADDRESS2是一个包含null的字段):

http://localhost:4930/Oracle.svc/XXKE_L2E_ADDRESSES_V%28%29?
$filter=PARTY_ID eq 10925&
$select=ADDRESS_ID,PARTY_ID,CITY,ADDRESS1,PARTY_NAME,ADDRESS2

我得到的回应是:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code></code>
  <message xml:lang="pl-PL">An error occurred while processing this request.</message>
  <innererror>
    <message>Value cannot be null.&#xD;
Parameter name: value</message>
    <type>System.ArgumentNullException</type>
    <stacktrace>   at System.Data.Services.WebUtil.CheckArgumentNull[T](T value, String parameterName)&#xD;
   at System.Data.Services.Internal.ProjectedWrapper.set_PropertyNameList(String value)&#xD;
   at lambda_method(Closure , Shaper )&#xD;
   at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)&#xD;
   at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()&#xD;
   at System.Data.Services.Internal.ProjectedWrapper.EnumeratorWrapper.MoveNext()&#xD;
   at System.Data.Services.DataService`1.SerializeResponseBody(RequestDescription description, IDataService dataService)&#xD;
   at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)&#xD;
   at System.Data.Services.DataService`1.HandleRequest()</stacktrace>
  </innererror>
</error>

为什么会出错? null有什么问题?当我指定$select=*时,我没有遇到任何问题。如何克服这个问题?

修改

我发现我面临的问题与此处描述的完全相同:https://forums.oracle.com/forums/thread.jspa?threadID=2362250。我删除了字段,因此只有8个,然后我可以选择所有字段。如果我有9个字段,我一次只能选择6个字段。如果我有10个字段,我一次只能选择3个字段。

如果有人有解决方案,我会很感激。

1 个答案:

答案 0 :(得分:0)

来自Oracle的消息:

“MS已经确定了他们可以解决这个问题的几个潜在修复。甲骨文已经提供了反馈。我们正在等待MS是否同意以及他们计划在哪个版本或修补程序中包含修复程序。”< / p>

所以目前尚无解决方案,但我使用的解决方法是选择所有字段('*'),然后从代码中选择我感兴趣的字段。至少它有效:)