3

我正在尝试将使用 Firebird v2.5 数据库的应用程序部署到客户端计算机。

我正在尝试使用最小安装,而不需要运行任何其他安装程序。据我所知,我需要做的就是将“FBClient.dll”复制到目标应用程序文件夹(其中包括 firebird 数据库文件)。我已经尝试过了,但它仍然报告无法找到正确的 .net 数据提供程序的错误。

例如

C:\Program Files (x86)\MyApp\myApp.exe 
C:\Program Files (x86)\MyApp\fbDatabase.fdb 
C:\Program Files (x86)\MyApp\fbclient.dll 

产生的错误是:

未能找到或加载已注册的 .Net Framework 数据提供程序。

还复制、重命名并包含 fbclient.dll 作为 fbembed.dll

我还尝试将一堆其他文件复制到 app 目录,以及将 fbclient.dll 放入 c:\、c:\windows、c:\windows\system 中。

我也尝试安装客户端安装,也没有任何乐趣。

有没有一种方法,我可以使用 firebird 数据库,而无需手动编辑 machine.config 文件或使用 gac 并经历我在开发机器上安装 firebird 所经历的地狱?我想要一个用户可以安装的应用程序,而不需要由开发人员安装。

请注意,我正在编写的应用程序是针对单机、单用户环境的,谁知道如何双击安装按钮,注意范围很广,如果需要做的不仅仅是双击安装然后按GO,只会感到无聊并按下取消,忘记它按钮。

我将文件“FirebirdSql.Data.FirebirdClient.dll”添加到应用程序文件夹中,我不再收到数据提供程序错误,而是收到以下内容

"Unable to complete network request to host \"DevMachine\"."

at FirebirdSql.Data.Client.Managed.Version10.GdsConnection.Connect()
at FirebirdSql.Data.FirebirdClient.ClientFactory.CreateManagedDatabase(FbConnectionString options)
at FirebirdSql.Data.FirebirdClient.ClientFactory.CreateDatabase(FbConnectionString options)
at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()

我正在尝试连接以下内容

string file = @"C:\Program Files (x86)\MyApp\Test.FDB;";
FbConnection con = new FbConnection("User=SYSDBA;" + "Password=masterkey;" + "Database=" + file + "DataSource=Dev-VS-W7VM;" + "Port3050;" + "Dialect=3;" + "Charset=ISO8859_1;");
        try
        {
            con.Open();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }

我已将 FirebirdSql.Data.FirebirdClient 包含在我的项目和安装文件夹 (..\MyApp) 中,谢谢。

4

4 回答 4

2

您必须获取一个zip并将 FirebirdSql.Data.FirebirdClient.dll 复制到 bin 文件夹。

我想知道您是如何编写没有文件(可能已安装.msi)的应用程序的:)

于 2012-02-02T20:30:51.370 回答
1

您需要安装 .net 提供程序 http://www.firebirdsql.org/en/net-provider/

于 2012-02-02T20:26:05.913 回答
1

数据库文件位于应用程序的 exe 模块旁边。因此,您需要在本地服务器或嵌入式服务器中运行才能处理数据。对于嵌入式服务器,最小的文件集是(相对于应用程序文件夹指定):

\UDF (folder with UDF needed if any)
\Intl (with contents from FB installation)
fbembed.dll
firebird.msg
ib_util.dll
icudt30.dll
icuin30.dll
icuuc30.dll
Microsoft.VC80.CRT.manifest
msvcp80.dll
msvcr80.dll

对于全尺寸服务器(即非嵌入式),文件列表将是:

\UDF (folder with UDF needed if any)
\Intl (with contents from FB installation)
fbserver.exe or fb_inet_server.exe
fbclient.dll
firebird.msg
ib_util.dll
icudt30.dll
icuin30.dll
icuuc30.dll
Microsoft.VC80.CRT.manifest
msvcp80.dll
msvcr80.dll
security2.fdb
firebird.conf   (if non default parameters used)

但是,您需要在应用程序启动之前为 FB 设置服务记录或将其作为应用程序启动。

可以使用instsvc.exe实用程序将 Firebird 安装为服务 。适当的命令:

  instsvc install -s -a
  instsvc start
于 2012-02-06T15:29:07.603 回答
0

此外,您应该注意两件事:

  1. FileName 必须是本地文件,而不是来自其他服务器的共享文件夹。

  2. 在文件名前附加 firebird 服务器 IP。如果您始终在 firebird 服务器中运行您的应用程序,或者您使用的是 embeded fbclient.dll,那么它应该像

    FbConnection con = new FbConnection("User=SYSDBA;" + "Password=masterkey;" + "Database=localhost:" + file + "DataSource=Dev-VS-W7VM;" + "Port3050;" + "Dialect=3; " + "字符集=ISO8859_1;");

某些fbclient.dll版本将允许您不添加 localhost 并仍然连接本地文件,或使用\\servername\c:\filenameformat 而不是localhost:c:\filename,但它已被弃用并且不再应该工作(并且可以根据 Windows 版本工作)。

于 2012-08-09T16:03:04.667 回答