Google
 
Diesen Blog abonnieren

Beliebte Posts

Posts mit dem Label C# werden angezeigt. Alle Posts anzeigen
Posts mit dem Label C# werden angezeigt. Alle Posts anzeigen

Samstag, 5. Dezember 2015

C# and mySQL Tutorial - Wie befülle ich eine Listbox?

Im letzten Beitrag wurde gezeigt, wie eine Combobox mit Datenbankwerten befüllt wird (grün) und wie die Werte anschliessend in Formularfelder übertragen werden (gelb). Bei der Listbox funktioniert alles genau gleich. Die nicht betrachteten Programmteile sind ausgeblendet.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
namespace First_C_Sharp_App
{
    public partial class Form2 : Form
    {
        MySqlConnection conDataBase;
        MySqlCommand cmdDataBase;
        MySqlDataReader myReader;
 
        public Form2()
        {
            InitializeComponent();
            FillCombo();
            FillListbox();
        }
 
        private static void OpenDatabase(string Query, out MySqlConnection conDataBase, out MySqlCommand cmdDataBase)
        {
            string myConnection = "datasource=localhost;port=3306; " +
            "username=root;password=xxx";
            conDataBase = new MySqlConnection(myConnection);
            cmdDataBase = new MySqlCommand(Query, conDataBase);
        }
 
        void FillListbox()
        {
            string Query = "Select * from database.edata ;";
            OpenDatabase(Query, out conDataBase, out cmdDataBase);
 
 
            try
            {
                conDataBase.Open();
                myReader = cmdDataBase.ExecuteReader();
 
                while (myReader.Read())
                {
                    string sName = myReader.GetString("name");
                    lstBox.Items.Add(sName);
                }
                cboAddString.Focus();
 
                conDataBase.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
 
 
 
        }
 
        void FillCombo()
        {
            
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            
           
            }
 
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            
            
        }
 
        private void btnDelete_Click(object sender, EventArgs e)
        {
            
            
 
        }
 
        
 
        private void cboAddString_SelectedIndexChanged(object sender, EventArgs e)
        {
 
            
        }
 
        private void lstBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            string Query = "Select * from database.edata where name='" + lstBox.Text + "';";
 
            OpenDatabase(Query, out conDataBase, out cmdDataBase);
            try
            {
                conDataBase.Open();
                myReader = cmdDataBase.ExecuteReader();
 
                while (myReader.Read())
                {
                    Eid_txt.Text = myReader.GetInt32("Eid").ToString();
                    Name_txt.Text = myReader.GetString("name");
                    Surname_txt.Text = myReader.GetString("surname");
                    Age_txt.Text = myReader.GetInt32("age").ToString();
 
                }
 
                conDataBase.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
    }
 

C# und mySQL Tutorial - Wie befülle ich eine Combobox?



In untenstehender Routine wird gezeigt, wie eine Combobox aus der Datenbank gefüllt (grün) und der selektierte Wert in die Felder geschrieben wird (gelb). Die dazu benötigte (leere) Funktion wird durch Doppelklick auf die Combobox erzeugt. Die Datenbankverbindung ist orange markiert.
Die hier nicht benötigten Funktionen aus den früheren Folgen sind ausgeblendet.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
namespace First_C_Sharp_App
{
    public partial class Form2 : Form
    {
        MySqlConnection conDataBase;
        MySqlCommand cmdDataBase;
        MySqlDataReader myReader;
 
        public Form2()
        {
            InitializeComponent();
            FillCombo();
        }
 
