Avatar billede neo3000 Nybegynder
06. august 2008 - 18:59 Der er 22 kommentarer og
1 løsning

C#, MySQL og åbne forbindelser

Hey alle :)

Jeg er igang med at lave en C# Applikation i VS2005..

Lige pt. har jeg en MS SQL database kørende på min egen pc, som jeg naturligvis bruger..

Problemet er at jeg skal distribuere programmet, og dermed skal jeg bruge en database til det..

MS SQL databaser er jævnt dyre at få hostet, hvorimod jeg har en masse MySQL jeg bare kan tage af..

Er det muligt for mig at få lavet forbindelse til min MySQL server gennem f.eks. System.Data.Odbc; eller lignende uden jeg skal til at lave en installer som installere yderligere filer til brugerens pc?

Desuden skal det jo være muligt at jeg kan forbinde uden at serverens adresse er "localhost" - men det er jo hovedsageligt hostens opgave at sørge for :P

Håber nogen kan hjælpe mig, og evt. give mig en kode der f.eks. bare åbner forbindelsen.. Jeg har kigget på det her:
http://www.udvikleren.dk/DotNet/Article.aspx/214/

Men såvidt jeg forstår, kræver det jeg får samtlige brugere til at installere en form for ODBC driver, eller er det forkert antaget?
Avatar billede arne_v Ekspert
06. august 2008 - 19:24 #1
Du kan bruge ODBC. Det kraever at MySQL ODBC driver er installeret paa
maskinen hvor dit program koeres. For web app er den sikkert installeret. For
en desktop app er det et stort problem.

Men men men. MySQL har ogsaa lavet en ADO.NET provider. Der bruger du saa MySqlConnection,
MySqlCommand etc.. Og du skal bare have MySql.Data.dll i bin dir for en web app
og i samme dir som din EXE for en desktop app. Ingen installation.
Avatar billede arne_v Ekspert
06. august 2008 - 19:25 #2
Og saa er den ioevrigt langt bedre end ODBC !

Ikke mindst me dhensyn til at faa brugbare fejlmeddelelser ud.
Avatar billede neo3000 Nybegynder
06. august 2008 - 19:44 #3
Uhh den der ADO.NET provider lyder jo som det jeg skal bruge..

Og i stedet for at skrive SqlConnection sætter man bare "My" foran?

Kan du give mig et link til noget beskrivelse af ADO.NET? Og download link.. Ved godt jeg kan google det :P Men der kommer jo en milliard svar på det..
Avatar billede arne_v Ekspert
06. august 2008 - 20:12 #4
Avatar billede arne_v Ekspert
06. august 2008 - 20:13 #5
ADO.NET provider er en generisk term for en .NET database komponent.

.NET kommer med SQLServer, OLE DB, ODBC og Oracle.

Men andre leverer ogsaa ADO.NET providere: IBM DB2, Oracle, MySQL, PostgreSQL, FireBird etc.
Avatar billede neo3000 Nybegynder
06. august 2008 - 20:22 #6
Nu linker du godt nok til version 5.1 af connectoren, skal jeg tage den, eller den nyere 5.2 version?
Avatar billede arne_v Ekspert
06. august 2008 - 20:39 #7
Det var rent tilfaeldigt. Jeg tror godt at du kan bruge 5.2. Jeg er stadig paa 5.0.

NB: check licensen. Provideren er dual licenseret GPL og commercial. Nu sagde du jo
distribuere i spoergsmaalet. Hvis du distribuerer udenfor din "organisation" og din
kode ikke er open source, saa er der et licens problem med at hente provideren gratis
under GPL licens.
Avatar billede neo3000 Nybegynder
06. august 2008 - 21:00 #8
Ja det kan jeg se..

Det er ikke open source da der jo er passwords osv. til databasen =/

Det bliver dog Freeware, men stadigvæk overholder det jo ikke GPL..

Så enten skal jeg skrive til dem, ellers skal jeg finde noget andet - eller hvordan?
Avatar billede arne_v Ekspert
06. august 2008 - 21:04 #9
Der er flere muligheder:

1)  betal dem for en commercial license
2)  koeb en anden kommerciel connetcor for .NET
3)  brug OdbcConnector
4)  lav det open source og flyt password ud af applikationen ud i en konfig fil

#4 lyder mest tiltalende fordi der er ingen sikkerhed i at have password
i din EXE fil !

