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

时间:2017-03-17 18:23:57

标签: c# .net 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);

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

然后我试了

    ClientLibrary = "FirebirdSql.Data.FirebirdClient.dll" 

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

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

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

1 个答案:

答案 0 :(得分: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:

  1. 下载最新的Firebird 3 zip工具包(对于32位或AnyCPU应用程序使用32位,对于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系统上)
  4. 从技术上讲,您也可以删除intl,但这会限制字符集支持。

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

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

    请注意,如果数据库已存在并且您已将fbclient.dll指定为FbConnection.CreateDatabase,则overwrite将引发异常。