.NET & MySQL

8 отговора 555 прегледа
#1

.NET & MySQL

я кажете има ли някъв начин да са вържат ......

Отговор
в отговор на AZZZ #2

Re: .NET & MySQL

има при това не само един.
1. odbc.net
2. bytefx.mysql
3. mysqlprovidercs
4. corlab.mysql
степенувани по възможности, с изключение на последния, който е може би най-добър, но платен

Отговор
в отговор на AZZZ #3

Re: .NET & MySQL

Можеш ли да дадеш някви примери как става манията демек как са ползват щото аз си качих .NET преди 2 дена и съм много бос...

Отговор
в отговор на AZZZ #4

Re: .NET & MySQL

Всичките са си нормални адо.нет провайдъри и се ползват точно както е дадено в документациятя и всички примери.
Трябва да прочетещ малко за адо.нет защото темата е сравнително обширна за един пост

Накратко процедурата е горе-долу следната ( естествено зависи какво точно ще правиш)
xxxConnection се създава с съотвтния Connection String
xxxCommand го закачащ за конкшъна и му слагаш query
може да направиш xxxDataAdapter който може да съьдава DataSet
може и направо от xxxCommand да вземеш xxxDataReader

навсякъде в примерите става въпрос за
SqlConnection, SqlCommand, SqlDataAdapter, SqlDataReader,
които са класовете за Sql Server
има и класове за ОлеДб
OleDbConnection, OleDbCommand... също се предлага стандартно
OdbcConnection, OdbcCommand.. идват с пакета одбц.нет
MySqlConnection, MySqlCommand.. са в ByteFx.MySql, Corlab.MySql
MySQLConnection, MySQLCommand... са в MySQLProviderCS

ето и линкове за доунлоад
odbc
sf.net/projects/mysqlnet - ByteFx.MySql
[линк]

Отговор
в отговор на AZZZ #5

Re: .NET & MySQL

Пробвай и MySQLDriverCS [линк] - безплатен е. През odbc също става но е много по-бавно.

If you don't care where you are going any road will get you there
Отговор
в отговор на antipop #6

Re: .NET & MySQL

да де аз него имах пред вид с MySQLProviderCS бързах и не можах да намеря точния линк.
искам да добава още няколко думи, защото и аз ползвам MySql и прекарах известно време в тестване и проучвание.
Внимавайте с MySQLDriverCS и ByteFX.Data.MySqlClient
и 2та са опен сорс проекти и в момента не са пълни имплементации, освен това има доста грешки.
бегъл поглед върху сорса им ( нали са опен сорс) показва:

0. И аз си мислех, че nativ драйвърите са по-бързи от odbc.net, но моите тестове показаха точно обратното. Не само, че в сегашните им версии не са, но odbc.net има ОГРОМНО предимство (в пъти ) в бързината. На пръв поглед е странно, но си има и логично обяснение, което ще опиша
1. MySQLDriverCS просто ползва ц апито, а ByteFX.Data.MySqlClient сокети. Т.е. MySQLDriverCS се води nativ само за заблуда на врага, разликарта м/у викането на nativ MySql функция, пред odbc функция не е особено голяма.
2. В MySQLDriverCS има недокументирани подводни камъни, например MySQLCommand.ExecuteReader(CommandBehavior) изобщо не е имплементиран метод и ако извикаш MySQLCommand.ExecuteReader(CommandBehavior.CloseConnection) очаквайки конкъшна да се затвори заедно с рийдъра, това естествено не става, както би трябвало и след няколко часа имаш няколкостотин отворени конекшъни
Като погледнах в сорса - му диреткно прехвърляне на топката към метода без параметър, поне да го бяха докуменирали.
3. Нито един от 2та не е годен за параметризирани заявки, понякога става, понякога не. Специално при MySQLDriverCS опитът за имплементирането на тази част от спецификацията е доста първобитен.
4. ByteFX.Data.MySqlClient отвреме на време просто си гърми, защото изпраща грешен нетуърк пакет.

5.MySQLDriverCS са посочили Development Status: 6 - Mature, което е бурен смях и прах в очите
ByteFX.Data.MySqlClient се води Beta, което по-близо до истината

