2

我已将我的问题缩小到可以轻松产生此问题的小样本。

简介 - 我使用 firebird 的嵌入式 dll 进行数据库连接,即 fbembed.dll 连接到 firebird 数据库。在代码中,我有三个这样的连接字符串(注意在第三个连接字符串中指定的附加属性客户端库) -

private const string connection1 = @"User=SYSDBA;Password=masterkey;Database=D:\DB1.fdb;ServerType=1;Charset=UTF8";
private const string connection2 = @"User=SYSDBA;Password=masterkey;Database=D:\DB2.fdb;ServerType=1;Charset=UTF8";
private const string connection3 = @"User=SYSDBA;Password=masterkey;Database=D:\DB2.fdb;ServerType=1;client library=D:\fbembed.dll;Charset=UTF8";

我在 UI 上有两个按钮,在第一个按钮单击时我有这个代码 -

FbConnection fbConnection = new FbConnection(connection1);
fbConnection.Open();

在第二个按钮点击我有这个代码 -

FbConnection fbConnection = new FbConnection(connection3);
fbConnection.Open();

如果我使用指定为 connection3 的连接字符串创建连接,我将收到 FbException "operating system directive CreateFile failed"

但是,如果我将连接字符串替换为 connection2,它工作正常。

此外,如果我先创建与 connection3 的连接,然后与 connection1 没有问题,但如果我创建与 connection1 的连接,然后是 connection3,则会出现相同的 fbexception。

注意,connection2 和 connection3 中指定的数据库是相同的,唯一的区别是附加的属性客户端库。

为什么嵌入 firebird 会出现这种奇怪的行为。如果我的系统上安装了 firebird 服务器,一切正常。但是,我想知道为什么它仍然存在于 firebird 的嵌入式 dll 中?

4

3 回答 3

3

您的问题与:http ://tracker.firebirdsql.org/browse/CORE-2507 有关

这是 FB 引擎的一个 bug,在 2.1.4 版本中修复。

于 2012-07-18T14:14:39.603 回答
0

问题是您正在使用 Firebird 服务器和嵌入的 Firebird 连接到数据库。第一个锁定数据库文件以便与其他进程一起打开(我认为您正在使用超级服务器)。

另一种选择是您使用来自不同位置的两个 fbembed.dll。

于 2012-07-18T18:05:00.220 回答
0

这很有趣,但我解决了我的Firebird 1.5 + Windows 7问题!将 Firebird 安装为应用程序,然后以管理员身份运行 fb 应用程序,并以管理员身份运行批处理文件(gbak.exe -b -v -g)。摆脱:

**ERROR**:uavailable database
or
operating system directive CreateFile failed
于 2013-01-11T09:14:53.600 回答