2011-06-18 9 views
8

Mamy produkt C# oparty na standardzie dot net 2.0, który wykorzystuje Mysql do przechowywania danych. Kiedy instalujemy złącze mysql 6.3.6 na maszynie XP/Win 7, jesteśmy w stanie połączyć się z bazą danych z kodu C# bez żadnych problemów. Ale napotykamy problem podczas łączenia się z bazą danych mysql, gdy złącze mysql nie jest faktycznie zainstalowane na komputerze, ale jest obecne tylko w tym samym katalogu, co plik wykonywalny. Nie chcemy instalować konektora na każdej maszynie, na której chcemy, aby produkt działał. Chcemy, aby dll connectory był używany bezpośrednio, ponieważ używamy dowolnego dll 3rd party (np. Logger) w naszym kodzie.Jak połączyć się z MySQL za pomocą złącza mysql przez C# bez faktycznego instalowania złącza

Nawet jeśli skopiujemy plik mysql.data.dll do tego samego katalogu, w którym jest zainstalowany program exe, będzie on kompilował, ale nie łączy się z bazą danych.

Błąd podana jest

Nie można znaleźć żądanego Provider .Net Framework danych. To nie może być zainstalowany blockquote

Informacje techniczne:

  • MySQL 5.0
  • C#
  • framework 2.0
  • MySQL Connector 6.3.6 (sam problem
  • Dot Net występuje z ver 6.0 .3 złącza sql)
  • Win XP/Win 7

Kiedy używamy ASP.NET, możemy określić tag podany poniżej do web.config i możemy połączyć się z bazą danych mysql bezpośrednio poprzez umieszczenie dll do katalogu 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> 

Dlaczego nie możemy zrobić tego samego w C# dla aplikacji serwera klienta w środowisku graficznym.

Każda pomoc jest naprawdę doceniana.

kołpak

+0

Czy umieścisz tę samą konfigurację w aplikacji "app.config" swojej aplikacji komputerowej? – Jon

+0

Nie ustawiliśmy tej samej konfiguracji w pliku app.config. Tag DBProviderFactories wydaje się być nieprawidłowy w app.config – Kalpak

+0

To pytanie zaoszczędziłoby mi kilka godzin bólu głowy miesiąc temu. Cała instalacja .Net Connectora (z tego co rozumiem) dodaje wpis "Dostawca danych MySQL" do pliku machine.config. Nie użyłem instalatora i po prostu dodałem wpis do mojej konfiguracji. Byłem wyłączony i uruchomiony przy użyciu .Net ProviderFactories. – IAbstract

Odpowiedz

2

Spróbuj czegoś takiego (nie sprawdziłem żadnych możliwych wersji/konfiguracji, ale działa obecnie na moim Vista x64 dla MySql niektóre 5.5 ... i .net złącze 6.4.3.0 - przy użyciu mysql.data.dll dla v4 z pobrania .net/mono).

Upewnij się, że poniższy plik mysql.data.dll znajduje się w bieżącym katalogu.

 
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

Cześć, zadziałało to dla mnie. Czy korzystanie z tej metody jest wadą, niż instalowanie złącza, np. Pod względem kodowania, wydajności lub bezpieczeństwa itp. – Kalpak

+0

Nie ma żadnej wady w stosunku do tej metody, z wyjątkiem duplikowania pliku mysql.data.dll dla wszystkich aplikacji, które go potrzebują. Więc jeśli masz tylko jedną, to jest idealnie. W moim przypadku jest ich kilka, więc doszedłem do umieszczenia mysql assemblies w GAC i modyfikacji pliku machine.config we wszystkich odpowiednich miejscach, więc mogłem po prostu użyć DbProviderFactories.GetFactory ("string tutaj dałem w configs"), aby uzyskać fabrykę i przejść od tam. Po prostu lubię korzystać z tych bibliotek dll z dystrybucji .net/mono, w wyniku czego ręcznie trzeba ustawić rzeczy. –

0

Ten page nie wchodzić wiele szczegółów na temat uzależnienia Framework, ale podejrzewam, że złącze Mysql może być uzależnione od nowszej wersji .NET Framework.

Innymi słowy, twoja aplikacja używa Framework 2, ale jakiej wersji używa konektor Mysql?

+0

Jest kompatybilny zarówno z v2, jak i v4 z dot net. – Kalpak

+0

6.3. * Jest zgodny z ADO.NET w wersji 2.x +, .NET Framework w wersji 2.x +, 4.x + w przypadku wsparcia dla VS 2010 i serwerem MySQL w wersji 5.0, 5.1, 5.4, 5.5 zgodnie z witryną mysql – Kalpak

+0

Mam na myśli link http://dev.mysql.com/doc/refman/5.0/en/connector-net-versions.html – Kalpak

0

Ten wpis:

<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> 

... musi być napisany w swojej machine.config.

wierzę domyślna ścieżka powinna być coś takiego:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ config

Aktualizacja
powinien być w stanie to MySQL .NET instalatora/Connector jako część pakietu instalacyjnego. Wpis w pliku machine.config jest wymagany z tych samych powodów, dla których informacje są wymagane w pliku web.config.

+0

Ludzie, którzy instalują oprogramowanie, nie są technicznie sprawni. Więc nie możemy dać im, aby dodać ten wpis ręcznie. Czy ten wpis jest możliwy przez instalator NSIS. – Kalpak

+0

Dlaczego ten wpis jest wymagany w pierwszej kolejności byłby moim pytaniem – Kalpak

Powiązane problemy