我已经将我的问题缩小到小样本,这样可以很容易地解决这个问题。
简要 - 我正在使用嵌入式dll的firebird进行数据库连接,即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 “操作系统指令CreateFile失败”。
但是,如果我将连接字符串替换为connection2,它可以正常工作。
此外,如果我使用connection3创建连接然后使用connection1没有问题但是如果我使用connection1然后连接3创建连接,则会出现相同的fbexception。
注意,connection2和connection3中指定的数据库是相同的,但唯一的区别是其他属性客户端库。
为什么这种奇怪的行为与嵌入火鸟。如果我的系统上安装了firebird服务器,一切正常。但是,我想知道为什么它仍然存在于嵌入dll的firebird中?
答案 0 :(得分:3)
您的问题与:http://tracker.firebirdsql.org/browse/CORE-2507
有关这是FB引擎中的一个错误,已在2.1.4版本中修复。
答案 1 :(得分:0)
问题是您使用Firebird服务器连接数据库并且Firebird已嵌入。第一个用其他进程锁定数据库文件以进行打开(我认为你使用的是超级服务器)。
另一个选择是你在不同的位置使用两个fbembed.dll。
答案 2 :(得分:0)
这很有趣,但我解决了Firebird 1.5 + Windows 7
问题!
安装Firebird作为应用程序然后以管理员身份运行fb应用程序,并以管理员身份运行批处理文件(gbak.exe -b -v -g)
。
摆脱:
**ERROR**:uavailable database
or
operating system directive CreateFile failed