Pythonnet Runtime Ошибка при использовании C# dll (несовместимость базы данных)
введите описание изображения здесь Я использую C# dll с использованием pythonnet на python 2.7.13 (который использует другие dll-файлы и файлы базы данных.mdb) для выполнения некоторых технических расчетов. Эти dll файлы не имеют хорошей документации (только пространства имен, имена классов и методов). Хорошо, программа на большинстве ПК работает нормально, но на всех офисных компьютерах выдает ошибку времени выполнения из файлов Dll (я сомневаюсь в связи с базой данных). Эти dll-файлы скомпилированы для целевой.NET 4.0 (на офисных компьютерах установлена .NET 4.7.1 или другие версии, более новые, чем 4.0), и также используется EntityFramework (программы предназначены для 5.0, и это dll-файл в папке программы, но в на офисных компьютерах установлен инструмент EntityFramework 6.2). База данных Microsoft Engine 2010 также установлена на этих компьютерах.
На любом другом компьютере, который я тестировал, программа работает отлично. В офисных компьютерах я нашел группу входных данных, для которых работает программа, но в любом случае это не правильно, потому что она должна работать и для данных по умолчанию.
Для тестирования на офисных компьютерах я скомпилировал код Python с использованием PyInstaller (повторяю, скомпилированная версия отлично работает на других компьютерах).
Я использую.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;
}
}
2 ответа
После многих тестов я обнаружил, что программа работает и на другом ПК после объявления некоторых объектов, таких как параметры функций, и после компиляции запуска программы как совместимой с Windows 7. До того, как объекты были созданы как переменные, и эти переменные были переданы в качестве параметров, (в этом случае разумно было бы предположить, что проблема заключается в механизме "передача по ссылке" и что некоторые значения не вставляются в правильном режиме, но это не так, потому что: - один и тот же код в большинстве случаев функционировал очень хорошо ПК (проблема совместимости) - точно такой же механизм используется для задания атрибутов объектов и проведения вычислений. В этих условиях я бы сказал, что неясно, где была проблема. В первой версии установка SQL Server Express стала возможной для Программа хорошо работает даже без последних изменений.
Хмм... учитывая детали, что он отлично работает на "другом ПК", я предполагаю, что проблема в вашей так называемой базе данных. Однако я не вижу, как кто-либо может быть уверен в том, в чем заключается проблема, пока она не будет решена.