2012-02-02 145 views
3

我正在嘗試將使用Firebird v2.5數據庫的應用程序部署到客戶機。Firebird客戶端安裝

我想使用最低安裝,而不需要運行任何其他安裝程序。從我收集的內容中,我需要做的就是將「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的地獄?我想要一個用戶可以安裝的應用程序,而不要求它由開發人員安裝。

請注意,我正在編寫的應用程序是針對單個機器,單用戶環境,誰知道如何雙擊安裝按鈕,注意跨越一個gnat,如果需要做雙擊以上安裝然後按下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的) 預先感謝您。

+0

詳細有所欠缺這裏。當然你可以使用複製/粘貼來提供準確的錯誤信息。如果你不能使用複製/粘貼,然後複製它vertbatim。 – 2012-02-02 19:07:46

+0

如果您直接使用客戶端API,將FBClient.dll複製到您的應用程序文件夾中只是一個解決方案。如果您通過C#使用它並使用Firebird .NET數據提供程序,則仍需安裝該數據提供程序並將其註冊爲可用程序集。 (其中,順便說一句,正是錯誤消息告訴你 - 的.NET數據提供程序無法找到或加載) – 2012-02-02 19:33:52

+0

我想辦法解決使用Firebird數據庫,而無需使用GAC或亂用機.config文件在目標機器上。一個獨立的解決方案是必需的,一個簡單的安裝程序,任何插孔可以安裝。 – Craig 2012-02-02 19:54:30

回答

2

你必須虎視眈眈一個zip和FirebirdSql.Data.FirebirdClient.dll複製到bin文件夾。

我不知道你怎麼寫你的應用程序,它不工作的文件(可能是安裝的.msi):)

+0

我正在取得進展,我沒有想到隨應用程序一起復制這個文件。沒有數據提供者錯誤,只是因爲某種原因現在不能連接,需要進一步調查爲什麼。 – Craig 2012-02-02 21:08:51

+0

確保您的項目引用此dll。你的代碼如何與db通信?你怎麼可能編譯你的代碼,但你沒有這個.dll? – IamDeveloper 2012-02-03 08:54:16

+0

字符串文件= @ 「C:\ Test.FDB;」; FbConnection CON =新FbConnection( 「用戶= SYSDBA;」 + 「密碼= masterkey;」 + 「數據庫=」 +文件+ 「數據源= DevMachine;」 +「 Port3050;「+」Dialect = 3;「+」Charset = ISO8859_1;「); 嘗試 { con.Open(); } 趕上(例外五) { MessageBox.Show(e.ToString()); } – Craig 2012-02-03 17:00:31

1

數據庫文件駐留旁邊的應用程序的EXE模塊。因此,您需要在本地服務器運行或嵌入式服務器上使用數據。對於嵌入式服務器的一組文件被最小(相對specifed到應用程序文件夾):要滿刻度服務器

\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 或啓動您的應用程序開始之前的應用程序。

安裝Firebird作爲服務可以使用 instsvc.exe實用程序。相應的命令:

instsvc install -s -a 
    instsvc start 
+0

我將所有這些文件都放在應用程序目錄中。我不想運行firebird作爲服務,既不將它安裝爲服務器。 – Craig 2012-02-08 17:30:07

0

你也應該採取的兩件事情護理:

  1. 文件名必須是本地文件,而不是從另一臺服務器的共享文件夾。

  2. 追加在文件名之前火鳥服務器IP。如果你總是在firebird服務器上運行你的應用程序,或者你正在使用嵌入fbclient.dll,那麼它應該像

    FbConnection con = new FbConnection(「User = SYSDBA;」+「Password = masterkey;」+「Database = localhost:「+ file +」DataSource = Dev-VS-W7VM;「+」Port3050;「+」Dialect = 3;「+」Charset = ISO8859_1;「);

一些fbclient.dll版本將允許你不添加本地主機,還是連接的本地文件,或者使用\\servername\c:\filename格式而不是localhost:c:\filename,但它已被棄用,不應該再工作(並可以根據Windows版本運行)。