2011-10-27 31 views
2

我們有一個程序,用戶可以在其中指定其數據庫連接參數。通常的嫌疑人包括主機,端口,用戶名,密碼和表名。我們使用NHibernate連接到數據庫。我們希望能夠使用NHibernate構建配置,然後在繼續進行其他操作之前測試連接參數;通知用戶失敗。使用NHibernate測試連接參數

這是可能通過NHibernate做到的,還是需要使用每種數據庫類型我們支持特定的驅動程序併爲每種類型創建一個自定義的TestConnection()方法?

回答

0

配置NHibernate的,你有兩個選擇:

  1. 設置,當你正在構建的會話工廠的方言。這將爲Nhibernate的ADO和其他配置值分配合理的默認值。
  2. 手動設置配置值。

也就是說,在某些時候,您需要配置Nhibernate以使用適合要與之通話的數據庫的驅動程序。這意味着您需要能夠構建不同類型的會話工廠(您支持的數據庫類型)。爲此,您不僅需要「主機,端口,用戶名,密碼和表名」。你需要知道數據庫類型(方言)。

如果您打算只嘗試連接數據庫與可用的每個驅動程序,但不知道數據庫類型是什麼,那麼當數據庫和方言不匹配時可能會遇到問題。想象一下你在SqlServer2005機器上使用SqlServer2008方言。方言的差異可能會導致您正在使用的特定SqlServer2008功能顯然無法正常工作。而且,如果你不會在所有代碼中堅持使用基本的SQL,那麼你可能會生成Sql,例如在PostgreSql中,但不在SqlServer(Think序列等)中。

要了解更多關於配置NHibernate的閱讀:

  1. Chapter 3: Session Factory Configuration。特別是3.3,3.4,3.5節討論配置參數。

最後一點,Nhibernate支持多個數據庫。但是,對於依賴數據庫特定結構的複雜領域層,您的代碼不會。

+0

我得到了很多東西 - 我在找的是一種說「好的,這裏是主機/端口/用戶名/密碼d/databasename,讓我們確保我們可以在繼續「真正地連接之前成功連接。當這些值有效時,我已經得到了所有驅動程序配置的正常工作。我試圖看看是否可以使用nhibernate來測試這些參數的有效性。更有意義? – MedTechDeveloper

1

我意識到這是一箇舊帖子 - 但我想一個問題的答案永遠不會傷害。

我不認爲有明確告訴NHibernate測試連接字符串的方法。但是,當您實例化SessionFactory時,它將嘗試連接到數據庫。你可以將你的SessionFactory創建封裝在Try/Catch中,並以這種方式處理錯誤。

我使用流利NHibernate,但我敢肯定下面的例子仍然會解釋這種情況。

Dim sf as SessionFactory 
Try 
    sf = CreateSessionFactory() 
Catch ex as FluentNHibernate.Cfg.FluentConfigurationException 
    Messagebox.Show(ex.InnerException.Message) 
End Try 

ex.InnerException.Message包含實際的錯誤,並會告訴你,如果:

  • 連接字符串無效
  • 服務器無法找到
  • 的用戶名/密碼無法被驗證