1

.NET プロバイダーの FbConnectionStringBuilder クラスを使用して、リモートの Firebird サーバーに接続する際に問題が発生しています。組み込みモードまたはサーバー モードのいずれかでローカル データベース ファイルに接続できますが、リモート サーバーへの接続を確立する場合、接続を確立できません。

次のコード (サーバー モード) を使用して、FbConnectionStringBuilder クラスのプロパティを割り当てます。組み込みモードのプロパティを割り当てるコードは省略しました。

var cs = new FbConnectionStringBuilder
{
    Database = databaseSessionInfo.PathAbsoluteToDatabase,
    Charset = "UTF8",
    Dialect = 3,
};

cs.DataSource = databaseSessionInfo.Hostname;
cs.Port = databaseSessionInfo.Port;
cs.ServerType = (FbServerType)databaseSessionInfo.Mode;
cs.Pooling = true;
cs.ConnectionLifeTime = 30;

if (databaseSessionInfo.UseCustomUserAccount)
{
    cs.UserID = databaseSessionInfo.Username;
    cs.Password = databaseSessionInfo.Password;
}
else
{
    cs.UserID = Constants.DB_DefaultUsername;
    cs.Password = Constants.DB_DefaultPassword;
}

かなり簡単です。当社のソフトウェアには、ユーザーがさまざまな接続プロパティを指定できる接続構成画面が含まれています。これらのプロパティは、上記のコードを使用して FbConnectionStringBuilder クラスに割り当てられます。

接続ビルダー クラスは、次の形式で接続文字列を出力します。

初期カタログ="P:\Source\database.fdb";文字セット=UTF8;方言=3;データ ソース=localhost;ポート番号=3050;サーバー タイプ=デフォルト;プーリング=True;接続有効期間=30;ユーザー ID=ユーザー;パスワード=例

ただし、このページ ( Firebird Connection Strings ) に示されているように、Firebird 接続文字列に関する文献では、異なる構造について説明されています。FbConnectionStringBuilder クラスは、Firebird の要件を満たす Firebird 接続文字列を構築するとしか思えません。

  1. FbConnectionStringBuilder クラスはホスト名を接続文字列に正しく追加しますか?
  2. サーバー上で Firebird サーバーが実行されています。クライアントにインストールする必要はないと思いますか?
  3. リモート サーバー接続をサポートするには、クライアントと共にどのライブラリをインストールする必要がありますか?
  4. 私たちはこれを正しく行っていますか?

アドバイスをいただければ幸いです。

4

1 に答える 1

0

質問への回答:

1) はい、そうします。

2) 正解です。クライアント ライブラリはネットワーク経由で接続されます。

3) ADO ライブラリを使用する場合は、FirebirdSql.Data.FirebirdClient.dll のみ

4) たぶん、これが役立つかどうかはわかりませんが、これが私が接続する方法です。

FbConnectionStringBuilder ret = new FbConnectionStringBuilder();
ret.DataSource = Host;
ret.Port = Port;
ret.Database = Database;
ret.UserID = User;
ret.Password = Password;
ret.Charset = CharacterSet; 
FbConnection ret = new FbConnection(connectionString);

興味深いことに、 StringBuilder に提供している絶対パスは何ですか? サーバーの絶対パスですか、それともある種のネットワークにマップされたドライブですか?

また、ファイアウォールの設定を確認し、ポート 3050 の受信を許可したと仮定します。

于 2013-09-11T03:16:02.057 に答える