Avatar billede ciffer Nybegynder
26. november 2005 - 18:54 Der er 25 kommentarer og
1 løsning

Oprette forbindelse til MySQL database

Jeg har installeret Visual Studio express, MySQL 5.0 samt mysql-connector-odbc-3.51.12. Jeg ønsker at connecte til MySQL databasen fra en C# class. Jeg har følgende meget simple kode:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Odbc;

    class Class1
    {
        public static void Main(string[] args)
        {
            MySqlCon con = new MySqlCon("Database=xxxx;Data Source=localhost;User Id=xxxx;Password=xxxx");
            con.Open();
            MySqlCommand sel = new MySqlCommand("SELECT * FROM xxxx", con);
            con.Close();
        }
    }

Jeg får følgende fejl:

Error    1    The type or namespace name 'MySqlCon' could not be found (are you missing a using directive or an assembly reference?)    C:\Documents and Settings\Thomas Thorup\Local Settings\Application Data\Temporary Projects\DBConnect\Class1.cs    11    13    DBConnect
Error    2    The type or namespace name 'MySqlCon' could not be found (are you missing a using directive or an assembly reference?)    C:\Documents and Settings\Thomas Thorup\Local Settings\Application Data\Temporary Projects\DBConnect\Class1.cs    11    32    DBConnect
Error    3    The type or namespace name 'MySqlCommand' could not be found (are you missing a using directive or an assembly reference?)    C:\Documents and Settings\Thomas Thorup\Local Settings\Application Data\Temporary Projects\DBConnect\Class1.cs    13    13    DBConnect
Error    4    The type or namespace name 'MySqlCommand' could not be found (are you missing a using directive or an assembly reference?)    C:\Documents and Settings\Thomas Thorup\Local Settings\Application Data\Temporary Projects\DBConnect\Class1.cs    13    36    DBConnect

Skal jeg pege ud på min MySQL connector eller mangler jeg blot en "using xxxx;"?!?
Avatar billede jakobdo Ekspert
26. november 2005 - 19:45 #1
Avatar billede cwboy Nybegynder
26. november 2005 - 19:49 #2
Mere præcist - prøv at hente Connector/Net herfra, hvis du ønsker at bruge MySqlCon/MySqlCommand osv.

http://dev.mysql.com/downloads/connector/http://dev.mysql.com/downloads/connector/

Hvis du importerer System.Data.Odbc skal du istedet bruge OdbcConnection/OdbcCommand osv,
Avatar billede ciffer Nybegynder
26. november 2005 - 21:16 #3
Min kode ser nu sådan ud:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Odbc;

    public class Class1
    {
        public static void Main(string[] args)
        {
            OdbcConnection con = new OdbcConnection("Database=Test; Data Source=localhost; User Id=xxxx; Password=xxxx");
            con.Open();
            OdbcCommand sel = new OdbcCommand("SELECT * FROM test", con);
            //OdbcCommand sel = new OdbcCommand("INSERT INTO test VALUES('Hep')", con);
            con.Close();
        }
    }


Og jeg får nu denne fejl:

ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

Jeg har som tidligere skrevet hentet ODBC driveren, men er det nok blot at installere den? Eller er det min kode der stadigvæk ikke er korrekt?
Avatar billede alex_sleiborg Nybegynder
26. november 2005 - 21:27 #4
Vil anbefale du henter mysql connector
http://dev.mysql.com/downloads/connector/net/1.0.html

Og her er et kode eksempel

using System;

class MySQL_Connec
{
    static void Main()
    {
            string MyConnection = "server=localhost;uid=brugernavn;" +
                "pwd=password;database=databasenavn;";
           
            //Laver Forbindelse til databasen
            MySql.Data.MySqlClient.MySqlConnection Con;
         
   
            Con = new MySql.Data.MySqlClient.MySqlConnection();
                               
            Con.ConnectionString = MyConnection;

           
            Con.Open();//Åbner forbindelse til databasen
           
            Con.Close();
    }
}

Når du compiler skal du huske og have mysql.data.dll med som reference.
Mysql.data.dll for du automatisk når installerer Mysql Connector.
Her er et eksempel hvor Mysql.data ligger i samme mappe som kildefilen
csc /reference:Mysql.data.dll connection.cs

Bruger du Visual studio skal du bare lave en reference til mysql.data.dll

