如何以编程方式创建 Firebird 数据库文件?

How do I create a Firebird database file programmatically?

如何以编程方式创建 Firebird 数据库文件?

我使用 SQLite 编写代码(C# .NET,System.Data.SQLite) ...决定试试 Firebird。

要安装 Firebird:Windows 7 -> Visual Studio 2013 -> 文件 -> 新建 -> 项目等 ---------- 然后是工具 -> 库包管理器 -> 管理 NuGet 包 -> 搜索 "firebird" -> Firebird ADO.NET 数据提供者 -> 安装(按钮)。

导致 a) 参考 -> FirebirdSql.Data.FirebirdClient 和 b) FirebirdSql.Data.FirebirdClient.5.8.0 子目录 ... 带有 Firebird .dll。

为了创建一个 Firebird 数据库文件,我已经尝试过(从另一个 Whosebug post 中提取):

int pageSize = 4096;
bool forcedWrites = true;
bool overwrite = false;
var connectionString = new FbConnectionStringBuilder
{
    Database = stPathFilename,
    ServerType = FbServerType.Embedded,
    UserID = "SYSDBA",
    Password = "masterkey",
    ClientLibrary = "fbclient.dll"
}.ToString();
FbConnection.CreateDatabase(connectionString, pageSize, forcedWrites, overwrite);

我认为这是标准的,除了 stPathFilename。但是,此代码通过异常...抱怨 fbclient.dll。

然后我试了

    ClientLibrary = "FirebirdSql.Data.FirebirdClient.dll" 

...位于我的调试子目录中。

这会引发异常..."Unable to find an entry point named 'isc_create_database' in DLL 'FirebirdSql.Data.FirebirdClient.dll"。

如何以编程方式创建 Firebird 数据库文件?

您错过了一个关键点,Firebird ADO.net 提供程序不像 System.Data.SQLite:它 不是 Firebird 数据库引擎,它只是连接到 Firebird 服务器的客户端,默认情况下通过 Firebird TCP/IP 有线协议的纯 C# 实现,或者使用本机客户端或嵌入式 'server'(本机客户端 API直接与进程内数据库引擎对话)。

第一个选项没有依赖项,但第二个和第三个选项具有您需要自己提供的本机依赖项(它不是 FirebirdSql.Data.FirebirdClient 的一部分)。

对于本机,您需要 fbclient.dll,对于 Firebird Embedded,您需要 Firebird Embedded:对于 Firebird 2.5 及更早版本:fbembed.dll 和依赖项,对于 Firebird 3 fbclient.dll + plugins\engine12.dll 和依赖项。

您的代码本身没有什么问题,但要获得它 运行 您需要执行以下操作才能获得 Firebird Embedded:

  1. 下载最新的 Firebird 3 压缩包(32 位用于 32 位或 AnyCPU 应用程序,64 位用于 64 位应用程序)。

    撰写本文时最新版本是 Firebird 3.0.1。可以从Firebird 3 download page中获取,在Win32或Win64下寻找"Zip kit for manual/custom installs"

  2. 将其解压到一个文件夹中(例如D:\Temp\fb3embedded
  3. 您可以保留所有文件,但您可以删除大部分文件,因为它们对于 Firebird Embedded 来说不是必需的(zipkit 也是一个完整的 Firebird 服务器)。您应该保留以下内容:
    • intl 文件夹和所有内容(字符集和排序规则支持所必需的)
    • plugins\engine12.dll(数据库引擎本身,plugins中的其他文件可能会被删除,但这可能会限制某些功能)
    • fbclient.dll(嵌入式引擎的主要入口点)
    • firebird.msg(包含错误信息)
    • icu*(字符集和排序规则支持所必需的)
    • 您可能需要保留 msvcp100.dllmsvcr100.dll 如果尚未安装(但通常在最新的 Windows 系统上)

从技术上讲,您也可以删除 intl,但这会限制字符集支持。

在您的代码中,将 ClientLibrary = "fbclient.dll" 指定为 ClientLibrary = @"D:\Temp\fb3embedded\fbclient.dll" 即可。对于已部署的应用程序,您还可以将 Firebird Embedded 放入您的应用程序文件夹中并使用相对路径。

对于 Firebird 2.5 及更早版本,说明类似,但您需要下载该版本的嵌入式 zip 套件,将其解压缩到一个文件夹中,然后将 ClientLibrary 指向 fbembed.dll(以及不在该文件夹中 fbclient.dll)。

请注意,如果数据库已经存在并且您已将 overwrite 指定为 false

,则 FbConnection.CreateDatabase 将抛出异常