Avatar billede jakobdo Ekspert
13. marts 2007 - 21:46 Der er 15 kommentarer og
1 løsning

Forbind til mysql, via dynamisk loaded dll

Hej,
jeg kunne godt tænke mig at kode et lille C# program, hvor jeg kan forbinde til mysql via en dynamisk dll.
Jeg har kigget på mysql .net connector 1.0.9.
Det er en mysql.data.dll med, kan jeg evt. bruge den?
Eller skal jeg til at lave min egen mysql.dll fra bunden?

Jeg ved jeg er dårlig til at forklare mig, da jeg bare skyder med spredhagl, men spørg endelig. :o)
Avatar billede arne_v Ekspert
13. marts 2007 - 21:52 #1
du kan godt brug den

du kan enten loade MySqlConnetcion fra den via reflection og caste til en IDbConnection

eller du kan bruge den indbyggede mulighed i .NET 2.0 for det samme
Avatar billede jakobdo Ekspert
13. marts 2007 - 22:11 #2
Jeg er ikke helt sharp i C# (fik du den), så du må gerne bøje det lidt i neon hvis du gider! :o)
Avatar billede kalp Novice
13. marts 2007 - 22:18 #3
hvis du henter
http://www.microsoft.com/downloads/details.aspx?FamilyId=6CCD8427-1017-4F33-A062-D165078E32B1&displaylang=en

kan du bare skriv

using Microsoft.Data.Odbc;

og connecte med

string ConnectionString ="DSN=MySQL;UID=root;PWD=root";
OdbcConnection connection = new OdbcConnection(ConnectionString);
ConnectionString.Open();
Avatar billede kalp Novice
13. marts 2007 - 22:18 #4
argh.. sidste linje skal selvfølgelig være

connection.Open();
Avatar billede jakobdo Ekspert
13. marts 2007 - 22:25 #5
Og vil den løsning virke hvis jeg laver en exe fil, og sender den til en ven/kollega eller lign, som også har .net installeret, uden nogle ekstra ting?
Avatar billede kalp Novice
13. marts 2007 - 22:33 #6
Jeg ved faktisk ikke om der ved release bliver lavet de nødvendige filer så det bare kan køres på andre maskiner.. ville gerne have testet for dig, men har ikke en mysql database desværre.
Avatar billede arne_v Ekspert
14. marts 2007 - 00:12 #7
ODBC drivere skal installeres.

En af grundene til at man som oftest foretrækker rigtige ADO.NET providere.
Avatar billede arne_v Ekspert
14. marts 2007 - 00:12 #8
Linket er iøvrigt kun til .NET 1.0 da .NET 1.1 og 2.0 kommer med ODBC support.

(namespace er så System.Data.Odbc)
Avatar billede arne_v Ekspert
14. marts 2007 - 00:35 #9
kode eksempel med dynamisk load:

using System;
using System.Reflection;
using System.Data;

namespace E
{
    public class MainClass
    {
        public static void Test(string dllfnm, string conclznam, string constr)
        {
            IDbConnection con = (IDbConnection)Assembly.LoadFrom(dllfnm).CreateInstance(conclznam);
            con.ConnectionString = constr;
            con.Open();
            IDbCommand cmd = con.CreateCommand();
            cmd.CommandText = "SELECT * FROM T1";
            IDataReader rdr = cmd.ExecuteReader();
            while(rdr.Read()) {
                int f1 = (int)rdr[0];
                string f2 = (string)rdr[1];
                Console.WriteLine(f1 + " " + f2);
            }
            con.Close();
        }
        public static void Main(string[] args)
        {
            Test(@"C:\InetPub\wwwroot\bin\MySql.Data.dll",
                "MySql.Data.MySqlClient.MySqlConnection",
                "Database=Test;Data Source=localhost;User Id=;Password=");
            Console.ReadLine();
        }
    }
}
Avatar billede jakobdo Ekspert
14. marts 2007 - 08:06 #10
arne_v: Jeg vil straks teste om jeg kan få det til at virke! (du skal ikke satse penge på det) :o)

Jeg vil lige stille et andet spørgsmål.
Hvis i skulle kode op i mod en mysql database, og koden skulle kunne flyttes fra maskine til maskine (hvor alle i dag mere eller mindre har .net installeret), hvordan vil i så kode løsningen?

Med en dll, ado, odbc eller?
Avatar billede arne_v Ekspert
14. marts 2007 - 15:28 #11
helt klart MySQL connector for .NET (ikke ODBC) p.g.a. muligheden for XCOPY deployment

normalt kan du bare linke compile time til den

det er kun i specielle tilfaelde at du vil linke runtime som her (men det kunne
vaere af licens hensyn)
Avatar billede jakobdo Ekspert
14. marts 2007 - 15:35 #12
Jeg ville linke dynamisk, da jeg ikke vidste bedre.
Nu har jeg funder ud af bare at bruge dll'en via en reference, og det er som sådan godt nok til mig.

Arne_v: Smid et svar, du har svaret på mit spørgsmål, omend det ikke var det jeg endte med at bruge. (man skal jo lære så længe man lever)
Avatar billede arne_v Ekspert
14. marts 2007 - 15:45 #13
ok
Avatar billede arne_v Ekspert
14. marts 2007 - 16:03 #14
husk lige at naerlaes MySQL licens regler !
Avatar billede jakobdo Ekspert
14. marts 2007 - 16:10 #15
Noget bestemt jeg skal kigge efter?
Mysql .net connector er udgivet under GPL, og det jeg er ved at lave, er kun til privat brug.
Avatar billede arne_v Ekspert
14. marts 2007 - 16:34 #16
Du har ikke noget problem saa.

Men MySQL's fortolkning af "binding" i GPL licensen er ret stram.

MySqlConnecion con;

i din kode og de betragter det som "binding" og dermed skal din kode vaere
GPL eller anden FLOSS.

Derfor kan den dynamiske load som vist ovenfor med dllnavn, klassenavn
og connection string i en config fil vaere en god ting, fordi saa er din kode
ikke linket med MySQL GPL kode.
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