Драйверът на crlab.com е добър и единствен, който може да се сравнява горе-долу по бързина с odbc.net, въпреки че и той при мен беше (малко) по-бавен.

Поради гореописаните причини, съвсем разбираемо в момента аз ползвам odbc.net За него поне е абсолютно сигурно че няма дупки в имплементацията и като викаш нещо знаеш какво ще стане.
Надявам се някой от опен сорс проектите да поузрее, да бъде имплементиран като хората и съвсем естевено да стане и по-бърз, както подгожда на nativ
драйвер за да мигрирам към него.
Като цяло ByteFX.Data.MySqlClient е в доста по-активно развитие, от последната версия на MySQLDriverCS , вече има 2 нови на ByteFX.Data.MySqlClient
Целите в развитието на ByteFX.Data.MySqlClient с по-големи ( той и сега си е доста по-напред с материала, няма да описвам подробно и без това стана роман ) и e официалният MySQL драйвер на проекта моно. Възлагам надеждите си на него.

Ако можех да ползвам Sql Server, щях да го направя. Иначе по-бързата и удобна MySql всъщност става камък на шията заради липсата ( към момента ) на подходящ драйвер, за разлика от Sql Server драйвъра, който предлага милиони предимства.

Всичко горенаписано са си лично мои наблюдения и заключения и не налагам на никой мнението си.

Отговор
в отговор на s_dimi #7

Re: .NET & MySQL

Интересни резултати. В единия вариант имаш Приложение->Native Driver->libmysql.dll->DB, а в другия Прлижение->ODBC.NET->MyODBC->libmysql.dll->DB, което си е още едно ниво и би трябвало да забави допълнително. Ако искаш кажи как си тествал, да сравня при мен как ще мине :) Сървъра, на който тествам е с 1 GB памет, P4 2.4 Ghz, а работната станция е Athlon 2.1 Ghz с 512 MB., .Net Framework 1.1.

If you don't care where you are going any road will get you there
Отговор
в отговор на antipop #8

Re: .NET & MySQL

първо искам да кажа не претиндирам за изчерпателност
ето сорса на тестовата програмка

using System;
using System.Data;
using ByteFX.Data.MySqlClient;
using MySQLDriverCS;
using Microsoft.Data.Odbc;
using System.Data.OleDb;
//using CoreLab.MySql;
namespace ProvidersTest
{

class DriversTest
{
const string ByteFxString = "***";

const string ODBCSTRING ="***";

[STAThread]
static void Main(string[] args)
{
DriversTest test = new DriversTest();
if(args.Length == 1){
try {
if((test.iterations = Convert.ToInt32(args[0])) <= 0) {
throw new Exception();
}
} catch {
test.Usage();
}
}
test.Run();
}
private delegate void TestMethods(int iterations);
private TestMethods AllTests;
private int iterations = 100;
private void Run() {
AllTests += new TestMethods(this.MySQLTest);
AllTests += new TestMethods(this.OdbcTest);
AllTests += new TestMethods(this.ByteFXTest);
Console.WriteLine("Results for {0} iterations:", iterations);
AllTests(iterations);
}
void Usage(){
Console.WriteLine("usage: ProvidersTest number\ndefault is:" + iterations);
}
static string query = "SELECT id, email, Passwort, Nachname, Vorname, Titel, Strasse, PLZ FROM personen";
static IDbConnection connection;
static IDbCommand cmd;
static IDataReader reader;

void MySQLTest(int iterations)
{
DateTime begin = DateTime.Now;
for(int i = 0; i < iterations;i ++)
{

try {
connection = new MySQLConnection(
new MySQLConnectionString(
"***","***","**","***").AsString);
connection.Open();
cmd = new MySQLCommand();
cmd.Connection = connection;
cmd.CommandText = query;
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read()) {
}

} catch(Exception e) {
Console.WriteLine(e.Message + "\n"+e.StackTrace);
} finally{
reader.Close();
connection.Close();
}
}
DateTime end = DateTime.Now;
TimeSpan result = end - begin;
Console.WriteLine("MySQLDriverCS:" +result.Minutes + ":" + result.Seconds + ":" + result.Milliseconds);
}
void OdbcTest(int iterations)
{
DateTime begin = DateTime.Now;
for(int i = 0; i < iterations;i ++)
{
try
{
connection = new OdbcConnection(ODBCSTRING);
connection.Open();
cmd = new OdbcCommand();
cmd.Connection = connection;
cmd.CommandText = query;
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read()){

}
} catch(Exception e) {
Console.WriteLine(e.Message + "\n"+e.StackTrace);
} finally {
reader.Close();
connection.Close();
}
}
DateTime end = DateTime.Now;
TimeSpan result = end - begin;
Console.WriteLine("ODBC :"+result.Minutes + ":" + result.Seconds + ":" + result.Milliseconds);
}

