DataProviderSAP. 安裝:
執行安裝檔案進行安裝DataProviderSAP.msi,預設安裝路徑:C:\Program Files\Common Files\Microsoft Shared\Adapters\ SAP\。
2
.Microsoft Visual Studio 2005
建立項目:添加引用Microsoft.Adapter.SAP.SAPProvider.dll。Microsoft.Adapter.SAP.SAPProvider.dll從以下安裝路徑尋找:C:\Program Files\Common Files\Microsoft Shared\Adapters\ SAP\。
3
.C#
調用FRC
語句:using Microsoft.Adapter.SAP;//添加引用SAPConnection con = new SAPConnection("ASHOST=10.1.10.102; CLIENT=200;SYSNR=00;USER=***;PASSWD=***;LANG=zh");//SAP伺服器串連參數設定, con.Open(); SAPCommand cmd = new SAPCommand(con); cmd.CommandText = "EXEC BAPI_CUSTOMER_GETLIST @IDRANGE=@param OUTPUT";//執行遠程RFC BAPI_CUSTOMER_GETLIST,執行RFC的參數傳遞過程參考下邊的EXEC 語句的文法//以下為RFC調用參數賦值並指定Input、Output類型 SAPParameter param = new SAPParameter("@param", ParameterDirection.InputOutput); DataTable dt = new DataTable(); dt.Columns.Add("SIGN"); dt.Columns.Add("OPTION"); dt.Columns.Add("LOW"); dt.Columns.Add("HIGH"); DataRow row = dt.NewRow(); row["LOW"] = 1; row["HIGH"] = 1000; dt.Rows.Add(row); param.Value = dt; cmd.Parameters.Add(param);//執行結果放在SAPDataReade中 SAPDataReader dr = cmd.ExecuteReader(); //retrieving returned datareaders do { Console.WriteLine("value of returned datareader: " + dr.GetSchemaTable().TableName); while (dr.Read()) { string line = ""; for (int i = 0; i < dr.FieldCount; i++) line = line + "| " + dr.GetValue(i).ToString(); Console.WriteLine(line); } } while (dr.NextResult()); Console.WriteLine("Checking returned value of parameter @IDRANGE..."); DataTable dt1 = (DataTable)param.Value; foreach (DataRow row1 in dt1.Rows) { string line = ""; for (int i = 0; i < dt1.Columns.Count; i++) line = line + "| " + row1[i].ToString(); Console.WriteLine(line); }
4
.
EXEC
語句的文法以下幾節介紹了針對該提供者實現 EXEC 語句的文法規範。請注意,在某些情況下,該文法與 Transact-SQL 文法稍有不同。
4.1 EXEC
文法 EXEC rfc_name [{value | @variable [OUTPUT]}][,...n] [@parameter = {value | @variable [OUTPUT]}][,...n] [;] 其中:
rfc_name 指定要執行的函數調用的名稱。
parameter 指定函數介面中定義的參數名。
value 指定參數值。
@variable 指定替換參數。使用
DbParameter 介面可以綁定參數值。
output 指定 SAP RFC 參數為
Output 或
InputOutput。
4.2
處理具名引數和未具名引數以下內容是在 EXEC 查詢中指定具名引數和未具名引數的準則:1. 在指定參數時,可以通過命名這些參數(例如,@parameter_name=value)來指定參數,也可以只提供值。2. 當使用預設值定義參數時,可以在不指定參數的情況下執行該操作。3. 當使用 @parameter_name=value 格式時,則無需按照函數調用中所定義的順序來提供參數名和常數。4. 未具名引數的所需順序如下所示:o IMPORT (Input)o EXPORT (Output)o TABLE (InputOutput)但是,排序是在參數類型內按照上面所列順序進行的。例如,您有 6 個未具名引數,這 3 種參數類型各兩個,如下表所示,參數排序應為
param1、
param2、
param3、
param4、
param5、
param6。
IMPORT 參數 |
EXPORT 參數 |
TABLE 參數 |
param1 |
param3 |
param5 |
param2 |
param4 |
param6 |
5. 使用未具名引數時,您需要指定所有參數(包括選擇性參數和必選參數)的值。只有當選擇性參數出現在參數列表的末尾時,才可以省略它們。不支援使用“Default”或空格跳過選擇性參數,如下面樣本所示:
EXEC Proc_Test_Defaults , 'A';
請改用下列文法以擷取所需的結果:
EXEC Proc_Test_Defaults @p2='A';
6. EXEC 查詢不支援使用具有下列屬性的參數:o 嵌套結構(包含其他結構作為其欄位的結構)。o 巢狀表格。o 包含結構的表。o 包含表的結構。o 欄位中包含複合字元串類型(例如
SSTRING 或
RAWSTRING)的結構或表。7. 下表列出了執行 RFC 時 RFC 參數類型與參數方向之間的邏輯映射:
PFC 參數類型 |
查詢關鍵字 |
參數方向 |
Import 參數 |
無 |
Paramdirection.Input |
Export 參數 |
Output |
Paramdirection.Output |
Table 參數 |
Output /無 |
InputOutput |
8. 9. 以下內容是處理參數的一般準則:a. 您可以將參數值指定為常數,也可以通過在查詢中使用預留位置來指定參數值。b. 在查詢中使用預留位置時,必須建立
SAPParameter 對象並將其添加到相應的命令對象中。然後,將佔位符的名稱傳遞到建構函式中;方向和值取決於上下文。§ 對於
Input 參數,請不要在查詢中指定參數方向的關鍵字。但必須設定該參數對象的
value 欄位,否則該提供者將引發異常。請一定不能顯式設定該參數對象的
direction 欄位,因為該提供者的預設設定為
Input。§ 對於其他參數,請使用格式 @paramname=@placeholder 並在查詢中顯式指定
Output 關鍵字。然後,您必須添加與預留位置相對應的
SAPParameter 並根據參數類型將參數方向顯式設定為
ParamDirection.Output 或
ParamDirection.InputOutput。c. 參數名稱和預留位置名稱不區分大小寫。d. 除非參數具有不同的方向,否則它們的名稱不能在查詢中重複。e. 預留位置名稱不能在查詢中重複。[返回頁首]
4.3 EXEC
語句樣本· 若要執行不帶輸入參數的 BAPI,請使用以下文法;資料通過 DataReader 對象返回:· EXEC BAPI_COMPANYCODE_GETLIST · 若要執行帶有輸入參數的 RFC,請使用以下文法:· Exec RFC_CUSTOMER_GET @NAME1='Contoso' · 若要執行帶有指定的輸入參數但沒有參數名稱的 RFC,請使用以下文法:· Exec RFC_CUSTOMER_GET '*', 'Contoso' · 若要執行帶有指定為變數的輸入參數的 RFC,請使用以下文法:· Exec RFC_CUSTOMER_GET @var 在此樣本中,必須建立名為
@var 的參數,並顯式設定該參數的值(例如,設定為“1001”),原因是 RFC_CUSTOMER_GET 的第一個參數對應於 KUNNR(客戶號)。· 若要執行使用變數作為輸入參數名稱的 RFC,請使用以下文法:· Exec RFC_CUSTOMER_GET @KUNNR=@var1, @NAME1='Contoso' 您必須建立名為
@var1 的 SAPParameter,指定它的值,然後將它綁定到對應的命令對象。新建立的參數對象的預設方向為
input。· 若要執行 BAPI,並將表作為參數返回,請使用以下文法:· EXEC BAPI_COMPANYCODE_GETLIST @ COMPANYCODE_LIST=@tableVar OUTPUT 您必須建立名為
@var1 的 SAPParameter,指定它的值,然後將它綁定到對應的命令對象。新建立的參數對象的方嚮應為
InputOutput。