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;