        private static void OpenDatabase
             (string Query, out MySqlConnection conDataBase, 
               out MySqlCommand cmdDataBase)
        {
            string myConnection = "datasource=localhost;port=3306; " +
                "username=root;password=xxx";
            conDataBase = new MySqlConnection(myConnection);
            cmdDataBase = new MySqlCommand(Query, conDataBase);
        }
 
 
        void FillCombo()
        {
            string Query = "Select * from database.edata ;";
            OpenDatabase(Query, out conDataBase, out cmdDataBase);
                     
            
            try
            {
                conDataBase.Open();
                myReader = cmdDataBase.ExecuteReader();
 
                while (myReader.Read())
                {
                    string sName = myReader.GetString("name");
                    cboAddString.Items.Add(sName);
                }
                cboAddString.Focus();
 
                conDataBase.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
        }
 
        private void btnUpdate_Click(object sender, EventArgs e)
        {

        }
 
        private void btnDelete_Click(object sender, EventArgs e)
        {
         
        }
 
  
 
        private void cboAddString_SelectedIndexChanged(object sender, EventArgs e)
        {
 
            string Query = "Select * from database.edata where name='" + cboAddString.Text + "';";
            
            OpenDatabase(Query, out conDataBase, out cmdDataBase);
            try
            {
                conDataBase.Open();
                myReader = cmdDataBase.ExecuteReader();
 
                while (myReader.Read())
                {
                    Eid_txt.Text = myReader.GetInt32("Eid").ToString();
                    Name_txt.Text = myReader.GetString("name");
                    Surname_txt.Text = myReader.GetString("surname");
                    Age_txt.Text = myReader.GetInt32("age").ToString();
 
                }
 
                conDataBase.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
    }
    }

Freitag, 4. Dezember 2015

C# and mySQL Tutorial - Update and Delete


Will man Werte in der Datenbank ändern, so wird die Abfrage foglendermassen angepasst (gelb).
Löschen ist noch einfacher (grün).Dazu muss eine existierende Eid Nummer eingegeben und 'Delete' gedrückt werden.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
namespace First_C_Sharp_App
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string myConnection = "datasource=localhost;port=3306; " +
                                      "username=root;password=xxx";
            string Query = "insert into database.edata (Eid, name, surname, age) values('" 
                + this.Eid_txt.Text + "','" + this.Name_txt.Text + "','" + this.Surname_txt.Text 
                + "','" + this.Age_txt.Text + "');";
            MySqlConnection conDataBase = new MySqlConnection(myConnection);
            MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
            MySqlDataReader myReader;
            try
            {
                conDataBase.Open();
                myReader = cmdDataBase.ExecuteReader();
                MessageBox.Show("Saved");
                
                conDataBase.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
 
 
            }
 
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            string myConnection = "datasource=localhost;port=3306; " +
                                                  "username=root;password=xxx";
            string Query = "update database.edata set Eid='"
                + Eid_txt.Text + "',name='" + Name_txt.Text + "',surname='" 
                + Surname_txt.Text
                + "',age='" + Age_txt.Text + "' where Eid='" + Eid_txt.Text + "' ;";
            MySqlConnection conDataBase = new MySqlConnection(myConnection);
            MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
            MySqlDataReader myReader;
            try
            {
                conDataBase.Open();
                myReader = cmdDataBase.ExecuteReader();
                MessageBox.Show("Updated");
 
                conDataBase.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        private void btnDelete_Click(object sender, EventArgs e)
        {
            string myConnection = "datasource=localhost;port=3306; " +
                                                 "username=root;password=xxx";
            string Query = "delete from database.edata where Eid='" 
                + Eid_txt.Text + "' ;";
            MySqlConnection conDataBase = new MySqlConnection(myConnection);
            MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
            MySqlDataReader myReader;
            try
            {
                conDataBase.Open();
                myReader = cmdDataBase.ExecuteReader();
                MessageBox.Show("Deleted");
 
                conDataBase.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
 
        }
 
        
    }
    }
 
Die Änderungen beschränken sich im Wesentlichen auf den String 'Query'.

Donnerstag, 3. Dezember 2015

C# Tutorial - Eingabe von Werten in die Datenbank



Daten können folgendermassen in die Datenbank geschrieben werden:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
namespace First_C_Sharp_App
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string myConnection = "datasource=localhost;port=3306; " +
                                      "username=root;password=xyz";
            string Query = "insert into database.edata (Eid, name, surname, age) values('" 
                + this.Eid_txt.Text + "','" + this.Name_txt.Text + "','" + this.Surname_txt.Text 
                + "','" + this.Age_txt.Text + "');";
            MySqlConnection conDataBase = new MySqlConnection(myConnection);
            MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
            MySqlDataReader myReader;
            try
            {
                conDataBase.Open();
                myReader = cmdDataBase.ExecuteReader();
                MessageBox.Show("Saved");
                
                conDataBase.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
 
 
            }
 
 
        }
    }
 

Mittwoch, 2. Dezember 2015

C# - Neues Fenster öffnen

Nach erfolgreichem Login soll typischerweise das Login Fenster verschwinden (Hide) und ein neues Fenster geöffnet werden (ShowDialog).
Dazu muss im Projektmappen Explorer ein neues Element (Window Form) hinzugefügt werden.
Der Code gemäss vorangegangenem Beispiel muss geringfügig ergänzt werden (gelb hinterlegt):

using System;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
 
 
namespace First_C_Sharp_App
{
    public partial class Login : Form
    {
        
