Ошибка подключения клиента .NET Firebird, System.BadImageFormatExceptionC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка подключения клиента .NET Firebird, System.BadImageFormatException

Сообщение Anonymous »

Я постоянно ловлю следующее исключение при попытке открыть SQL-соединение с Firebird. Я подозреваю, что проблема связана с предоставленной мной строкой подключения.

Код: Выделить всё

System.BadImageFormatException: 'An attempt was made to load a program with an incorrect format. (0x8007000B)'

This exception was originally thrown at this call stack:
[External Code]
KPS_DSR_Updater.DAL.CreateConnecton(FirebirdSql.Data.FirebirdClient.FbConnectionStringBuilder) in DAL.cs
Вот код, который я написал:

Код: Выделить всё

using FirebirdSql.Data.FirebirdClient;
using Microsoft.Extensions.Configuration;
using System.Data;

namespace KPS_DSR_Updater
{
internal class DAL : IDisposable
{
public FbConnectionStringBuilder? _connectionStringBuilder;
private string? _connectionString;
private FbConnection? _connection;
private IConfiguration _configuration;

public DAL(IConfiguration configuration)
{
// Initialize configuration and check for null value.
_configuration = configuration ??
throw new ArgumentNullException(nameof(configuration));

try
{
List parsedConnectionInfo = ParseConfiguration(_configuration);

// Build the connection string using the parsed configuration
// file containing connection info.
_connectionStringBuilder = new FbConnectionStringBuilder
{
ClientLibrary = parsedConnectionInfo[0],
Database = parsedConnectionInfo[1],
UserID = parsedConnectionInfo[3],
Password = parsedConnectionInfo[2],
ServerType = FbServerType.Embedded
};
}
catch (Exception ex)
{
// Error re-thrown for Event Log. Outputting to console for
// debugging purposes only.
Console.WriteLine($"Error occured attempting to build connection string\n" +
$"{ex.Message}");
throw;
}
}

public void CreateConnecton(FbConnectionStringBuilder connectionStringBuilder)
{
// Build connection string and open connection. Connection string must first be
// converted to a string, from FbConnectionStringBuilder object.
try
{
// Convert to string
_connectionString = connectionStringBuilder.ToString();
_connection = new FbConnection(_connectionString);
_connection.Open();
}
catch (Exception ex)
{
Console.WriteLine($"Error occured attempting to make connection to database.\n" +
$"{ex.Message}");
throw;
}
}

private List ParseConfiguration(IConfiguration configuration)
{
// Grab configuration settings from appsettings.json, if not null.
List configurationInfo = configuration.GetSection("connection_info").Get()
?? throw new NoNullAllowedException();

return configurationInfo;
}

public void Dispose()
{
// If necessary, close connection at program end of lifetime.
if (_connection != null) _connection.Close();
}
}
}

И вот как я это называю:

Код: Выделить всё

using FirebirdSql.Data.FirebirdClient;
using KPS_DSR_Updater;
using Microsoft.Extensions.Configuration;

// Build config from configuration file.
var configurationBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
var configuration = configurationBuilder.Build();

// Create a new DAL object and apply connection_settings from configuration.
DAL DataAccessLayer = new DAL(configuration);

// Open connection to database.
FbConnectionStringBuilder connectionStringBuilder = DataAccessLayer._connectionStringBuilder!;
DataAccessLayer.CreateConnecton(connectionStringBuilder);
Я пытался жестко закодировать строку подключения и выполнить тот же вызов, но ошибка все равно выдается. Интересно, что я имею в виду некоторую работу другого разработчика, которая в настоящее время работает и находится в производстве, и я следовал тем же соглашениям, поэтому я не уверен, почему это не будет работать таким же образом.
Для справки, вот строка подключения с удаленной конфиденциальной информацией:

Код: Выделить всё

client library=fbclient.dll;initial catalog=DATA.FDB;user id=example;password=example;server type=Embedded
РЕШЕНИЕ: Решение было довольно простым. Мне просто нужно было загрузить 64-битный двоичный файл с Firebird для драйвера ODBC. Тогда это можно было использовать, поскольку моя программа 64-битная, поэтому двоичный файл должен совпадать!

Подробнее здесь: https://stackoverflow.com/questions/787 ... texception
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка подключения клиента .NET Firebird, System.BadImageFormatException
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Php firebird данные о количестве соединений в firebird отображаются некорректно
    Anonymous » » в форуме Php
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Php firebird данные о количестве соединений в firebird отображаются некорректно
    Anonymous » » в форуме Php
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Php firebird данные о количестве соединений в firebird отображаются некорректно
    Anonymous » » в форуме Php
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • C# — System.BadImageFormatException System.Security
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»