[问题](已解决) function间DataTable呼叫问题

楼主: 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();
}
}
}
作者: konkonchou (卡卡猫)   2020-02-11 17:20:00
if (!IsPostBack)

Links booklink

Contact Us: admin [ a t ] ucptt.com