Her bliver den installeret som standard
C:\Programmer\MySQL\MySQL Connector Net 1.0.6\bin\.NET 1.1\Mysql.data.bin
Avatar billede ciffer Nybegynder
26. november 2005 - 21:32 #5
alex_sleiborg>> Hvor skal den reference til mysql.data.dll sættes op? I visual studio? Og i så fald hvor og hvordan?
Avatar billede alex_sleiborg Nybegynder
26. november 2005 - 21:35 #6
Hvis du bruger visual studio, så har du en solution explorer. Der er noget der hedder References. Så højre klikker du bare der, og trykker Add reference. Og finder Mysql.data.dll og tilføjer den
Avatar billede ciffer Nybegynder
26. november 2005 - 22:00 #7
Det ser ud til at virke, men jeg har dog et spørgsmål til. Hvis jeg skal inserte i mySQL db'n skal det så ikke gøres sådan: MySqlCommand sel = new MySqlCommand("INSERT INTO TEST VALUES('Test')", con);? Jeg nemlig denne fejl når jeg forsøger:

Error    1    The type or namespace name 'MySqlCommand' could not be found (are you missing a using directive or an assembly reference?)    C:\Documents and Settings\Thomas Thorup\My Documents\Visual Studio 2005\Projects\DBConnect\DBConnect\MySQL_connect.cs    19    13    DBConnect
Avatar billede alex_sleiborg Nybegynder
26. november 2005 - 22:06 #8
Det kan godt være der lige er nogen taste fejl i koden. Er ved og være træt:)

            string MyConnection = "server=127.0.0.1;uid=root;" +
            "pwd=password;database=db";           
           
            MySql.Data.MySqlClient.MySqlConnection Con;
            MySql.Data.MySqlClient.MySqlCommand Com;

            Con            = new MySql.Data.MySqlClient.MySqlConnection();
            Com            = new MySql.Data.MySqlClient.MySqlCommand();

            Con.ConnectionString = MyConnection;
            try
            {
                Con.Open();//Åbner forbindelse til databasen
                Com.Connection = Con;

                Com.CommandText = "INSERT INTO db (Navn) VALUES (?Navn)";
                Com.Prepare();

                Com.Parameters.Add("?Navn", "Indsætter ind i databasen i tabellen db, i feltet navn");
               

                Com.ExecuteNonQuery();
                Con.Close();
               
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex);               
            }
Avatar billede ciffer Nybegynder
26. november 2005 - 22:10 #9
Kan nu se at jeg havde glemt denne: using MySql.Data.MySqlClient; samt at "Con" var med stort C ;-) Der sker dog stadigvæk ikke noget. Jeg får ikke overført data til db'n?
Avatar billede ciffer Nybegynder
26. november 2005 - 22:10 #10
Læg et svar så du kan få "fred"... jeg får den fikset på tidspunkt :-)
Avatar billede alex_sleiborg Nybegynder
26. november 2005 - 22:12 #11
Må jeg se hele din kode
Avatar billede ciffer Nybegynder
26. november 2005 - 22:14 #12
Jeps... kommer her:

using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;

namespace DBConnect
{
    class MySQL_connect
    {
        static void Main()
        {
            string MyConnection = "server=localhost;uid=xxxx;" +
            "pwd=xxxx;database=test;";
            //Laver Forbindelse til databasen
            MySql.Data.MySqlClient.MySqlConnection Con;
            Con = new MySql.Data.MySqlClient.MySqlConnection();
            Con.ConnectionString = MyConnection;
            Con.Open();//Åbner forbindelse til databasen
            MySqlCommand sel = new MySqlCommand("INSERT INTO test VALUES('Test')", Con);
            //MySqlCommand sel = new MySqlCommand("SELECT * FROM test", Con);
            Con.Close();
        }
    }
}
Avatar billede alex_sleiborg Nybegynder
26. november 2005 - 22:20 #13
using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;

namespace DBConnect
{
    class MySQL_connect
    {
        static void Main()
        {
            string MyConnection = "server=localhost;uid=xxxx;" +
            "pwd=xxxx;database=test;";
            //Laver Forbindelse til databasen
            MySql.Data.MySqlClient.MySqlConnection Con;
            Con = new MySql.Data.MySqlClient.MySqlConnection();
            Con.ConnectionString = MyConnection;
            Con.Open();//Åbner forbindelse til databasen
            //(Navn) er navnet på det felt i i databasen, hvor du ville insætte data
                Com.CommandText = "INSERT INTO test (Navn) VALUES (?Navn)";
                Com.Prepare();

                Com.Parameters.Add("?Navn", "Test");
               

                Com.ExecuteNonQuery();           
Con.Close();
        }
    }
}

