1. Inleiding
Als je werkt met .NET, werk je meestal met een MS Access DB of een MSSQL DB, maar je kan ook met MySQL werken.
In deze tutorial zal ik uitleggen hoe je via WindowsForms verbinding kan maken met een MySQL DB. Maar niet alleen verbinding maken,
ook hoe je gegevens kan ophalen, invoegen, wijzigen en verwijderen. Voor je kan beginnen zijn er enkele zaken die je moet weten en / of installeren.
De afbeeldingen in deze tutorial zijn kleiner afgebeeld dan ze zijn om de lay-out niet te verstoren. Ik zal dit indien gewenst nog aanpassen.
2. Installatie
Ik maak gebruik van Visual Studio 2005 Professional en met deze versie werkt alles wat in deze tutorial besproken wordt.
Ik heb het dus niet getest met de gratis edities (Visual Web Developer, C#, VB). Om gebruik te maken van MySQL kan je kiezen tussen WAMP of XAMPP of iets dergelijks.
Ik heb XAMPP geinstalleerd staan op mijn laptop. Let bij de installatie van XAMPP op dat je IIS uitschakelt.
IIS is de Service om ASP/ASP.NET lokaal te draaien. Ga naar het configuratiescherm en kies "Systeembeheer", hier kies je "Beheer van IIS".
In het dan geopende kader kan je de service stoppen:
Als dit gebeurd is kan je XAMPP installeren. Wanneer de installatie hiervan voltooid is kan je even testen of alles correct werkt.
Als alles goed werkt begin je met de installatie van de MySQL Connector. Dit is een driver die ervoor zorgt dat je .NET kan laten samenwerken met MySQL.
De installatiefile kan je HIER vinden. De installatie hiervan wijst zichzelf uit. Nu dat alles geinstalleerd is ben je klaar voor het echte werk!
LET OP: zorg dat je je MySQL Server configureert dat je IP-adres mag verbinden met een externe server als je met een niet-lokale database werkt!
3. MySQL Database
Als eerste maak je een database aan. Start XAMPP en ga naar deze URL: http://localhost/phpmyadmin/. Let op: zorg ervoor dat IIS niet draait!
Kies voor een nieuwe database aanmaken, de naam kan je zelf kiezen. Ik heb "test" als naam gekozen, klik op aanmaken.
Je maakt dan een nieuwe tabel "leden" aan met drie velden (ID, naam en leeftijd):
Hier is nog eens de query om de tabel aan te maken:
CREATE TABLE `leden` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`naam` VARCHAR( 50 ) NOT NULL ,
`leeftijd` INT NOT NULL
) ENGINE = MYISAM ;
Zo, het database - werk is klaar, in het volgende stukje gaan we de verbinding met onze database leggen en een melding geven als het gelukt is en anders een foutmelding.
4. WindowsForm
Open Visual Studio of Visual C#/VB, niet de Web Developer want die dient alleen om Webbased Applicaties te maken. Kies voor een nieuw project, zoals op de afbeelding.
Ik zal de code voor zowel C# als VB tonen zodat het voor iedereen duidelijk is.
Je ziet een lege Form. Rechts in de "Solution Explorer" zie je al de aangemaakte bestanden. Als je de Explorer niet ziet doe je dit: View -> Solution Explorer.
Er staat een map "References", rechtermuisklik hierop en kies "Add Reference". In het kader kies je bij het tabblad ".NET" voor "MySQL.Data".
Als het project in VB is, staat er geen map met references, rechterklik op de ProjectFile en hier kan je ook references toevoegen.
In de folder References staat nu bij de standaard references ook de MySQL.Data. Dubbelklik op de Form, er wordt een nieuwe pagina geopend met de code voor de Form.
Automatisch wordt er een event aangemaakt, namelijk "Form1_Load". Alles wat hierin komt, wordt uitgevoerd wanneer de Form geladen wordt.
Bovenaan de code zie je de libraries die ingeladen worden, hier moet je er eentje bij zetten:
C#:
using MySql.Data.MySqlClient;
VB:
Imports MySQL.Data.MySqlClient
Als volgt maak je de connectionstring, hierin zitten de gegevens om verbinding te maken met een database. Plaats deze in het Form_Load event:
C#:
MySqlConnection sqlConn = new MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''");
VB:
Dim sqlConn As New MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''")
Je ziet dat bij de User Id "root" ingevuld staat, dat moet je zo laten want de User Id mag niet leeg zijn en je moet de 'hoofdgebruiker' (= root) gebruiken.
Daarna gaan we proberen om de verbinding te openen en als dit lukt geven we een melding en als het niet lukt komt er een foutmelding. De code in het Form_Load ziet er nu ongeveer zo uit:
C#
VB
MySqlConnection sqlConn = new MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''");
Dim sqlConn As New MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''")
Try sqlConn.Open() If sqlConn.State = ConnectionState.Open Then MessageBox.Show("Verbinding gemaakt", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information) End If Catch x As Exception MessageBox.Show(x.Message, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try
Dit is de melding die je krijgt als de verbinding correct wordt gemaakt:
5. Gegevens ophalen
Nu we verbinding hebben kunnen maken met onze database moeten we er ook iets mee doen. Als eerste zien we hoe je gegevens kan ophalen uit de MySQL DB.
We maken een Connectionstring, een query, een MySqlCommand, we voeren het commando uit, lezen de gegevens uit en geven deze weer.
Verwijder de code uit het Page_Load event en plaats 2 labels op de Form. Het eerste label is voor de titel, het andere label geef je als name "lbl_gegevens".
Ik heb in dat label dit tekstje gezet: "In dit label komen de gegevens", dat hoeft niet want bij het laden van de Form komt er toch iets anders in te staan.
C#
VB
MySqlConnection sqlConn = new MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''"); string query = "SELECT id, naam, leeftijd FROM leden"; string resultaat = ""; MySqlCommand myCommando = new MySqlCommand(query, sqlConn); MySqlDataReader sqlReader;
Dim sqlConn As New MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''") Dim query As String = "SELECT id, naam, leeftijd FROM leden" Dim resultaat As String = "" Dim myCommando As MySqlCommand = New MySqlCommand(query, sqlConn) Dim sqlReader As MySqlDataReader
6. Gegevens toevoegen
In dit stuk zullen we gegevens toevoegen in de database. Verwijder de code uit het Form_Load event en plaats volgende controls op de Form:
- 3 labels
- 2 tekstvakken (geef deze als name "naam_invoer" en "leeftijd_invoer")
- 1 knop (name "toevoeg_knop")
Zorg dat het er ongeveer zo uit ziet:
Dubbelklik op de knop, er wordt automatisch een event aangemaakt. Als er op de knop geklikt wordt worden de ingevoerde gegevens in de database geplaatst.
Zet deze code in het event van de knop:
C#
VB
MySqlConnection sqlConn = new MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''"); string naam = naam_invoer.Text; int leeftijd = Convert.ToInt32(leeftijd_invoer.Text); string query = "INSERT INTO leden(naam, leeftijd) VALUES('" + naam + "', " + leeftijd + ")"; MySqlCommand sqlCommand = new MySqlCommand(query, sqlConn);
Dim sqlConn As New MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''") Dim naam As String = naam_invoer.Text Dim leeftijd As Integer = Convert.ToInt32(leeftijd_invoer.Text) Dim query As String = "INSERT INTO leden(naam, leeftijd) VALUES('" & naam & "', " & leeftijd & ")" Dim sqlCommand As MySqlCommand = New MySqlCommand(query, sqlConn)
Try sqlConn.Open() sqlCommand.ExecuteNonQuery() Catch x As Exception MessageBox.Show(x.Message, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally sqlConn.Close() MessageBox.Show("Gegevens toegevoegd", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information) End Try
In dit stuk code worden de ingevoerde gegevens in een variabele opgeslagen en in de query gezet. Daarna wordt de query samen met de connectionstring in een MySqlCommand geplaatst.
We proberen het commando uit te voeren en als de gegevens zijn toegevoegd, wordt er een melding gegegeven dat het gelukt is, anders een foutmelding.
7. Gegevens wijzigen
Nu zullen we eenvoudig gegevens wijzigen. Bij het laden van de Form stoppen we alle bestaande ID's uit de database in een DropDownList.
De gebruiker kan een ID kiezen en hiervan de gegevens wijzigen. Doe de code weg uit het button - event en plaats een extra label en een DropDownList met als name "id_lijst".
De Form zou er nu zo moeten uitzien:
Nu volgen twee stukken code: het eerste gebeurt in het Form_Load - event en het tweede in het Click - event van de knop.
Form_Load
C#
VB
MySqlConnection sqlConn = new MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''"); string query = "SELECT id FROM leden"; MySqlCommand myCommando = new MySqlCommand(query, sqlConn); MySqlDataReader sqlReader; object item;
Dim sqlConn As New MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''") Dim query As String = "SELECT id FROM leden" Dim myCommando As MySqlCommand = New MySqlCommand(query, sqlConn) Dim sqlReader As MySqlDataReader Dim item As Object
While sqlReader.Read() item = sqlReader.GetValue(0).ToString() id_lijst.Items.Add(item) End While
sqlReader.Close() Catch x As Exception MessageBox.Show(x.Message, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally sqlConn.Close() End Try
Click
C#
VB
MySqlConnection sqlConn = new MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''"); int id = Convert.ToInt32(id_lijst.SelectedItem.ToString()); string naam = naam_invoer.Text; int leeftijd = Convert.ToInt32(leeftijd_invoer.Text); string query = "UPDATE leden SET naam = '" + naam + "', leeftijd = " + leeftijd + " WHERE id = " + id + " "; MySqlCommand sqlCommand = new MySqlCommand(query, sqlConn);
Dim sqlConn As New MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''") Dim id As Integer = Convert.ToInt32(id_lijst.SelectedItem.ToString()) Dim naam As String = naam_invoer.Text Dim leeftijd As Integer = Convert.ToInt32(leeftijd_invoer.Text) Dim query As String = "UPDATE leden SET naam = '" & naam & "', leeftijd = " & leeftijd & " WHERE id = " & id & " " Dim sqlCommand As MySqlCommand = New MySqlCommand(query, sqlConn)
Try sqlConn.Open() sqlCommand.ExecuteNonQuery() Catch x As Exception MessageBox.Show(x.Message, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally sqlConn.Close() MessageBox.Show("Gegevens gewijzigd", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information) End Try
8. Gegevens verwijderen
Nu zijn we bij het laatste stukje gekomen, gegevens verwijderen. Bij het laden van de Form worden de bestaande ID's in een DropDownList geplaatst, de gebruiker kan dan een ID kiezen en de gegevens van dit ID verwijderen.
Doe alle vorige code weg uit het Load - event en plaats op de Form een Label, Button en DropDownList. Het label dient enkel als titel, geef de Button de name "knop_delete" en de DropDownList "id_lijst".
Mijn Form ziet er nu zo uit:
In de code moeten we niet enkel bij het laden van de Form de ID's in de lijst stoppen. Na het verwijderen van een gegeven mag het ID niet meer in de lijst staan.
We maken een apart event en dit roepen we aan bij het laden van de Form en elke keer wanneer er op de knop geklikt wordt. Dubbelklik op de knop om een event aan te maken voor deze knop.
Load
C#
VB
refresh();
refresh()
Click
C#
VB
MySqlConnection sqlConn = new MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''"); int id = Convert.ToInt32(id_lijst.SelectedItem.ToString()); string query = "DELETE FROM leden WHERE id = " + id + " "; MySqlCommand sqlCommand = new MySqlCommand(query, sqlConn);
Dim sqlConn As New MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''") Dim id As Integer = Convert.ToInt32(id_lijst.SelectedItem.ToString()) Dim query As String = "DELETE FROM leden WHERE id = " & id & " " Dim sqlCommand As MySqlCommand = New MySqlCommand(query, sqlConn)
Try sqlConn.Open() sqlCommand.ExecuteNonQuery() refresh() MessageBox.Show("Gegevens verwijderd", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch x As Exception MessageBox.Show(x.Message, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally sqlConn.Close() End Try
refresh()
C#
VB
id_lijst.Text = ""; id_lijst.Items.Clear();
MySqlConnection sqlConn = new MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''"); string query = "SELECT id FROM leden"; object item; MySqlCommand myCommando = new MySqlCommand(query, sqlConn); MySqlDataReader sqlReader;
id_lijst.Text = "" id_lijst.Items.Clear() Dim sqlConn As New MySqlConnection("Database=test; Data Source=localhost; User Id='root'; Password=''") Dim query As String = "SELECT id FROM leden" Dim item As Object Dim myCommando As MySqlCommand = New MySqlCommand(query, sqlConn) Dim sqlReader As MySqlDataReader
While sqlReader.Read() item = sqlReader.GetInt32(0).ToString() id_lijst.Items.Add(item) End While
sqlReader.Close() Catch x As Exception MessageBox.Show(x.Message, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally sqlConn.Close() End Try
Omdat er elke keer moet vernieuwd worden zetten we de functie hiervoor in een apart event dat dan elke keer aangeroepen wordt. In dit event zetten we de tekst leeg en verwijderen we alle items uit de lijst. Daarna zetten we er de nog bestaande items in.
9. Slot
Zo, hierbij het einde van deze tutorial. Ik hoop dat ik jullie weer iets interessants heb kunnen bijbrenge uit de interessante wereld van .NET!
In deze tutorial is het belangrijkste:
- Alles correct installeren
- De Reference toevoegen aan je project
- Deze dan ook in je script gebruiken (using MySql...)
Eens dit alles klaar is, is het grote werk klaar en is het ongeveer hetzelfde als werken met een Access / MSSQL database.
Als er nog vragen en/of opmerkingen zijn of dingen die je niet verstaat, laat dit dan gerust weten via een reactie, een PM of op het forum!
Voor de leden: stem aub, zo heb ik een beeld van wat jullie er van vinden en wat er eventueel nog beter kan.