7

我正在尝试使用 .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).

有任何想法吗?

4

2 回答 2

6

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

internal const string DefaultValueClientLibrary = "fbembed";

现在,将新值传递给 ConnectionString 就可以了:

  var connectionString = new FbConnectionStringBuilder
  {
    Database = dbPath,
    ServerType = FbServerType.Embedded,
    UserID = "SYSDBA",
    Password = "masterkey",
    ClientLibrary = "fbclient.dll"
  }.ToString();
于 2017-02-01T13:54:00.653 回答
3

这需要一段时间才能弄清楚。但我得到了它的工作......

对于嵌入式客户端:
运行 NuGet 命令:Install-Package FirebirdSql.Data.FirebirdClient

对于嵌入式服务器:
关键点:不将 dll 作为项目参考添加到 Visual Studio。相反,它们的位置是在连接字符串中定义的。

从这里下载完整的服务器 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; 
于 2017-03-12T05:23:26.960 回答