我已将我的问题缩小到可以轻松产生此问题的小样本。
简介 - 我使用 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 中?