10
Tags:
.net
Skrevet af
Bruger #4899
@ 05.06.2004
MySQL er uden tvivl den mest populære og mest brugte database, og hvis du har arbejdet med PHP har du utvivlsomt været forbi MySQL.
Men det er jo også meget godt at kunne arbejde med det i .NET, og her vil jeg forklare hvordan du vha. C# kan forbinde til en MySQL database vha. ODBC .NET og udføre de simple kommandoer. Det burde være simpelt for VB.NET brugere at bruge dette også.
Jeg har lavet dette som et windows konsol program, men kan selvfølgeligt bruges ligeledes med ASP.NET.
Jeg går ud fra at du har rimelig kendskab til C#/.NET og ved hvordan du bruger SQL, da jeg ikke vil gå i dybden med dette. Desuden skal du selvfølgelig have en MySQL server kørende
Før det sjove
Først skal ODBC .NET hentes. Det er et komponent for .NET der gør det muligt at forbinde til databaser med en ODBC driver.
Kort sagt er ODBC er et API der gør det muligt at arbejde med databaser, samt bruger SQL som sprog til arbejdet.
ODBC .NET kan hentes fra Microsofts hjemmeside:
http://www.microsoft.com/downloads/details.aspx?FamilyID=6ccd8427-1017-4f33-a062-d165078e32b1&DisplayLang=enDerefter skal MyODBC, også kendt som MySQL ODBC driver, hentes der arbejder sammen med din database (jeg går ud fra du allerede har en database kørende).
Denne kan hentes fra:
http://dev.mysql.com/downloads/connector/odbc/3.51.htmlNår du har installeret ODBC skal du ind i kontrol panel og derefter administration hvor du vælger "Datakilder (ODBC)". Klik derefter på Tilføj og vælg "MySQL ODBC xx driver" fra listen.
Indtast bare det samme som jeg har gjort her, parametrene definere vi i koden ved forbindelsen.
[img id="665"]
ODBC skulle nu være oppe og køre og alt er klart.
Opret en forbindelse
Når du installerer ODBC .NET vil den som standard placere komponentet i "C:\\Programmer\\Microsoft .NET\\Odbc.net".
Åbn dit udviklingsmiljø hvis du bruger et
og tilføj Microsoft.Data.Odbc.dll som reference fil.
Vi er nu klar til at oprette forbindelse, og jeg vil gå lige ud i det med koden og forklare efter:
using System;
using Microsoft.Data.Odbc; // vores komponent
namespace mySQL
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
string parametre;
OdbcConnection db;
parametre = "driver={mysql ODBC 3.51 driver};server=SERVER;port=3306(standardport);database=DATABASE;uid=BRUGER;pwd=PASSWORD;"; // de parametre til forbindelsen, som vi skippede i ODBC opsætningen
db = new OdbcConnection(parametre); // giv dem videre til oprettelsen af klassen
try
{
db.Open(); // vi prøver at forbinde, og udskriv FORBUNDET hvis det lykkes
Console.Write("FORBUNDET");
}
catch
{
Console.Write("IKKE FORBUNDET"); // hvis det ikke lykkes så udskriv IKKE FORBUNDET
}
db.Close(); // luk databasen
}
}
}
Hvis du har et godt indblik i C# kan du nok allerede se hvad der gøres, men jeg vil forklare alligevel
Allerførst åbner vi arbejdsområdet ODBC.NET ved vores using Microsoft.Data.Odbc i toppen.
Nu kan vi så bruge dets metoder, hvor definere klassen OdbcConnection som db.
Forbindelsesinformationerne gemmes i strengen "parametre", som så gives videre når klassen der opretter forbindelse til databasen deklareres.
Nu bruger vi så bare metoden Open() til at åbne selve forbindelsen, ved db.Open(), hvor jeg har sat den til at udskrive FORBUNDET eller IKKE FORBUNDET alt efter om den kan eller ej.
Du har nu lært at oprette forbindelsen til databasen, nu er det tid til at give databasen kommandoer.
Brug kommandoer
Til dette eksempel vil jeg prøve at hente noget tekst fra min database. Jeg bruger her et mikro nyhedssystem til eksempel, hvor jeg vil hente overskrift og teksten.
Data i mysql databasen er følgende:
CREATE TABLE `nyheder` (
`overskrift` TINYTEXT NOT NULL ,
`nyhed` LONGTEXT NOT NULL
);
INSERT INTO `nyheder` ( `overskrift` , `nyhed` )
VALUES (
'mySQL i .NET', 'Ja det er ret heftigt'
);
Nu har vi så en nyhed i databasen, som vi vil hente (og evt. flere hvis der er).
For at du kan arbejde med databasen, kræver det at du ved hvilke felter der hører til hvad. Eks. er overskrift plads nr. 0 og nyhed nr. 1 altså ligesom et array.
For at kunne sende kommandoer til databasen og læse, skal vi have fat i 2 nye klasser, OdbcCommand og OdbcDataReader.
Ligesom før fyrer jeg koden løs og beskriver bagefter:
using System;
using Microsoft.Data.Odbc; // vores komponent
namespace mySQL
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
string parametre;
OdbcConnection db;
parametre = "driver={mysql ODBC 3.51 driver};server=localhost;port=3306;database=mysqltest;uid=root;"; // de parametre til forbindelsen, som vi skippede i ODBC opsætningen
db = new OdbcConnection(parametre);
try
{
db.Open();
Console.Write("FORBUNDET");
OdbcCommand cmd; // klassen OdbcCommand defineres til cmd
OdbcDataReader read; // klassen OdbcDataReader defineres til read
string sql = "SELECT * FROM nyheder"; // her skriver vi vores kommando
cmd = new OdbcCommand(sql, db); // cmd defineres med sql strengen som første argument og hvilken database forbindelse der skal bruges som argument nr. 2
read = cmd.ExecuteReader(); // vi udfører kommandoen og modtager svaret
while( read.Read() ) // vi henter fra databasen så længe der er noget at hente
{
Console.WriteLine("\\nOverskrift: {0}, Nyheden siger: {1}", read[0].ToString(), read[1].ToString()); // Vi udskriver nyhedens data (bemærk man henter fra databasen som i et array)
}
}
catch
{
Console.Write("IKKE FORBUNDET ELLER DER SKETE EN FEJL");
}
db.Close();
}
}
}
OdbcCommand er klassen der bruges til at give SQL kommandoer til databasen, og OdbcDataReader bruges mærkeligt nok til at behandle data.
Vi opretter en streng kaldet sql hvori vi lægger vores SQL kommando. Denne gives videre ved oprettelsen af klassen OdbcCommand sammen med database informationerne.
Vi modtager så et svar fra vores kommando, som behandles af klassen OdbcDataReader der er defineret til read som vi udfører ved read = cmd.ExecuteReader().
Dernæst laves en while løkke der kører så længe vi har noget der kan læses fra databasen, hvor vi udskriver dataene.
Kender du ikke nummeret på dit felt i databasen kan dette gøres ved at bruge metoden GetOrdinal("feltnavn"), her kunne vi eks. skifte vores ud med:
Console.WriteLine("\\nOverskrift: {0}, Nyheden siger: {1}", read.GetOrdinal("overskrift").ToString(), read.GetOrdinal("nyhed").ToString());
Udfør en enkelt SQL kommando
Dette viste hvordan du kunne hive flere data ud, men man kan jo ikke leve uden at udføre enkle ting såsom at indsætte data eller slettet nogle data. Dette kan gøres rimeligt simpelt, vi genbruger koden fra før, hvor noget er "cuttet" væk:
using System;
using Microsoft.Data.Odbc; // vores komponent
namespace mySQL
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
string parametre;
OdbcConnection db;
parametre = "driver={mysql ODBC 3.51 driver};server=localhost;port=3306;database=mysqltest;uid=root;"; // de parametre til forbindelsen, som vi skippede i ODBC opsætningen
db = new OdbcConnection(parametre);
try
{
db.Open();
Console.Write("FORBUNDET");
OdbcCommand cmd; // klassen OdbcCommand defineres til cmd
string sql = "INSERT INTO nyheder(overskrift, nyhed) VALUES('Dette er en ny overskrift', 'Dette er en ny nyhed')"; // her skriver vi vores kommando
cmd = new OdbcCommand(sql, db); // cmd defineres med sql strengen som første argument og hvilken database forbindelse der skal bruges som argument nr. 2
cmd.ExecuteNonQuery(); // Vi udfører det bare og færdig bum
}
catch
{
Console.Write("IKKE FORBUNDET ELLER DER SKETE EN FEJL");
}
db.Close();
}
}
}
Den eneste forskel her er at vi bare bruger ExecuteNonQuery() på vores kommando klasse og så udføres kommadoen - kan det blive mere simpelt?
En afsluttende bemærkning
Du har nu lært at bruge MySQL sammen med dine .NET programmer og håber du har lært noget af det.
Du burde også kunne gøre dette uden at bruge Microsoft.Data.Odbc, men istedet hente arbejdsområdet System.Data.Odbc (burde hvertfald virke med .NET 1.1).
Desuden findes der andre måder at forbinde til MySQL databaser i .NET, eks. er der projektet MySQL .NET der kører, samt nogle andre som alt sammen kan findes vha. vores elskede Google
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (10)
Hehe det ene billed, hvor er det
det skulle bare have vist hvordan jeg havde sat mine indstillinger.. ved ik hvor det er fløjet hen
Flot flot artikel, velskrevet der må gerne komme mere omkring Mysql op mod .net
Enig med Joern velskrevet og mere af den slags
Nu har jeg kun lige kigget den hurtig igennem, men har fundet en stor fejl.. Du vælger ODBC.NET. Men faktum er, at Odbc er en del af .NET 1.1, i System.Data.Odbc namespacet. Og der burde virkelig ikke være nogen som stadig kører med 1.0 på deres hotel. Desuden tror ikke din konklusion med at MySQL er den mest brugte database holder.
Det er rigtigt med at Odbc er en del af .NET 1.1, og kig nederst i artiklen der har jeg også skrevet at man kan bruge System.Data.Odbc!
Måske er den ikke den mest brugte database, men det er en af dem
for den udtalelse beklager jeg.
Men mht. til det andet ville jeg gerne ønske du lige gad læse den ordentligt
nasty gik og kiggede efter noget i den der stil tak
(mySQL <-> .NET)
Glimrende artikel, men personligt foretrækker jeg at bruge ByteFX, det som idag kaldes Connector/Net. På mit niveau (noobish) finder jeg det nemmere at bruge. Jeg skal dog ikke kunne sige om der er nogle ulemper ved ByteFX(Connector/Net).
http://www.bytefx.com
Hvad skal indstillinger være?
Du skal være
logget ind for at skrive en kommentar.