在此处输入图像描述我在 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;
}
}