        public Login()
        {
            InitializeComponent();
            password_txt.PasswordChar = '#';
        }
 
       
 
        private void btnLogin_Click(object sender, EventArgs e)
        {
            try
            {
                string myConnection = "datasource=localhost;port=3306; " +
                                      "username=root;password=xyz";
                MySqlConnection myConn = new MySqlConnection(myConnection);
                MySqlCommand SelectCommand = new MySqlCommand
                    ("select * from database.edata where user_name='" +
                         username_txt.Text + "' and password='" 
                         + password_txt.Text + "' ;", myConn);
                MySqlDataReader myReader;
                
                myConn.Open();
                myReader = SelectCommand.ExecuteReader();
                int count = 0;
                while (myReader.Read())
                {
                    count++;
                }
                if (count == 1)
                {
                    MessageBox.Show("Username und Password ist correct");
                    this.Hide();
                    Form2 f2 = new Form2();
                    f2.ShowDialog();
 
                }
                else if (count>1)
                {
                    MessageBox.Show
                        ("Duplicate Username and password ... Access denied");
                }
                else
                {
                    MessageBox.Show
                        ("Username or password not correct ... Please try again");
                } 
                
                myConn.Close();
 
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
 
            }
 
        }
    }
}

Montag, 30. November 2015

C# - Formulare verschönern

Das Formular soll nun noch etwas aufgepeppt werden. Ähnlich wie von Access gewohnt, gibt es die GroupBox (um Username, Password und Login button) und eine PictureBox für die Aufnahme von Bildern.
Aber woher nun die Bilder nehmen? Eine gute Quelle ist IconArchive. Hier können alle möglichen und unmöglichen Bilderr gratis in diversen Auflösungen heruntergeladen werden:

In der Suchbox kann die Kategorie eingegeben werden, im Search Filter links, die gewünschte Auflösung. Bei Mausover erscheinen die möglichen Formate, die angewählt werden können. Das Bild muss dann mit rechter Maustaste und 'Bild speichern unter ....' nur noch heruntergeladen werden.

Ist die Picturebox im Visualstudio ausgewählt, so erscheint oben rechts ein Pfeil in einem Rechteck. Dieser Pfeil dient direkt der Bildauswahl. In der nun erscheinenden Dialogbox kann das Bild 'importiert' werden.

Für Icons in Buttons wird die Grösse 16x16 verwendet. Das Bild wird über die Eigenschaft 'Image' ausgewählt und mit 'ImageAlign' nach Wunsch platziert.


Damit sieht das Formular nun etwa so aus:


C# und mySQL - Login Formular

Nachdem die Anbindung an die SQL Datenbank geglückt ist, erstellen wir doch ein Login Formular. Schliesslich wollen wir die Datenbank nutzen.

Das Formular wird in Windows Forms erstellt und sieht ungefähr so aus:
In mySQL erstellen wir eine Tabelle 'edata' mit den folgenden Feldern:


Mit dem folgenden Code greifen wir nun auf die Daten zu:

using System;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
 
 
namespace First_C_Sharp_App
{
    public partial class Login : Form
    {
         
        public Login()
        {
            InitializeComponent();
        }
 
       
 
