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

tto*_*tom 5 .net c# ado.net firebird firebird-embedded

如何以编程方式创建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 subdir ... with 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);
Run Code Online (Sandbox Code Playgroud)

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

然后我试了一下

    ClientLibrary = "FirebirdSql.Data.FirebirdClient.dll" 
Run Code Online (Sandbox Code Playgroud)

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

这会引发异常......"无法在DLL'FirebirdSql.Data.FirebirdClient.dll中找到名为'isc_create_database'的入口点".

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

Mar*_*eel 6

你错过了一个关键点,Firebird ADO.net提供商不是这样的System.Data.SQLite:它不是 Firebird数据库引擎,它只是一个连接到Firebird服务器的客户端,默认情况下通过Firebird TCP/IP的纯C#实现有线协议,或者使用本机客户端或嵌入式"服务器"(直接与进程内数据库引擎对话的本机客户端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工具包".

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

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

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

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

请注意,FbConnection.CreateDatabase如果数据库已存在且您已指定overwrite为,则会抛出异常false.