Firebird .NET 提供商和嵌入式服务器 3

Firebird .NET provider and embedded server 3

我正在尝试使用 .NET Firebird Provider 连接到嵌入式 FB 3.0.1 服务器。

据我所知,(也写成 here (page 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).

有什么想法吗?

查看提供商代码,默认客户端库是 fbembed(可能是为了兼容性):

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。相反,它们的位置在连接字符串中定义。

here 下载完整的服务器 zip。然后将这三个文件解压到你的项目中。使用类似于下面的结构。

  • my_project\firebird_server\fbclient.dll
  • my_project\firebird_server\ib_util.dll
  • my_project\firebird_server\plugins\engine12.dll //是的,需要将它放在“plugins”子目录中,否则 firebird 服务器会抛出错误。

然后设置连接字符串:

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;