C# - Verbindung mit mySQL datenbank

regenschirm

Cadet
Mitglied seit
02.10.2009
Beiträge
7
Renomée
0
Hallo :-)

Ich habe folgendes Problem. Ich möchte ein Programm in C# schreiben (Formanwendung), mit dem ich Daten aus eine SQL-Datenbank auslesen, einschreiben und ändern möchte. Ich hab mich schon grün und blau gegoogelt und komme einfach nicht weiter.

Mit SQL selbst habe ich schon in php gearbeitet. C# grob verstehe ich auch.

Die Datenbank habe ich bereits in XAMPP erstellt, aber es will einfach nicht klappen.

Habt ihr vielleicht Tipps für mich?

Danke schon mal, jeder kleine Tipp hilft mir :-)
 
Danke TiKu, mit dem .NET Connector klappt die Verbindung einwandfrei. Ich kann verbinden und auslesen. Für die Verwendung des Connectors hab ich eine super "Beschreibung" gefunden.

httx://wwx.codeplanet.eu/tutorials/csharp/5-verbindung-zum-mysql-server-mit-csharp.html

Jetzt möchte ich allerdings etwas anhängen, die Werte aber aus einer Textbox auslesen. Sobald in der Textbox keine Zahl steht, meldet der Debugger einen Fehler bei "myCommand.ExecuteNonQuery();". Zahlen werden problemlos angehängt.

Ich hab den INSERT schon mit den verschiedensten Varianten probiert.

string abfrage = "INSERT INTO kunden (Vorname, Nachname) VALUES (" + txtVorname.Text + "," + txtNachname.Text + ")";

string abfrage = "INSERT INTO kunden (Vorname, Nachname) VALUES ( 'txtVorname.Text', 'txtNachname.Text')"; //in der Datenbank steht dann "txtVorname.Text' anstelle des Wertes aus der Textbox

etc.


Ich finde einfach keine Lösung, womit ich den ExecuteNonQuery ersetzten kann, damit Text ausgelesen und eingetragen wird.

Vielleicht habt Ihr eine Idee für mich :-)

Danke schon mal
 
Code:
string abfrage = "INSERT INTO kunden (Vorname, Nachname) VALUES ([B][SIZE="5"]'[/SIZE][/B]" + txtVorname.Text + "[B][SIZE="5"]'[/SIZE][/B],[B][SIZE="5"]'[/SIZE][/B]" + txtNachname.Text + "[B][SIZE="5"]'[/SIZE][/B])";
Abfragen solltest du aber nicht auf diese Art zusammenbauen, da deine Anwendung so ganz schnell anfällig für SQL-Injections wird. Es gibt im .NET-Framework eine (mehrere?) Klasse(n) zum Zusammenbauen von SQL-Abfragen. Der Name ist mir allerdings grad entfallen.
 
Die Datenbank sollte so gut wie möglich unumgänglich sein. Das Programm hängt später mit der Datenbank zusammen, welche wiederum mit einer Homepage kommuniziert und daher von Zugriffen so gut als möglich geschützt sein sollte.

Welchen Aufbau würdest du mir empfehlen? In dem Fall werde ich morgen mal wieder ne Runde googeln. Könntest du mir den Namen posten falls er dir wieder einfällt bitte?

Danke schon mal für deine Hilfe :-)
 
SqlCommand müsste die Klasse sein, die hat eine Eigenschaft Parameters. Obige Query müsste dann glaube ich so aussehen:
Code:
SqlCommand cmd = new SqlCommand("INSERT INTO kunden (Vorname, Nachname) VALUES (@vorname;, @nachname;)");
cmd.Parameters.AddWithValue("vorname", txtVorname.Text);
cmd.Parameters.AddWithValue("nachname", txtNachname.Text);
cmd.ExecuteNonQuery();
 
Code:
            string myConnectionString = "SERVER=localhost;" +
                                        "DATABASE=disini;" +
                                        "UID=root;";

            MySqlConnection connection = new MySqlConnection(myConnectionString);

            try
            {
                    connection.Open();
                    MessageBox.Show("Verbindung erfolgreich");

                    MySqlCommand cmd = new MySqlCommand("INSERT INTO kunden (Vorname, Nachname) VALUES (@vorname;, @nachname;)");
                    cmd.Parameters.AddWithValue("vorname", txtVorname.Text);
                    cmd.Parameters.AddWithValue("nachname", txtNachname.Text);
                    cmd.ExecuteNonQuery();

                    MessageBox.Show("erledigt");
            }

            catch
            {
                MessageBox.Show("Verbindung mit der Datenbank fehlgeschlagen");
            }

Ich habs jetzt so versucht, er geht in den try block, gibt mir: "verbindung erfolgreich" und gleich im anschluss "Verbindung mit der Datenbank fehlgeschlagen"

woran könnte dass schon wieder liegen?
 
Du musst der MySqlCommand-Instanz sagen, welche Verbindung sie nutzen soll.
 
so, nach langer Pause komm ich endlich wieder dazu, weiter zu machen. Ich hoffe ihr könnt mir weiterhin helfen :-)

Ich hab jetzt begonnen den ganzen Zugriff auf die Datenbank in eine eigenen Klasse auszulagern, da diese öfter verwendet wird. Mein Problem ist aber immer noch das Einschreiben in die Datenbank.
Öffnen und Schließen der Datenbank durch die eigene Klasse klappt prima.

meine neue Klasse sieht so aus:

Code:
    class datenbank
    {
        protected string myConnectionString = "SERVER=localhost; DATABASE=disini; UID=root;";
        string vorname;
        string nachname;
        string tabelle;
        
        public datenbank(string tabelle, string vorname, string nachname)
        {
            this.vorname = vorname;
            this.nachname = nachname;
            this.tabelle = tabelle;
        }

//öffnen und schließen hab ich rausgelöscht, die klappen einwandfrei

        public void füllen(string vorname, string nachname)	//klappt auch ohne Parameter nicht
        {
            MySqlConnection connection = new MySqlConnection(myConnectionString);
            //string myQuery = "INSERT INTO " + tabelle + "(Vorname, Nachname)" +
            //    "VALUES (" + vorname + "," + nachname + ")";
            string myQuery = "INSERT INTO kunden (Vorname, Nachname) " +
            "VALUES ('Wolfgang', 'Fischer')";
            
            MySqlCommand myCommand = new MySqlCommand(myQuery);
            myCommand.Connection = connection;
            connection.Open();
            myCommand.ExecuteNonQuery();
            myCommand.Connection.Close();
        }
    }

wenn der Block zum „füllen“ in der Hauptklasse steht klappts, aber so nicht mehr!! durch den Konstruktur versuche ich die Werte aus der Textbox rüberzuholen. Sobald ich aber den auskommentierten Bereich anwenden möchte, klappts auch in der Hauptklasse nicht mehr!

Habt ihr eine Idee wie ich allgemein die Werte aus der Textbox holen kann? Ohne Injections etc. Ich sitz echt auf der Leitung!

Danke :-)
 
Es klappt :D ich weiß nicht was ich damals falsch gemacht habe, da hab ich den Code ja auch reinkopiert. aber Hauptsache es klappt. vielen vielen dank :D
 
Zurück
Oben Unten