如何以编程方式创建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数据库文件?
答案 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:
下载最新的Firebird 3 zip工具包(对于32位或AnyCPU应用程序使用32位,对于64位应用程序使用64位)。
在撰写本文时,最新版本是Firebird 3.0.1。您可以从Firebird 3 download page获取它,在Win32或Win64下查找“Zip kit for manual / custom installs”。
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
(而不是{ {1}})在该文件夹中。
请注意,如果数据库已存在并且您已将fbclient.dll
指定为FbConnection.CreateDatabase
,则overwrite
将引发异常。