Firebird .NET провайдер и встроенный сервер 3

Я пытаюсь использовать.NET Firebird Provider для подключения к встроенному серверу FB 3.0.1.

Насколько я знаю (также написано здесь (стр. 6)), больше нет файла fbclient.dll\fbembed.dll, а для удаленного и встроенного доступа используется один клиент fbclient.dll.

Но когда я вызываю FBConnection.Open(), я получаю исключение System.DllNotFoundException:

Unable to load DLL 'fbembed': 
Impossible to find the specified module (Exception from HRESULT: 0x8007007E).

Есть идеи?

2 ответа

Решение

При поиске в коде провайдера клиентская библиотека по умолчанию будет найдена (возможно, для совместимости):

internal const string DefaultValueClientLibrary = "fbembed";

Теперь, передав новое значение в ConnectionString, сделайте свое дело:

  var connectionString = new FbConnectionStringBuilder
  {
    Database = dbPath,
    ServerType = FbServerType.Embedded,
    UserID = "SYSDBA",
    Password = "masterkey",
    ClientLibrary = "fbclient.dll"
  }.ToString();

Это заняло некоторое время, чтобы выяснить. Но я получил это на работу....

Для встроенного клиента:
Запустите команду NuGet: Install-Package FirebirdSql.Data.FirebirdClient

Для встроенного сервера:
Ключевой момент: DLL не добавляются в Visual Studio в качестве ссылки на проект. Вместо этого их местоположение определяется в строке подключения.

Загрузите полный почтовый сервер отсюда. Затем распакуйте эти три файла в ваш проект. Используйте структуру, подобную приведенной ниже (или, по крайней мере, убедитесь, что подкаталог "plugins" определен, иначе FB-сервер выдаст ошибку).
my_project \ firebird_server \ fbclient.dll

my_project \ firebird_server \ ib_util.dll

my_project \ firebird_server \ Plugins\engine12.dll

Затем настройте строку подключения:

Database=c:\sample_firebird_database.FDB;
User=my_username;
Password=my_password;
ServerType=1; // 1 = embedded server
Charset=UTF8;
ClientLibrary=c:\my_project\firebird_server\fbclient.dll; 
Другие вопросы по тегам