|
大家好,数据我已经取到了,但是有一点小问题:
- private void btnExecRFC_Click(object sender, EventArgs e)
- {
- //用线程来绑定数据集
- Thread thread = new Thread(new ThreadStart(GetSAPData));
- thread.SetApartmentState(ApartmentState.STA);
- thread.Start();
- thread.Join();
- this.dgv.DataSource = dt;
- }
- public void GetSAPData()
- {
- //实例化一个SAPControl类的实例。
- SAPLogonCtrl.SAPLogonControlClass Login = new SAPLogonCtrl.SAPLogonControlClass();
- //指定连接SAP的各项参数。
- Login.User = this.txtUser.Text.Trim();
- Login.Password = this.txtUserPwd.Text.Trim();
- Login.Client = this.txtClient.Text.Trim();
- Login.Language = this.txtLanguage.Text.Trim().ToUpper();
- Login.ApplicationServer = this.txtIP.Text.Trim();
- Login.SystemNumber = Convert.ToInt32(this.txtSystemNumber.Text.Trim());
- //New一个连接对象去连接SAP
- SAPLogonCtrl.Connection Conn = (SAPLogonCtrl.Connection)Login.NewConnection();
- //执行Logon方法检测是否能够登录到SAP,返回类型为Bool
- if (Conn.Logon(null, true))
- {
- //New一个SAPFunctionsClass的实例。
- SAPFunctionsOCX.SAPFunctionsClass rfc = new SAPFunctionsOCX.SAPFunctionsClass();
- [color=Red]rfc.Connection = Conn;//这里的时候就出现“Bad variant type”错误了,如果我不写这一句话那么程序运行的时候会弹出一个框让我输入密码,我输入密码之后可以正常取到SAP
- //的数据,但是每次让用户来输入密码显然不可取,不知道这里该怎么写呢?[/color]
- //通过Function接口指定需要调用的函数名称。
- SAPFunctionsOCX.IFunction ifc = (SAPFunctionsOCX.IFunction)rfc.Add("Z_GET_DATA");
-
- //调用Function接口的Call方法检测是否可以Call到SAP的函数,返回Bool类型的结果。
- if (ifc.Call())
- {
- SAPTableFactoryCtrl.Tables tables = (SAPTableFactoryCtrl.Tables)ifc.Tables;
- //指定SAP函数里面定义的内表名称。
- SAPTableFactoryCtrl.Table table = (SAPTableFactoryCtrl.Table)tables.get_Item("IT_MARA");
- //循环的次数就是已经得到的数据的总行数,也就是一起有多少条数据。
- for (int i = 1; i < table.RowCount; i++)
- {
- DataRow dr = dt.NewRow();
- if (i == 1)
- {
- dt.Columns.Add("MANDT");
- dt.Columns.Add("MATRN");
- dt.Columns.Add("ERSDA");
- dt.Columns.Add("ERNAM");
- dt.Columns.Add("VPSTA");
- dt.Columns.Add("BISMT");
- }
- dr["MANDT"] = (String)table.get_Value(i, "MANDT");
- dr["MATRN"] = (String)table.get_Value(i, "MATNR");
- dr["ERSDA"] = (DateTime)table.get_Value(i, "ERSDA");
- dr["ERNAM"] = (String)table.get_Value(i, "ERNAM");
- dr["VPSTA"] = (String)table.get_Value(i, "VPSTA");
- dr["BISMT"] = (String)table.get_Value(i, "BISMT");
- dt.Rows.Add(dr);
- }
- }
- }
- }
复制代码 |
|