2011-06-18 68 views
8

我們有一個基於dot net 2.0的C#產品,它使用Mysql作爲數據存儲。當我們在XP/Win 7機器上安裝mysql連接器6.3.6時,我們能夠從C#代碼連接到數據庫,沒有任何問題。但是,當mysql連接器實際上未安裝在機器上時,我們在連接到mysql數據庫時遇到了問題,但它只與可執行文件存在於同一目錄中。我們不希望在我們希望產品運行的每臺機器上安裝連接器。我們希望直接使用connectory dll,因爲我們在代碼中使用任何第三方dll(例如記錄器)。如何通過C#使用mysql連接器連接到mysql而不實際安裝連接器

即使我們將mysql.data.dll複製到安裝exe的相同目錄中,它也會生成但不連接到數據庫。

給出的錯誤是

無法找到所需的.NET Framework數據提供。它可能沒有安裝 大段引用

技術信息:

  • 用的Mysql 6.0版本發生5.0
  • C#
  • 點NET框架2.0
  • MySQL連接6.3.6(同樣的問題.3的SQL連接器)
  • Win XP/Win 7

當我們使用ASP.Net,我們可以指定下面給出到web.config中的標籤,我們可以直接通過將DLL到bin目錄


<system.data> 
    <DbProviderFactories> 
    <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.0.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 
連接到MySQL數據庫

爲什麼我們不能在C#中爲桌面環境中的客戶端服務器應用程序做同樣的事情。

任何幫助真的很感激。

黑氈帽

+0

是否將相同的配置放入桌面應用程序的'app.config'中? – Jon

+0

我們沒有把相同的配置放在app.config中。標籤DBProviderFactories在app.config中似乎無效 – Kalpak

+0

這個問題在一個月前爲我節省了幾個小時的麻煩。所有的.Net連接器安裝(根據我的理解)都是將「MySQL Data Provider」條目添加到machine.config中。我沒有使用安裝程序,只是將條目添加到我的配置中。我使用.Net ProviderFactories關閉並運行。 – IAbstract

回答

2

嘗試類似這樣的操作(我沒有檢查任何可能的版本/配置,但它可以在我的Vista x64上運行MySql 5.5和.net連接器6.4.3.0 - 使用mysql.data.dll v4從.net/mono下載)。

確保下面引用的mysql.data.dll程序集位於當前目錄中。

 
using(var dt = new DataTable()) { 
    dt.Columns.Add("Name"); 
    dt.Columns.Add("Description"); 
    dt.Columns.Add("InvariantName"); 
    dt.Columns.Add("AssemblyQualifiedName"); 
    dt.Rows.Add("Mysql something", 
     "mysql more", 
     "mysqlClient", 
     "MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"); 

    var f = DbProviderFactories.GetFactory(dt.Rows[0]); 
    using(var conn = f.CreateConnection()) { 
     conn.ConnectionString = "your string here"; 
     conn.Open(); 
     // and do your work here. 
     Console.WriteLine(conn); 
    } 
} 
+0

嗨,它已經爲我工作。使用這種方法比安裝連接器有什麼缺點,比如在編碼,性能或安全等方面。 – Kalpak

+0

除了需要爲所有需要它的應用程序複製mysql.data.dll之外,這種方法沒有缺點。所以如果你只有一個,那麼這非常好。在我的情況下,有幾個,所以我最終把GAC中的mysql程序集和修改machine.config的所有正確的地方,所以我可以只使用DbProviderFactories.GetFactory(「我在配置文件中給出的字符串」)獲取工廠,並從那裏。我只是喜歡使用.net/mono發行版中的那些dll,因此必須手動設置。 –

0

page不進入有關.NET框架依賴太多的細節,但我懷疑MySQL連接可能是依賴於.NET Framework的版本。

換句話說,您的應用程序使用Framework 2,但是Mysql連接器使用什麼版本?

+0

它兼容v2以及點網的v4。 – Kalpak

+0

6.3。*與ADO.NET版本2.x +,.NET Framework版本2.x +兼容,4.x +支持VS 2010,MySQL服務器版本5.0,5.1,5.4,5.5根據mysql網站 – Kalpak

+0

我指的是鏈接http://dev.mysql.com/doc/refman/5.0/en/connector-net-versions.html – Kalpak

0

此項:

<system.data> 
    <DbProviderFactories> 
    <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.0.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 

...需要寫入到您的machine.config。

我相信默認的路徑應該是這樣的:

C:\ WINDOWS \ Microsoft.NET \框架\ V2.0。50727 \ CONFIG

更新
你應該能夠包括MySQL的淨/連接器的安裝程序爲您安裝包的一部分。 machine.config中的條目是必需的,原因與web.config中需要的信息相同。

+0

安裝軟件的人在技術上聽起來不太合理。所以我們不能讓他們手動添加這個條目。是否可以通過NSIS安裝程序進行輸入。 – Kalpak

+0

爲什麼這個項目是首先要求的將是我的問題 – Kalpak