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 系统中安装的Z_EXTRACT_DATA_OO RFC 不是最新的。 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'  

NO_VARIANT EXECQUERY 命令执行查询时出现异常

问题

使用 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 适配器疑难解答