enter image description here 我正在 python 2.7.13 上使用 pythonnet(使用其他 dll 文件和 .mdb 数据库文件)使用 C# dll 进行一些技术计算。该 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文件和程序异常以查找错误。抛出Exception的方法在下面的代码中。
提前致谢!
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;
}
}
最佳答案
经过多次测试,我发现该程序在声明一些对象(如函数参数)并在编译后运行与 Windows 7 兼容的程序后,也可以在其他 PC 上运行。在对象像变量一样被创建之前,这些变量被作为传递参数(在这种情况下,合理地第一个想法是问题是“按引用传递”机制,并且某些值没有以正确的模式插入,但事实并非如此,因为: - 完全相同的代码在大多数 PC 上运行良好(兼容性 问题) - 使用完全相同的机制来指定对象属性和 进行计算 在这种情况下,我想说目前还不清楚问题出在哪里。在第一个版本中,安装 SQL Server Express 使得程序即使没有最后的修改也可以正常运行。
关于c# - 使用 C# dll 的 Pythonnet 运行时错误(数据库不兼容),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50255983/