1

在此处输入图像描述我在 python 2.7.13(它使用其他 dll 文件和 .mdb 数据库文件)上使用 C# dll 使用 pythonnet 进行一些技术计算。这个 dll 文件没有很好的文档(只有命名空间、类和方法名)。好吧,大多数 PC 中的程序都可以正常工作,但在所有办公计算机中,它都会从 Dll 文件中引发运行时错误(我怀疑是与数据库的连接)。此 dll 文件被编译为面向 .NET 4.0(在办公计算机中安装了 .NET 4.7.1 或其他比 4.0 更新的版本)并且也正在使用 EntityFramework(程序面向 5.0,这是程序文件夹中的一个 dll 文件,但在办公电脑安装了EntityFramework 6.2工具)。Microsoft 数据库引擎 2010 也安装在这些计算机中。

在我测试过该程序的每一台其他计算机上,它都能完美运行。在办公室计算机中,我发现了一组程序适用的输入数据,但无论如何这是不正确的,因为它也应该适用于默认数据。

为了在办公计算机上进行测试,我使用 PyInstaller 编译了 python 代码(我重复一遍,编译版本在其他 PC 上工作正常)。

我正在使用 .NET Reflector 反编译 dll 文件和程序异常以查找错误。抛出异常的方法在下面的代码中。

提前致谢!

public int LoadRanghiAmmessi(int[] vRanghi, string geometria)
{
    int index = 0;
    CrConnection connection = new CrConnection(this.PathDB);
    string query = "SELECT * FROM RanghiAmmessi WHERE (Geometria='" + geometria + "') ORDER BY NRanghi";
    OleDbDataReader recordset = connection.GetRecordset(query, @"\Coils.mdb;");
    if (!recordset.HasRows)
    {
        if (recordset != null)
        {
            recordset.Close();
        }
        query = "SELECT * FROM RanghiAmmessi WHERE (Geometria='*') ORDER BY NRanghi";
        recordset = connection.GetRecordset(query, @"\Coils.mdb;");
        while (recordset.Read())
        {
            vRanghi[index] = int.Parse(recordset["NRanghi"].ToString());
            index++;
        }
        if (recordset != null)
        {
            recordset.Close();
        }
    }
    return index;
}



public OleDbDataReader GetRecordset(string query, string NomeDB)
{
    string connectionString = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + this.PathDB + NomeDB + "Jet OLEDB:Database Password=123456";
    this.ChiudiConnessioni();
    this.conn = new OleDbConnection(connectionString);
    OleDbCommand command = new OleDbCommand(query, this.conn);
    try
    {
        this.ApriConnessione();
        return command.ExecuteReader();
    }
    catch (Exception exception)
    {
        exception.Message.ToString();
        this.ChiudiConnessioni();
        return null;
    }
}
4

2 回答 2

1

经过多次测试后,我发现在声明一些对象(如函数参数)并编译运行程序与 Windows 7 兼容之后,该程序也在其他 PC 上运行。在像变量一样创建对象之前,这些变量作为参数传递,(在这种情况下,合理的第一个想法是问题出在“按引用传递”机制并且某些值没有以正确的模式插入,但事实并非如此,因为: - 完全相同的代码在大多数情况下都运行良好PC(兼容性问题)- 使用完全相同的机制来指定对象属性并进行计算在这种情况下,我会说不清楚问题出在哪里。在第一个版本中,安装 SQL Server Express 使程序即使没有最后的修改也能正常工作。

于 2018-05-29T06:37:46.090 回答
0

嗯......鉴于它在“其他PC”上运行良好的细节,我猜问题是你所谓的数据库。但是,我看不出任何人在问题解决之前如何确定问题所在。

于 2018-05-11T11:13:14.827 回答