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数据库文件?
你错过了一个关键点,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:
下载最新的Firebird 3 zip工具包(对于32位或AnyCPU应用程序使用32位,对于64位应用程序使用64位).
在撰写本文时,最新版本是Firebird 3.0.1.您可以从Firebird 3下载页面获取它,在Win32或Win64下查找"用于手动/自定义安装的Zip工具包".
D:\Temp\fb3embedded
)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
.