        private void btnLogin_Click(object sender, EventArgs e)
        {
            try
            {
                string myConnection = "datasource=localhost;port=3306; " +
                                      "username=root;password=xyz";
                MySqlConnection myConn = new MySqlConnection(myConnection);
                MySqlCommand SelectCommand = new MySqlCommand
                    ("select * from database.edata where user_name='" +
                         username_txt.Text + "' and password='" 
                         + password_txt.Text + "' ;", myConn);
                MySqlDataReader myReader;
                myConn.Open();
                myReader = SelectCommand.ExecuteReader();
                int count = 0;
                while (myReader.Read())
                {
                    count++;
                }
                if (count==1)
                {
                    MessageBox.Show("Username und Password ist correct");
 
                }
                else if (count>1)
                {
                    MessageBox.Show
                        ("Duplicate Username and password ... Access denied");
                }
                else
                {
                    MessageBox.Sho
                        ("Username or password not correct ... Please try again");
                } 
                
                myConn.Close();
 
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
 
            }
 
        }
    }
}
'user_name' und 'password' sind bewusst einfach gehalten, damit man einfach herumspielen kann.
Passwort korrekt, doppelt, falsch ....
Ansonsten müsste die Routine selbst erklärend sein.
Zum Schluss noch ein Tipp: Gibt man im Textfeld 'Password' unter 'Eigenschaften' als 'PasswordChar' z.B. '#' ein, so wird die Eingabe mit diesem Zeichen maskiert, wie es sich für die Eingabe von Passwörtern gehört. Selbstverständlich kann das auch per Coder erledigt werden:
password_txt.PasswordChar = '#';
 Der Code muss aber wo erfolgen? Natürlich nach
 InitializeComponent();
Andernfalls ist das Fenster bereits geöffnet und die Eingabe erscheint im Klartext.

Sonntag, 29. November 2015

C# und mySQL - Connect Database

Nachdem alles eingerichtet ist, kann der Connect folgendermassen durchgeführt werden:
Es wird von einem Windows Form ausgegangen und einem Button 'btnMySQL'. Mit dem folgenden Code wird ein Connect der Datenbank erreicht:

using System;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
 
 
namespace First_C_Sharp_App
{
    public partial class Form1 : Form
    {
        mySqlDataAdapter myDataAdapter;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void btnMySql_Click(object sender, EventArgs e)
        {
            try
            {
                string myConnection = "datasource=localhost;port=3306; "+
                                      "username=root;password=xyz";
                MySqlConnection myConn = new MySqlConnection(myConnection);
                string sql = "SELECT * database.edata ;";
                myDataAdapter = new mySqlDataAdapter(sql, myConn);
                MySqlCommandBuilder cb = new MySqlCommandBuilder();
                myConn.Open();
                DataSet ds = new DataSet();
                MessageBox.Show("Connected");
                myConn.Close();
 
 
            }
            catch (Exception ex )
            {
                MessageBox.Show(ex.Message);
 
            }
        }
 
        private void btnLogin_Click(object sender, EventArgs e)
        {
 
        }
    }
}

Ein erfolgreicher Connect wird durch eine Messagebox quittiert. Bei Fehlern erscheint die entsprechende Systemmeldung.

Von Access nach C# und mySQL - Die Datenbank

C# allein kann Access nicht ersetzen - es braucht eine Datenbank. Dazu gibt es hauptsächlich die 3 folgenden Möglichkeiten:
- Anbindung an eine Access .mdb -> Am Anfang vielleicht für kleinere Projekte sinnvoll
- Verwendung von mySQL -> Für private und kommerzielle Projekte (Lizenz beachten)
- Verwendung von msSQL -> Für kommerzielle Projekte

Für einen Umstieg habe ich mich vorderhand für mySQL entschieden. Auch hier gibt es eine Community Edition.
Die Einrichtung der Datenbank würde den Rahmen dieses Blogs sprengen. Hier gibt es aber eine perfekte Einführung in die Thematik. Ist die Datenbank so eingerichtet, können die folgenden Beispiele direkt verwendet werden.

Von Access nach C# und mySQL

Nach 20 Jahren Access wird es langsam Zeit, sich davon zu verabschieden. Einerseits wird Access von Microsoft nur noch halbherzig weiterentwickelt, auf der andern Seite erüllt Access einfach die aktuellen Ansprüche an eine Programmiersprachre nicht mehr.
Eine gute Alternative ist der Umstieg auf Visual Studio 2015. Micorsoft stellt für kleinere Anwendungen seit einiger Zeit gratis 'Visual Studio Comunitiy' zur Verfügung. Die Lizenzbedingungen sind sehr grosszügig und sind natürlich vor einem kommerziellen Einsatz sorgfältig zu prüfen. Für kleinere Projekte ist der Einsatz der Edition absolut legal! Wächst das Projekt, so sollte der Kauf der Professional Edition ja dann kein Problem darstellen.