2

問題を簡単に作成できる小さなサンプルに絞り込みました。

簡単な説明- データベース接続にfirebirdの埋め込みdllを使用しています。つまり、firebirdデータベースに接続するためにfbembed.dllを使用しています。コードでは、このような3つの接続文字列があります(3番目の接続文字列で指定された追加の属性クライアントライブラリに注意してください)-

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に2つのボタンがあり、最初のボタンをクリックするとこのコードが表示されます-

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

2番目のボタンをクリックすると、このコードが表示されます-

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

connection3として指定された接続文字列で接続を作成すると、FbException 「オペレーティングシステムディレクティブCreateFilefailed」が発生します。

ただし、接続文字列をconnection2として置き換えると、正常に機能します。

さらに、connection3、次にconnection1で接続を作成しても問題はありませんが、connection1、次にconnection3で接続を作成すると、同じfbexceptionが発生します。

connection2とconnection3で指定されたデータベースは同じですが、違いは追加の属性クライアントライブラリのみであることに注意してください。

なぜこの奇妙な行動が火の鳥を埋め込んだのか。システムにfirebirdサーバーがインストールされている場合は、すべて正常に機能します。しかし、なぜそれがfirebirdの埋め込みdllに残るのかという問題を知りたいですか?

4

3 に答える 3

3

あなたの問題は以下に関連しています:http://tracker.firebirdsql.org/browse/CORE-2507

これはFBエンジンのバグであり、2.1.4バージョンで修正されています。

于 2012-07-18T14:14:39.603 に答える
0

問題は、FirebirdサーバーとFirebirdが埋め込まれたデータベースに接続していることです。最初のものは、他のプロセスで開くためにデータベースファイルをロックします(私はあなたがスーパーサーバーを使用していると思います)。

別のオプションは、異なる場所から2つの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 に答える