SAP 数据提供程序疑难解答

本部分讨论使用故障排除技术来解决使用 .NET Framework Data Provider for mySAP Business Suite 时可能会遇到的操作错误。

使用适用于 SAP 的数据提供程序时出现未知参数错误

问题

适用于 SAP 的数据提供程序出现以下错误:

Microsoft.Data.SAPClient.SAPException: Failed to retrieve data from SAP server --- > Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException: Unknown Parameter OUT_ZDATATABLE.  

原因

SAP 系统中安装的自定义 RFC Z_EXTRACT_DATA_OO 不是最新的。 适用于 SAP 的数据提供程序使用自定义 RFC(Z_EXTRACT_DATA_OO)对 SAP 表执行 SELECT 操作。

解决方法

必须将自定义 RFC 更新到最新的可用版本。 此 RFC Z_EXTRACT_DATA_OO,可用于 adapterpacknoversion。 有关如何安装和卸载自定义 RFC 的详细信息,请参阅 安装适用于 SAP 的数据提供程序的自定义 RFC

从 SAP 表选择数据时出现内存不足异常

问题

从 SAP 系统选择数据时,适用于 SAP 的数据提供程序会引发内存不足异常。

原因

默认情况下,适用于 SAP 的数据提供程序一次检索 10,000 行。 此外,从 SAP 系统检索到的每一批行都存储在内存中。 因此,

  • 如果要从中检索数据的表包含大量行,或者

  • 如果表包含消耗大量内存的数据类型的列,

    SAP 数据提供程序的内存消耗显著增加,并可能导致内存不足异常。

    解决方法

    可以更改从 SAP 系统检索到的最大行数。 为此,可以使用 SELECT 语句指定“batchsize”选项。 例如:

SELECT * FROM <tablename> OPTION 'batchsize 1000'  

SAP 数据提供程序现在一次只检索 1000 行,因此不会消耗大量内存。

执行采用日期值参数的查询时出现异常

问题

使用 EXECQUERY 命令执行具有采用日期值的参数的查询时,会出现以下异常:

ErrorCode=RFC_SYS_EXCEPTION. ErrorGroup=RFC_ERROR_SYSTEM_FAILURE.   
SapErrorMessage=Enter date in the format __.__.____.  

原因

使用 EXECQUERY 命令执行查询时,必须始终以 YYYYMMDD 格式指定日期值。

解决方法

请确保以 YYYYMMDD 格式指定日期值。 例如:

EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @P1='20080606'  

使用 EXECQUERY 命令执行查询NO_VARIANT异常

问题

使用 EXECQUERY 命令执行查询时,会出现以下异常:

Exception: Details: ErrorCode=RFC_EXCEPTION. ErrorGroup=RFC_ERROR_APPLICATION_EXCEPTION. SapErrorMessage=NO_VARIANT.  
AdapterErrorMessage=Error returned by RfcCallReceiveEx while calling RFC: <RFC name>  

原因

此异常可能有两个可能的原因:

  1. 尝试执行的查询在 SAP 系统中定义了变体。 变体是指在执行 SAP 查询时可以指定的一组已保存的选择条件。 例如,可以使用变体指定查询的默认值。

  2. 您尝试执行的查询既没有定义变体,也没有要求传递参数值。

    解决方法

  3. 出于原因 1,请确保指定与查询关联的变体的名称。 例如:

    EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @variant =  ‘variant1’  
    
  4. 出于原因 2,请确保在指定查询命令时提供虚拟参数名称和值。 例如,如果“myquery”查询不需要执行任何参数,则必须将 EXECQUERY 命令指定为:

    EXECQUERY myquery @usergroup='mygroup',@P1 = 'dummy_value'  
    

另请参阅

排查 SAP 适配器问题