Problemet før er du aldrig får sendt dataene til din database. De ligger bare i et objekt
Avatar billede ciffer Nybegynder
26. november 2005 - 22:25 #14
Er nok lidt langsom her, men jeg forstår ikke det du skriver med feltet i db'n? Jeg har en db der hedder "Test", en table der hedder "test" med en column der hedder "Navn". Hvilken en af dem, er det felt som du omtaler?
Avatar billede alex_sleiborg Nybegynder
26. november 2005 - 22:27 #15
Det er nok mig der formulere mig dårligt. Column = Felt :)

Fordi jeg er vandt til og bruge en dansk udgave af Mysql front
Avatar billede ciffer Nybegynder
26. november 2005 - 22:31 #16
Okay :-) Men i den løsning du har givet her anvender du bl.a. "Com.CommandText = "INSERT INTO test (Navn) VALUES (?Navn)";" og "Com" er jo ikke initialiseret nogle steder eller hvad? Fordi jeg får i hvert fald en fejl når jeg forsøger at anvende din kode.
Avatar billede alex_sleiborg Nybegynder
26. november 2005 - 22:39 #17
Arr sorry. Rettede lige lidt i din kode, havde ikke set du ikke havde det hele med. Her denne skulle gerne virket. Har selv lige compilet den :)

using System;

class CDB
{
    static void Main()
    {
            string MyConnection = "server=127.0.0.1;uid=root;" +
            "pwd=password;database=db";           
           
            MySql.Data.MySqlClient.MySqlConnection Con;
            MySql.Data.MySqlClient.MySqlCommand Com;

            Con            = new MySql.Data.MySqlClient.MySqlConnection();
            Com            = new MySql.Data.MySqlClient.MySqlCommand();

            Con.ConnectionString = MyConnection;
            try
            {
                Con.Open();//Åbner forbindelse til databasen
                Com.Connection = Con;

                //(Navn er navnet på dit felt i databasen)
                Com.CommandText = "INSERT INTO test (Navn) VALUES (?Navn)";
                Com.Prepare();

                Com.Parameters.Add("?Navn", "Test");
               

                Com.ExecuteNonQuery();           

           
                Con.Close();
               
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex);           
            }
    }
}
Avatar billede ciffer Nybegynder
26. november 2005 - 22:49 #18
Yes sir :-) Så er den der! Super mange tak. Det var lidt frustrerende, at en så fundamental ting ikke ville virke. Læg et svar så du kan få dine velfortjente point!!!

Ved du hvor jeg kan læse om hvordan de her fungerer: Com.CommandText(), Com.Prepare(),Com.Parameters.Add() og Com.ExecuteNonQuery() ?!?
Avatar billede alex_sleiborg Nybegynder
26. november 2005 - 22:54 #19
Her er kan du læse lidt om ado.net
Den er godt nok til MS SQL Server, men det er næsten det samme til Mysql
http://www.functionx.com/adonet/index.htm

Og så dokumentation til mysql connecter, der står alt hva du har brug for :)

Den ligger i start -> programmer -> Mysql connecter Net v 1.0.6 -> Documentation

God førnøjelse :) Godnat
Avatar billede alex_sleiborg Nybegynder
26. november 2005 - 22:54 #20
Nåe ja. Og et svar :)
Avatar billede ciffer Nybegynder
26. november 2005 - 22:55 #21
Tak for din hjælp og linket. Her er point og sov godt :-)
Avatar billede kappel Nybegynder
29. november 2005 - 10:32 #22
har læst tråden og har lige et tillægsspørgsmål.
Hvis man bruger MS sql, hvilken connecter skal man så bruge?
Og denne connecter skal den også installeres på serveren, arbejder lokalt og kopiere derefter mappen under wwwroot til serveren?

Venlige hilsner Mikkel
Avatar billede kappel Nybegynder
29. november 2005 - 10:32 #23
glemte lige; hvad er ado.net?
Avatar billede ciffer Nybegynder
29. november 2005 - 21:05 #24
Kappel>> Du kan sætte VS .Net express op til at anvende MS SQL eller MS Access ved at gå ind i Tools -> Connect to database... og så derfra sætte din forbindelse op.
Mht. ADO .Net kan du læse en del her. Teksten er på dansk... ved ikke om det er et plus eller minus ;-) http://download.microsoft.com/download/1/0/8/108604a1-e9de-41a9-ac97-960c3730a693/msdotnet05ado.pdf
Avatar billede arne_v Ekspert
30. november 2005 - 04:27 #25
SqlClient til connection mod SQLServer kommer med .NET

bruges på præcis samme måde - alle klasserne starter bare med
Sql og ikke MySQL plus at man skal importere System.Data.SqlClient
og ikke MySQL.Data.MySqlClient
Avatar billede arne_v Ekspert
30. november 2005 - 04:29 #26
ADO.NET er bare database adgang i .NET

både MySQL og SQLServer
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