針對 Data Provider for SAP 的問題進行疑難排解
本節討論如何使用疑難排解技術來解決您在使用 mySAP Business Suite .NET Framework Data Provider 時可能會遇到的操作錯誤。
使用 Data Provider for SAP 的未知參數錯誤
問題
Data Provider for 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 系統擷取的每個資料列批次都會儲存在記憶體中。 所以,
如果要從中擷取資料的資料表包含大量資料列,或
如果資料表包含耗用大量記憶體之資料類型的資料行,
Data Provider for 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 系統中定義了變體。 Variant 是指在執行 SAP 查詢時可以指定的一組已儲存選取準則。 例如,您可以使用變體來指定查詢的預設值。
您嘗試執行的查詢未定義變體,也不會預期會傳遞參數值。
解決方法
基於原因 1,請確定您指定與查詢相關聯的變體名稱。 例如:
EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024', @variant = ‘variant1’
基於原因 2,請確定您在指定查詢命令時提供虛擬參數名稱和值。 例如,如果 「myquery」 查詢不需要執行任何參數,則必須將 EXECQUERY 命令指定為:
EXECQUERY myquery @usergroup='mygroup',@P1 = 'dummy_value'