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>
原因
此异常可能有两个可能的原因:
尝试执行的查询在 SAP 系统中定义了变体。 变体是指在执行 SAP 查询时可以指定的一组已保存的选择条件。 例如,可以使用变体指定查询的默认值。
您尝试执行的查询既没有定义变体,也没有要求传递参数值。
解决方法
出于原因 1,请确保指定与查询关联的变体的名称。 例如:
EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @variant = ‘variant1’
出于原因 2,请确保在指定查询命令时提供虚拟参数名称和值。 例如,如果“myquery”查询不需要执行任何参数,则必须将 EXECQUERY 命令指定为:
EXECQUERY myquery @usergroup='mygroup',@P1 = 'dummy_value'