/*
void ByteFXTest(int iterations){
DateTime begin = DateTime.Now;
for(int i = 0; i < iterations;i ++) {
try {
connection = new MySqlConnection(ODBCSTRING);
connection.Open();
cmd = new MySqlCommand();
cmd.Connection = connection;
cmd.CommandText = query;
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read()){

}
} catch(Exception e) {
Console.WriteLine(e.Message + "\n"+e.StackTrace);
} finally {
reader.Close();
connection.Close();
}
}
DateTime end = DateTime.Now;
TimeSpan result = end - begin;
Console.WriteLine("ByteFX:" + result.Minutes + ":" + result.Seconds + ":" + result.Milliseconds);
}
*/

}
}




така ето и резултатите в къщи - локална mysql 4.0.15, атлон 2000, 256 ддр рам,
мисля че на сървъра няма да са различни като съотношение, затова не съм ги пускал

Results for 10 iterations:
MySQLDriverCS:0:1:328
ODBC :0:0:265

Results for 100 iterations:
MySQLDriverCS:0:11:593
ODBC :0:1:921


не поствам резултатите на другите 2ма "участници" защото бързам, но и 2та бяха по-бавни от одбц, най-добре е платеният CoreLab.MySql

Някои изводи:
1. разликата м/у нативна и одбц функция, принципно не е много голяма и в случая не играе решаваща роля.
основното, е че MySQLDriverCS е неузрял и не ползва оптимално апито. Дори и когато това стане
и изпревари одбц, разликата ще е пренебрежимо малка. Дали обаче изобщо някога ще стане по-добър от
одбц ще видим.
Основно развитие е момента търпи ByteFX.Data.MySqlClient, който от своя страна не ползва libmysql.dll и по
твоята схема картинката е
Прлижение->Native Driver->DB което означава, че има потенциал да се оптимизира, дано.

2. Дори и разликата м/у Native драйверите и одбц да беше същата в полза на Native, аз лично пак нямаше да ги ползвам,
защото в момента те са пълни c мини, дупки и неизвестности в имплементациите си и просто не може да се разчита на тях.
Какво значение има бързината, като заявката изобщо не може да се изпълни заради грешка в драйвера?
Когато почнат да се държат стабилно и изпълняват спецификациите и евентуално станат по-бързи
съм готов веднага да мигрирам.

ако някой получи други резултати, има допълнения към този тест или предложи друг
ще ми е интересно да прочета нещо по темата

Отговор
в отговор на antipop #9

Нови версии, нови резултати

Има нови версии на всички провайдъри освен одбц.net,
който променят ситузцията в известна степен
така че ето новите резултати от теста


Results for 10 iterations:
ODBC 1.0.4030.0, 1/30/2002 :0:0:250
MySqlDirect.NET version 2.00 :0:0:250
MySQLDriverCS Release 3.0.13 February 25, 2004 :0:1:343
ByteFX Version 0.76 March 11, 2004 :0:0:390

Results for 100 iterations:
ODBC 1.0.4030.0, 1/30/2002 :0:2:31
MySqlDirect.NET version 2.00 :0:1:703
MySQLDriverCS:0 Release 3.0.13 February 25, 2004 :12:484
ByteFX Version 0.76 March 11, 2004 :0:3:562

Платеният MySQLDirect.NET вече изпреварва одбц, в новата си версия вече и той ползва
директно mysql ротокола, което му носи и предимството.

Който иска надежден и бърз nativ provider трябва да се бръкне 100$ за MySQLDirect.NET
Останалите да се ориентират към ByteFX, който пуска нови версии всеки месец и всяка следваща
е по-добра.

ODBC.NET
MySqlDirect.NET
MySQLDriverCS
ByteFX

Отговор