Folk tager din EXE fil og smider den gennem en decompiler og har nydelig C# kode - de
mangler kommentarer og navne paa lokale variable, men database password er nem at spotte !!
Avatar billede neo3000 Nybegynder
06. august 2008 - 21:15 #10
Ja det er rigtigt.. Jeg tror lige jeg skal prøve med option #4..

Det eneste jeg skulle gøre for at forbinde var stort set bare at skrive "My" foran, såvidt jeg lige kunne se jo :)
Avatar billede arne_v Ekspert
06. august 2008 - 21:20 #11
Ja. Stort set.

I nogle tilfaelde er der forskel i SQL syntaxen.

Og MySQL bruger ?xx ikke @xx for parametre.
Avatar billede neo3000 Nybegynder
06. august 2008 - 21:30 #12
Ja okay, det er ikke det store..

Nu spørger jeg så lige om noget andet.. Har du et forslag til hvordan jeg kunne lave sådan en config fil, så den også er 100% sikker?

Evt. ved at kryptere hele dokumentet, og så åbne den med en nøgle som er lavet til også? Eller har du bedre idéer?
Avatar billede arne_v Ekspert
06. august 2008 - 21:40 #13
Den kan ikke laves sikker. Du kan oprette hver bruger som bruger i din database
og restricte deres adgang i database.
Avatar billede neo3000 Nybegynder
06. august 2008 - 21:57 #14
Eftersom jeg ikke ved hvor mange brugere jeg får, er det umuligt.. Det kan være alt fra 15 til 10.000 brugere..

Som jeg ser det er bedste option at kryptere det med en tilfældig key, og gøre det samme med passworded.. Og så kan jeg gå ud fra folk ikke er syge i hovedet og synes det er vildt fedt.. Og hvis det endelig er, så er det ikke vildt følsomme data der er i databasen, da det blot er data fra et browser spil (OGame)
Avatar billede arne_v Ekspert
07. august 2008 - 04:21 #15
Har du overvejet en web service løsning ?

desktop app-------(web service kald)---------web service hosted på ASP.NET web hotel------(ADO.NET)------din MySQL database

så kan de kun lave de operationer som din web service exposer og dit database password
ligger rimeligt sikkert på web hotellet.
Avatar billede neo3000 Nybegynder
07. august 2008 - 17:51 #16
Jeg har ikke prøvet at lave web service applikationer før.. Men det lyder umiddelbart som en god idé :)
Avatar billede arne_v Ekspert
07. august 2008 - 18:01 #17
Det er ikke svaert !
Avatar billede neo3000 Nybegynder
07. august 2008 - 20:45 #18
Sidder lige og prøver at få forbindelse her i tordenvejret..

Jeg kan dog imidlertid ikke få forbindelse synes jeg ikke.. Jeg bruger følgende kode:

            MySql.Data.MySqlClient.MySqlConnection conn;
            string myConnectionString;

            myConnectionString = "server=*server*;database=*dbase*;uid=*user*;password=*pass*;";
            try
            {
                conn = new MySql.Data.MySqlClient.MySqlConnection();
                conn.ConnectionString = myConnectionString;
                conn.Open();
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                Console.Write(ex.Message);
                Console.Read();
            }

Jeg får følgende ex: "Unable to connect to any of the MySQL hosts."

Hvad gør jeg lige forkert?
Avatar billede arne_v Ekspert
07. august 2008 - 20:49 #19
proev:

new MySqlConnection("Data Source=*server*;Database=*dbase*;User Id=*user*;Password=*pass*");
Avatar billede neo3000 Nybegynder
07. august 2008 - 21:17 #20
Får samme fejlmeddelelse.. Men kan være det er fordi jeg forbinder til en server som ikke er localhost - Har ikke lige fået afklaret med dem om den er åben til det..

Er det der den korrekte måde at lave forbindelses-strengen på?

Og forresten.. Jeg har set de fleste bruger 5.1, og det er også den som er default på siden - Skal jeg prøve med den i stedet for?
Avatar billede arne_v Ekspert
08. august 2008 - 03:16 #21
MySQL bruger port 3306.

Ja - det er den rigtige connection string.

Jeg kan ikke forestille mig at de har ændret connection string.

Har du fået recompilet ? ("any of the MySQL hosts" lyder mystisk !)
Avatar billede arne_v Ekspert
30. oktober 2008 - 02:31 #22
kommet videre ?
Avatar billede neo3000 Nybegynder
17. april 2013 - 10:00 #23
Lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester