如何通过编程创建Firebird数据库文件?

6
我该如何以编程方式创建Firebird数据库文件?
我已经使用SQLite编写了代码(C#.NET,System.Data.SQLite)... 现在决定尝试Firebird。
安装Firebird:Windows 7-> Visual Studio 2013-> 文件-> 新建-> 项目,等等。然后选择“工具”->“库程序包管理器”->搜索“firebird”-> Firebird ADO.NET数据提供程序-> 安装(按钮)。
结果是a)引用-> FirebirdSql.Data.FirebirdClient和b)FirebirdSql.Data.FirebirdClient.5.8.0子目录... 带有Firebird .dll's。
要创建Firebird数据库文件,我尝试了以下方法(从另一个StackOverflow帖子中提取):
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" 

... 它位于我的 Debug 子目录中。

这会抛出一个异常 ... "无法在 DLL 'FirebirdSql.Data.FirebirdClient.dll' 中找到名为 'isc_create_database' 的入口点。"

我如何通过编程方式创建 Firebird 数据库文件?


2
正如在Firebird-net-provider邮件列表中所指出的那样,仅拥有Firebird ADO.net提供程序是不够的,您需要自己包含Firebird Embedded,否则您只能连接到(普通)Firebird服务器的客户端。我会尽力在本周末发布更完整的答案,但时间有点紧。 - Mark Rotteveel
1个回答

7
您缺少一个重要的观点,Firebird ADO.net提供程序不像System.Data.SQLite:它不是Firebird数据库引擎,而是仅作为连接到Firebird服务器的客户端,默认情况下通过纯C#实现Firebird TCP/IP协议进行连接,或者使用本机客户端或嵌入式“服务器”(直接与进程内数据库引擎通信的本机客户端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 zip 包(32 位或 AnyCPU 应用程序使用 32 位,64 位应用程序使用 64 位)。

    撰写本文时,最新版本为 Firebird 3.0.1。您可以从 Firebird 3 下载页面 获取它,在 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及更早版本,说明类似,但您需要下载该版本的Embedded zip kit,将其解压缩到文件夹中,并将ClientLibrary指向该文件夹中的fbembed.dll(而不是fbclient.dll)。

只需注意,如果数据库已经存在并且您已将overwrite设置为false,则FbConnection.CreateDatabase将抛出异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接