我已将问题范围缩小到可以轻松产生此问题的小样本。
简介 - 我使用 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";
我的用户界面上有两个按钮,单击第一个按钮时我有此代码 -
FbConnection fbConnection = new FbConnection(connection1);
fbConnection.Open();
在第二个按钮上单击我有此代码 -
FbConnection fbConnection = new FbConnection(connection3);
fbConnection.Open();
如果我使用指定为 connection3 的连接字符串创建连接,我将收到 FbException “操作系统指令 CreateFile 失败”。
但是,如果我将连接字符串替换为connection2,它就可以正常工作。
此外,如果我先使用connection3 创建连接,然后使用connection1 创建连接,则没有问题,但如果我先使用connection1 创建连接,然后使用connection3 创建连接,则会出现相同的异常。
注意,connection2和connection3中指定的数据库是相同的,唯一的区别是附加属性客户端库。
为什么嵌入式 Firebird 会出现这种奇怪的行为。如果我的系统上安装了 firebird 服务器,一切都可以正常工作。但是,我想知道为什么它仍然存在于 firebird 的嵌入 dll 中?
最佳答案
您的问题涉及:http://tracker.firebirdsql.org/browse/CORE-2507
这是FB引擎的一个错误,已在2.1.4版本中修复。
关于c# - Firebird 错误: "operating system directive CreateFile failed" on opening connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11529545/