作者:
jojojen (JJJ)
2020-02-11 16:30:57各位前輩們好,最近由於碰到將SAP資料轉到SQL Server的需求
目前先練習試著用Web Form寫了個簡單的頁面轉資料
程式分成兩個部分:
1. Page_Load: 建立SAP連結透過呼叫RFC取得資料,並在網頁上預覽
2. ButtonSAPtoMSSQL_Click: 點擊後,建立SAP連結透過呼叫RFC取得資料,將資料傳到SQL
S
目前程式能夠成功執行,不過"建立SAP連結透過呼叫RFC取得資料"這個動作重複了,
請問該如何改寫才能避免這個冗余的重複動作?
不好意思,剛開始寫C#, 問題有點基本,覺得說明麻煩的話可以提一下相關概念的關鍵字
我再自己去研究即可,感謝各位前輩
以下為程式碼:
namespace SAP_RFC
{
public partial class WebFormSAP : System.Web.UI.Page
{
public void Page_Load(object sender, EventArgs e)
{
// 重複程式段落======================================================
RfcConfigParameters rfcPar = new RfcConfigParameters();
rfcPar.Add(RfcConfigParameters.Name, "...");
rfcPar.Add(RfcConfigParameters.AppServerHost, "...");
rfcPar.Add(RfcConfigParameters.Client, "...");
rfcPar.Add(RfcConfigParameters.User, "...");
rfcPar.Add(RfcConfigParameters.Password, "...");
rfcPar.Add(RfcConfigParameters.SystemNumber, "..");
rfcPar.Add(RfcConfigParameters.Language, "..");
RfcDestination dest = RfcDestinationManager.GetDestination(rfcPar);
RfcRepository rfcrep = dest.Repository;
IRfcFunction myfun = null;
myfun = rfcrep.CreateFunction("...");
myfun.SetValue("...", "...");
myfun.SetValue("...", "...");
myfun.Invoke(dest);
IRfcTable IrfTable = myfun.GetTable("...");
DataTable dt = new DataTable();
dt.Columns.Add("...");
dt.Columns.Add("...");
dt.Columns.Add("...");
for (int i=0; i<IrfTable.Count; i++)
{
IrfTable.CurrentIndex = i;
DataRow dr = dt.NewRow();
dr["..."] = IrfTable.GetString("...");
dr["..."] = IrfTable.GetString("...");
dr["..."] = IrfTable.GetString("...");
dt.Rows.Add(dr);
}
// 重複程式段落 ==================================================
GridViewReadSAP.DataSource = dt;
GridViewReadSAP.DataBind();
}
protected void ButtonSAPtoMSSQL_Click(object sender, EventArgs e)
{
// 重複程式段落======================================================
RfcConfigParameters rfcPar = new RfcConfigParameters();
rfcPar.Add(RfcConfigParameters.Name, "...");
rfcPar.Add(RfcConfigParameters.AppServerHost, "...");
rfcPar.Add(RfcConfigParameters.Client, "...");
rfcPar.Add(RfcConfigParameters.User, "...");
rfcPar.Add(RfcConfigParameters.Password, "...");
rfcPar.Add(RfcConfigParameters.SystemNumber, "..");
rfcPar.Add(RfcConfigParameters.Language, "..");
RfcDestination dest = RfcDestinationManager.GetDestination(rfcPar);
RfcRepository rfcrep = dest.Repository;
IRfcFunction myfun = null;
myfun = rfcrep.CreateFunction("...");
myfun.SetValue("...", "...");
myfun.SetValue("...", "...");
myfun.Invoke(dest);
IRfcTable IrfTable = myfun.GetTable("...");
// RfcTable to DataTable
DataTable dt = new DataTable();
dt.Columns.Add("...");
dt.Columns.Add("...");
dt.Columns.Add("...");
for (int i = 0; i < IrfTable.Count; i++)
{
IrfTable.CurrentIndex = i;
DataRow dr = dt.NewRow();
dr["..."] = IrfTable.GetString("...");
dr["..."] = IrfTable.GetString("...");
dr["..."] = IrfTable.GetString("...");
dt.Rows.Add(dr);
}
// 重複程式段落======================================================
ConnectionStringSettings setting =
ConfigurationManager.ConnectionStrings["..."];
SqlConnection objConn = new SqlConnection(setting.ConnectionString);
// Insert New Data
objConn.Open();
string strSQL = "INSERT INTO dbo.SAP_RFC_DEMO(., ., .) VALUES (., ., .)";
for (int i=0; i<dt.Rows.Count; i++)
{
SqlCommand objCmd = new SqlCommand(strSQL, objConn);
objCmd.Parameters.Add("...", SqlDbType.NText, 10).Value = dt.Rows[i][0]
;
objCmd.Parameters.Add("...", SqlDbType.NText, 18).Value = dt.Rows[i][1]
;
objCmd.Parameters.Add("...", SqlDbType.NText, 9).Value = dt.Rows[i][2];
objCmd.ExecuteNonQuery();
}
objConn.Close();
}
}
}