gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:05:31 25 4
gpt4 key购买 nike

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

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

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

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

为了创建一个 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" 

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

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

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

最佳答案

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

第一个选项没有依赖项,但第二个和第三个选项具有您需要自己提供的 native 依赖项(它不是 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 套件”

  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 及更早版本,说明类似,但您需要下载该版本的嵌入式压缩包,将其解压缩到一个文件夹中,然后指向 ClientLibraryfbembed.dll (而不是 fbclient.dll )在该文件夹中。

请注意 FbConnection.CreateDatabase如果数据库已经存在并且您指定了 overwrite,将抛出异常作为false .

关于c# - 如何以编程方式创建 Firebird 数据库文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com