如何解决 SAP 数据提供程序的问题

本部分讨论如何解决使用适用于 mySAP Business Suite 的 .NET Framework 数据提供程序时可能会遇到的操作错误,并介绍使用故障排除技术的方法。

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 可通过适配器 packnoversion 获取。 有关如何安装和卸载自定义 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 命令执行查询时,必须始终以 YYYYYMMDD 格式指定日期值。

解决方案

请确保以 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 适配器疑难解答