我使用此代码将数据从 SAP DI(SQL 查询)加载到数据表:
namespace SAPApp
{
class SAPData
{
public void GetSAPData(Company oCompany)
{
if (oCompany.Connected)
{
dt.TableName = _TableName;
DataColumn dtColumn;
DataRow dtRow;
Cursor.Current = Cursors.WaitCursor;
SAPbobsCOM.Recordset oRecordSet;
oRecordSet = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);
oRecordSet.DoQuery(SQL);
oRecordSet.MoveFirst();
dt.BeginLoadData();
int colCount = oRecordSet.Fields.Count;
for (int i = 0; i < colCount; i++)
{
string colName = oRecordSet.Fields.Item(i).Name;
BoFieldTypes ftype = oRecordSet.Fields.Item(i).Type;
var dType = Type.GetType("System.String");
if (ftype == BoFieldTypes.db_Date)
dType = Type.GetType("System.DateTime");
else if (ftype == BoFieldTypes.db_Numeric)
dType = Type.GetType("System.Decimal");
dtColumn = new DataColumn()
{
DataType = dType,
ColumnName = colName,
Caption = colName,
};
dt.Columns.Add(dtColumn);
}
while (!oRecordSet.EoF)
{
dtRow = dt.NewRow();
for (int i = 0; i < colCount; i++)
dtRow[i] = oRecordSet.Fields.Item(i).Value;
dt.Rows.Add(dtRow);
oRecordSet.MoveNext();
}
dv = new DataView(dt);
dt.EndLoadData();
Cursor.Current = Cursors.Default;
}
}
工作正常!当 SAPbobsCOM.company 和 Company.Connect() 在主表单(单一表单应用程序)中“本地”定义时,执行需要 0.222 秒。但是,当我将 SAPbobsCOM.company 对象移动到“外部”类时,相同的代码运行时间为 +22 秒(将应用程序移动到 MDI)。
本地声明:
namespace SAPApp
{
public partial class FrmMain : Form
{
private readonly Company oCompany = new Company();
...
// Call in main form
SAPData SDAcc = new SAPData;
SDAcc.GetSAPData(oCompany); // param: oCompany object
对外声明:
\\ First create a TSapDI with oCompany objet
namespace SAPApp.Commons
{
public partial class TSapDI
{
public readonly Company oCompany = new Company();
\\ Then instantiate in Globals
namespace SAPApp.Commons
{
internal class Globals
{
public static TSapDI SapDI = new TSapDI();
\\ Create method in Commons
namespace SAPApp
{
class SAPData
{
public void GetSAPData(Company oCompany)....
\\ Finally call it
SAPData SDSearch = new SAPData
SDSearch.GetSAPData(Globals.SapDI.oCompany); // param: Globals.SapDI.oCompany object
在第一种情况下,VisualStudio 可以检查 GetSAPData 内的 oCompany 对象,但在第二种情况下则不能。
有人可以帮助我理解为什么会出现这样的差异,如果可能的话如何解决它?谢谢。
附注我认为这与 oCompany 从静态对象变为非静态对象有关。
我需要在不到 1 秒的时间内执行代码。
我找不到确切的原因,但我最终将代码更新为:
public static class TSapDI
{
public static Company oCompany = new Company();
然后将所有引用从 Globals.SapDI.oCompany 更改为 TSapDI.oCompany,它在 0.222 秒内恢复运行:-D
PS 我需要更改一些其他内容才能允许此更改。