Benutzer mit den meisten Antworten
MySQL Connection Problem

Frage
-
Hallo,
zum 3. mal in kurzer Zeit muss ich etwas nerven. Ich benutze die unten folgenden Codes um auf eine MySQL-Datenbank zu zugreifen, aber irgendwie schreibt er sobald er seine Verbindung aufbaut nichts in die jeweilige Tabelle und die Nachricht in der MessageBox danach kommt trotzdem. Den Connecter und die MySQL.Data habe ich bei den Verweisen hinzugefügt.
Form (wo die Verbindung aufgebaut wird):
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using MySql.Data.MySqlClient; using System.Windows.Forms; using MySQLClass; namespace GuideApp { public partial class Registrierungsformular : Form { MySQLClient sqlClient = new MySQLClient("www.db4free.net", "guidesapp", "guidesapp", "********", 3306, 50); public Registrierungsformular() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) {
// Test ob es funktioniert sqlClient.Insert("table", "nickname", "test"); MessageBox.Show("Übermittelt!"); } private void button2_Click(object sender, EventArgs e) { Login frm1 = new Login(); frm1.Show(); this.Close(); } protected override void OnFormClosing(FormClosingEventArgs e) { base.OnFormClosing(e); Application.Exit(); } } }
Definitionen:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using MySql.Data.MySqlClient; namespace MySQLClass { class MySQLClient { MySqlConnection conn = null; #region Constructors public MySQLClient(string hostname, string database, string username, string password) { conn = new MySqlConnection("host=" + hostname + ";database=" + database +";username=" + username +";password=" + password +";"); } public MySQLClient(string hostname, string database, string username, string password, int portNumber) { conn = new MySqlConnection("host=" + hostname + ";database=" + database + ";username=" + username + ";password=" + password + ";port=" + portNumber.ToString() +";"); } public MySQLClient(string hostname, string database, string username, string password, int portNumber, int connectionTimeout) { conn = new MySqlConnection("host=" + hostname + ";database=" + database + ";username=" + username + ";password=" + password + ";port=" + portNumber.ToString() + ";Connection Timeout=" + connectionTimeout.ToString() +";"); } #endregion #region Open/Close Connection private bool Open() { try { conn.Open(); return true; } catch { return false; } } private bool Close() { { conn.Close(); return true; } catch { return false; } } #endregion public void Insert(string table = "name", string column ="guidesapp", string value = "John") { string query = "INSERT INTO " + table + " (" + column + ") VALUES (" + value + ")"; try { if (this.Open()) { MySqlCommand cmd = new MySqlCommand(query, conn); cmd.ExecuteNonQuery(); this.Close(); } } catch { } return; } public void Update(string table, string SET, string WHERE) { string query = "UPDATE " + table + " SET " + SET + " WHERE " + WHERE + ""; if (this.Open()) { try { MySqlCommand cmd = new MySqlCommand(query, conn); cmd.ExecuteNonQuery(); this.Close(); } catch { this.Close(); } } return; } public void Delete(string table, string WHERE) { string query = "DELETE FROM " + table + " WHERE " + WHERE + ""; if (this.Open()) { try { MySqlCommand cmd = new MySqlCommand(query, conn); cmd.ExecuteNonQuery(); this.Close(); } catch { this.Close(); } } return; } public Dictionary<string, string> Select(string table, string WHERE) { string query = "SELECT * FROM " + table + " WHERE " + WHERE + ""; Dictionary<string, string> selectResult = new Dictionary<string, string>(); if (this.Open()) { MySqlCommand cmd = new MySqlCommand(query, conn); MySqlDataReader dataReader = cmd.ExecuteReader(); try { while (dataReader.Read()) { for (int i = 0; i < dataReader.FieldCount; i++) { selectResult.Add(dataReader.GetName(i).ToString(), dataReader.GetValue(i).ToString()); } } dataReader.Close(); } catch { } this.Close(); return selectResult; } else { return selectResult; } } public int Count(string table) { string query = "SELECT Count(*) FROM " + table + ""; int Count = -1; if (this.Open() == true) { try { MySqlCommand cmd = new MySqlCommand(query, conn); Count = int.Parse(cmd.ExecuteScalar() + ""); this.Close(); } catch { this.Close(); } return Count; } else { return Count; } } } }
Und hier einen Screenshot der Datenbank, um zu wissen ob Tables etc. richtig eingesetzt wurden:
MfG Markus Ö.
- Bearbeitet Bashesz Freitag, 6. September 2013 16:56
Antworten
-
Hallo Markus,
die erste Meldung besagt, dass Du eine Spalte "test" in deinem SQL Statement ansprichst, die es in der entsprechenden Tabelle aber nicht gibt.
Die zweite Meldung will dir sagen, dass Du in einem INSERT Statement einem Feld, dass keine NULL Werte erlaubt und auch keinen Standardwert hat, keinen Wert zuweist.
Also entweder gibst Du der Spalte "nickname" einen Wert mit, erlaubst NULL Werte oder definierst einen Standardwert. Das gilt natürlich auch für alle anderen Spalten in der Tabelle.
Lies dir hierfür mal die MySQL Dokumentation zu CREATE TABLE durch. Da findest Du auch Beispiele, wie man sowas machen kann.
http://dev.mysql.com/doc/refman/5.1/de/create-table.html
PhpMyAdmin sollte das über die Oberfläche auch ermöglichen, da ist dann hier aber der falsche Platz für Fragen :)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Ciprian Bogdan Montag, 9. September 2013 13:17
- Als Antwort markiert Marcel RomaModerator Freitag, 4. Oktober 2013 08:25
Alle Antworten
-
Hallo Markus,
ich würde dich bitten, beim nächsten mal nicht einfach alles wild zu posten und uns über alle Details im unklaren zu lassen, sondern detaillierter zu erklären, was Du wo machen willst, was genau wo nicht funktioniert und vor allem, welche Fehlermeldung Du erhältst (die genaue und vollständige Meldung ist hierbei sehr wichtig)
Da Du um die Command.ExecuteNonQuery Aufrufe ein try ... catch Konstrukt ohne weitere Fehlerbehandlung gebaut hast, wird jeder Fehler einfach übergangen. Das solltest Du zuerst mal ändern und im catch Zweig den genauen Fehler protokollieren und den dann hier posten.
Nachtrag: Meine Glaskugel meinte grade noch, dass es zumindest an deinem ziemlich schlecht gewählten Tabellennamen "table" liegt. TABLE ist ein Schlüsselwort in sämtlichen SQL Dialekten und sollte daher gar nicht erst verwendet werden. Wenn es sich, aus welchem Grund auch immer, nicht vermeiden lässt, schreibt man das dann so [table]. Besser ist es aber, seine Objekte mit sprechenden Namen zu versehen, die kein Schlüsselwort darstellen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo,
Entschuldigung falls ich mich schlecht Ausdrücke. Besuche erst das 2. Jahr einer HTL, daher ist es für mich etwas schwierig. :)
Ich habe jetzt die try catch funktion folgender Maßen geschrieben:
try { if (this.Open()) { //Opens a connection, if succefull; run the query and then close the connection. MySqlCommand cmd = new MySqlCommand(query, conn); cmd.ExecuteNonQuery(); this.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); }
Und als Meldung kam nach ein paar Sekunden folgende:
Unknown column 'test' in 'field list'
In der Datebbank habe ich jetzt ebenfalls table zu guideapp_db geändert und die jeweiligen "Anweißungen" umgeschrieben.
MfG Markus Ö.
EDIT:
Habe eben herum "experimentiert" und festgestellt, das er bereits auf die Datenbank connecten kann (falls ich mich nicht irre) und nun folgende Meldung kommt:
Field 'nickname' doesnt have a default value.
- Bearbeitet Bashesz Freitag, 6. September 2013 18:33
-
Hallo Markus,
die erste Meldung besagt, dass Du eine Spalte "test" in deinem SQL Statement ansprichst, die es in der entsprechenden Tabelle aber nicht gibt.
Die zweite Meldung will dir sagen, dass Du in einem INSERT Statement einem Feld, dass keine NULL Werte erlaubt und auch keinen Standardwert hat, keinen Wert zuweist.
Also entweder gibst Du der Spalte "nickname" einen Wert mit, erlaubst NULL Werte oder definierst einen Standardwert. Das gilt natürlich auch für alle anderen Spalten in der Tabelle.
Lies dir hierfür mal die MySQL Dokumentation zu CREATE TABLE durch. Da findest Du auch Beispiele, wie man sowas machen kann.
http://dev.mysql.com/doc/refman/5.1/de/create-table.html
PhpMyAdmin sollte das über die Oberfläche auch ermöglichen, da ist dann hier aber der falsche Platz für Fragen :)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Ciprian Bogdan Montag, 9. September 2013 13:17
- Als Antwort markiert Marcel RomaModerator Freitag, 4. Oktober 2013 08:25
-
Hi Markus,
ist dieser Thread noch aktuell ? Bist Du hier inzwischen weitergekommen ?
Gruß,
Ciprian
Ciprian Bogdan, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.