Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
MySQL Datenbanken Fehlermeldung
- Ersteller mrmorning
- Erstellt am
daniel_m
Lt. Commander
- Registriert
- Mai 2005
- Beiträge
- 1.746
Irgendwas tut dein VS-Projekt bzw. der Button in deinem Form ja, wenn du drauf klickst. Und diesen Code, den bräuchte man um überhaupt sagen zu können wo der Fehler liegt.
Aber ich habe in einem deiner anderen Threads gelesen, dass das ein Projekt für das Studium ist. Meinst du nicht auch, dass da ein wenig mehr Eigeninitiative, z. B. auf Basis verschiedener Online-Tutorials, erforderlich wäre?
Aber ich habe in einem deiner anderen Threads gelesen, dass das ein Projekt für das Studium ist. Meinst du nicht auch, dass da ein wenig mehr Eigeninitiative, z. B. auf Basis verschiedener Online-Tutorials, erforderlich wäre?
Entschuldigung, aber was denkst du denn was ich die ganze Zeit mache? Ich schaue mir ein Tutorial nach dem anderen an, weil man dadurch am Besten lernt. Nur komme ich bei diesem Problem nicht weiter. Und wenn es zu dem Problem ein Tutorial geben würde, hätte ich sicher nicht hier gefragt. Sorry aber sowas macht mich wütend.
Madman1209
Fleet Admiral
- Registriert
- Nov. 2010
- Beiträge
- 28.100
Hi,
kriegen wir noch Code / SQL Statements zu sehen, so dass man dir sagen kann, wo der Syntaxfehler ist? Und: ist es ein Studienprojekt?
VG,
Mad
kriegen wir noch Code / SQL Statements zu sehen, so dass man dir sagen kann, wo der Syntaxfehler ist? Und: ist es ein Studienprojekt?
VG,
Mad
daniel_m
Lt. Commander
- Registriert
- Mai 2005
- Beiträge
- 1.746
Da kannst du gerne wütend werden, aber ich habe dich lediglich gebeten den Code zu posten, den du bis jetzt in deinem Visual Studio Projekt geschrieben hast, denn nur damit lässt sich das Problem erkennen.
Wenn du das Projekt einfach nur irgendwo geladen und geöffnet hast, kannst du das ja als Hinweis verstehen dass hinter dem Form noch mehr steckt und selbst herausfinden was das sein könnte.
Wenn du das Projekt hingegen selbst erstellt hast, sollte es doch ein leichtes sein den Code zu posten, denn nur damit lässt sich das Problem lösen.
Wenn du das Projekt einfach nur irgendwo geladen und geöffnet hast, kannst du das ja als Hinweis verstehen dass hinter dem Form noch mehr steckt und selbst herausfinden was das sein könnte.
Wenn du das Projekt hingegen selbst erstellt hast, sollte es doch ein leichtes sein den Code zu posten, denn nur damit lässt sich das Problem lösen.
Hey Madman1209, ich weiß leider immernoch nicht wie man einen Quellcode postet. Falls mir das jemand nochmal kurz erklären kann, könnte ich ihn gerne posten. Ansonsten kann ich zuerst mit Screenshots dienen.
Anhänge
Madman1209
Fleet Admiral
- Registriert
- Nov. 2010
- Beiträge
- 28.100
Hi,
so:
Bei "create database" etc fliegt er auf die Nase? Dann mach doch bitte mal da einen Breakpoint und gib das komplette SQL Statement aus und poste das hier.
VG,
Mad
so:
Bei "create database" etc fliegt er auf die Nase? Dann mach doch bitte mal da einen Breakpoint und gib das komplette SQL Statement aus und poste das hier.
VG,
Mad
C#:
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 Datenbank_Test
{
public partial class Datenbank_Neu : Form
{
string Connection = GlobalVariables.GlobalMySQLConnection;
public Datenbank_Neu()
{
InitializeComponent();
}
private void btn_CreateDatabase_Click(object sender, EventArgs e)
{
string QueryCreateDB = "create database" + txtbox_CreateDB.Text + ";";
MySqlConnection conDataBase = new MySqlConnection(Connection);
MySqlCommand cmdDatabase = new MySqlCommand(QueryCreateDB, conDataBase);
try
{
conDataBase.Open();
cmdDatabase.ExecuteNonQuery();
conDataBase.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
Dies ist der Quellcode der Form, wo die Datenbanken neu erstellt werden sollen
Madman1209
Fleet Admiral
- Registriert
- Nov. 2010
- Beiträge
- 28.100
Hi,
bitte wie gesagt Breakpoint und das komplette SQL Statement, das du absetzen willst, posten.
VG,
Mad
bitte wie gesagt Breakpoint und das komplette SQL Statement, das du absetzen willst, posten.
VG,
Mad
C#:
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 Datenbank_Test
{
public partial class MDI : Form
{
Datenbank_Neu db_neu;
public MDI()
{
InitializeComponent();
}
private void neueDatenbankToolStripMenuItem_Click(object sender, EventArgs e)
{
if (db_neu == null)
{
db_neu = new Datenbank_Neu();
db_neu.MdiParent = this;
db_neu.WindowState = FormWindowState.Maximized; //Neue Datenbank wird in voller Größe angezeigt.
db_neu.Show();
db_neu.FormClosed += new FormClosedEventHandler(Datenbank_Neu_FormClosed);
}
}
private void Datenbank_Neu_FormClosed(object sender, FormClosedEventArgs e)
{
db_neu = null;
}
}
}
Dies ist der Quellcode der Form, welche bei Programmaufruf als erstes gestartet wird
Ergänzung ()
Okay einen moment
daniel_m
Lt. Commander
- Registriert
- Mai 2005
- Beiträge
- 1.746
Beim "create database" könnte ein "if not exists" helfen, falls du versehentlich einen Namen eingibst der schon existiert. Falls das passiert, sollte es aber auch kein Syntaxfehler geben, sondern eine entsprechende Meldung.
Poste doch bitte auch noch mal den Inhalt der GlobalVariables, möglicherweise schlägt schon die Verbindung zum MySQL Server fehl.
Edit:
Ersetze mal das
durch
bzw. ergänze die beiden Leerzeichen im Code.
Ohne die Leerzeichen würde das Statement so aussehen "create databaseEINGEGEBENERNAME;".
Poste doch bitte auch noch mal den Inhalt der GlobalVariables, möglicherweise schlägt schon die Verbindung zum MySQL Server fehl.
Edit:
Ersetze mal das
Code:
"create database" + txtbox_CreateDB.Text + ";"
durch
Code:
"create database " + txtbox_CreateDB.Text + " ;"
bzw. ergänze die beiden Leerzeichen im Code.
Ohne die Leerzeichen würde das Statement so aussehen "create databaseEINGEGEBENERNAME;".
Zuletzt bearbeitet:
Ich habe nun einen Breakpoint gesetzt bei "create database" gesetzt. Wenn ich nun auf Starten klicke, kommt keine Fehlermeldung mehr. Aber warum ist das so?
Das SQL Statement ist doch soweit ich weiß nur die Zeile mit "create database", da ich ja quasi nichts in der Art wie SELECT FROM verwende oder ?
Im Anhang sind die GlobalVariables
@ daniel_m
Vielen Dank, das war der Fehler. Nun funktioniert es
Und Madman dir natürlich auch vielen Dank
Ich habe aber noch eine andere Frage und zwar, arbeite ich ja im Moment mit MySQL Workbench. Was ist denn der spezielle Unterschied zwischen MySQL Workbench und Microsoft SQL Server Management Studio?
Das SQL Statement ist doch soweit ich weiß nur die Zeile mit "create database", da ich ja quasi nichts in der Art wie SELECT FROM verwende oder ?
Im Anhang sind die GlobalVariables
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Datenbank_Test
{
class GlobalVariables
{
public static string GlobalMySQLConnection = "server = localhost; port=3306; username=root; password=test";
public static string EditorMySQLConnection = "server = localhost; port=3306; username=root; password=test; database=mysqleditor;";
}
}
Ergänzung ()
@ daniel_m
Vielen Dank, das war der Fehler. Nun funktioniert es
Und Madman dir natürlich auch vielen Dank
Ergänzung ()
Ich habe aber noch eine andere Frage und zwar, arbeite ich ja im Moment mit MySQL Workbench. Was ist denn der spezielle Unterschied zwischen MySQL Workbench und Microsoft SQL Server Management Studio?
Zuletzt bearbeitet:
MySQL und MSSQL sind erstmal zwei unterschiedliche relationale Datenbanken-Engines. Das eine Quelloffen mit Enterpriseunterstützung, das andere proprietär und komerziell(?). Workbench und MSSQL Server Management Studio sind dementsprechend einfach nur grafische Datenbankverwaltungstools für den schnellen Einstieg.
Ein Userinput ungefiltert ins SQL-Query übernehmen... nice.
Zwei komplett verschiedene DBMS. Ersteres funktioniert nur mit MySQL, zweites mit MSSQL.mrmorning schrieb:Unterschied zwischen MySQL Workbench und Microsoft SQL Server Management Studio?
Raijin
Fleet Admiral
- Registriert
- Nov. 2007
- Beiträge
- 18.285
Auch wenn das Problem scheinbar schon gelöst wurde, möchte ich noch auf ein weiteres Problem hinweisen:
SQL Injection
Es ist eine ganz schlechte Idee, den Inhalt einer Textbox ungeprüft in einem SQL-Statement zu verknüpfen und dann auszuführen. Das ist ein gängiger Angriffsvektor, der schon so manchem Online-Shop das Genick gebrochen hat, weil ein spaßiger Geselle einen ganz speziellen "Suchbegriff" in die Suchbox des Shops eingegeben hat.
Bitte gewöhne dir daher von Anfang an, entweder den String auf Plausibilität zu prüfen (enthaltene Begriffe prüfen und ggfs das fertige SQL-Statement NICHT ausführen) oder besser noch mit SQLCommands und Parametern zu arbeiten. Der zweite Weg ist zu bevorzugen, weil dabei die Klassenbibliothek den eigentlichen SQL-Befehl zusammenbaut und dabei zB auf Typisierung achtet. Dadurch wird effektiv verhindert, dass sich in einem vermeintlichen Suchbegriff, der per Stringverkettung ins Statement eingebaut werden soll, ein bösartiges SQL-Statement versteckt, dass dir im schlimmsten Fall die ganze Datenbank zerschießt... Nebenbei spart man sich auch noch die Handhabung mit Hochkommata für Strings und ggfs die Umwandlung von "1,234" in "1.234" und dergleichen.
Das nennt sich Parameterized Query. Ich rate dringend dazu, dir das grundsätzlich anzugewöhnen, selbst wenn du am Ende der einzige Nutzer deines Programms sein solltest. Wenn man es immer so macht, ist es egal ob das eine Anwendung für dich allein oder für Tausende fremder Nutzer ist. Gewöhnt man sich das nicht an, baut man am Ende Software auch für fremde Nutzer mit dieser Sicherheitslücke......
SQL Injection
Es ist eine ganz schlechte Idee, den Inhalt einer Textbox ungeprüft in einem SQL-Statement zu verknüpfen und dann auszuführen. Das ist ein gängiger Angriffsvektor, der schon so manchem Online-Shop das Genick gebrochen hat, weil ein spaßiger Geselle einen ganz speziellen "Suchbegriff" in die Suchbox des Shops eingegeben hat.
Bitte gewöhne dir daher von Anfang an, entweder den String auf Plausibilität zu prüfen (enthaltene Begriffe prüfen und ggfs das fertige SQL-Statement NICHT ausführen) oder besser noch mit SQLCommands und Parametern zu arbeiten. Der zweite Weg ist zu bevorzugen, weil dabei die Klassenbibliothek den eigentlichen SQL-Befehl zusammenbaut und dabei zB auf Typisierung achtet. Dadurch wird effektiv verhindert, dass sich in einem vermeintlichen Suchbegriff, der per Stringverkettung ins Statement eingebaut werden soll, ein bösartiges SQL-Statement versteckt, dass dir im schlimmsten Fall die ganze Datenbank zerschießt... Nebenbei spart man sich auch noch die Handhabung mit Hochkommata für Strings und ggfs die Umwandlung von "1,234" in "1.234" und dergleichen.
Das nennt sich Parameterized Query. Ich rate dringend dazu, dir das grundsätzlich anzugewöhnen, selbst wenn du am Ende der einzige Nutzer deines Programms sein solltest. Wenn man es immer so macht, ist es egal ob das eine Anwendung für dich allein oder für Tausende fremder Nutzer ist. Gewöhnt man sich das nicht an, baut man am Ende Software auch für fremde Nutzer mit dieser Sicherheitslücke......
Code:
// bad idea
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = "+user_continent;
// besser
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = @Continent";
cmd.Parameters.AddWithValue("@Continent", "North America");
Hayda Ministral
Banned
- Registriert
- Nov. 2017
- Beiträge
- 7.835
Der TE hat gerade die ersten Versuche eine DB per Programm zu erstellen mehr oder weniger erfolgreich bewältigt. Der TE kämpft derzeit erkennbar an allen Fronten mit noch fehlendem oder unvollständigem Wissen, mit den Werkzeugen, mit den Konzepten, den Fehlermeldungen,...
Glaubt ihr wirklich, es sei hilfreich in der Situation und in dieser Phase schon mit irgendwelchen Securityfragen und hochwohlgeborenen Diskussionen zu Designentscheidungen zu kommen? In meinen Augen verwirrt das eher als das es hilft. Natürlich sollte man so ein Programm niemals auf die Menschheit loslassen - aber ganz ehrlich, das wird doch wohl eh nicht geplant sein.
Glaubt ihr wirklich, es sei hilfreich in der Situation und in dieser Phase schon mit irgendwelchen Securityfragen und hochwohlgeborenen Diskussionen zu Designentscheidungen zu kommen? In meinen Augen verwirrt das eher als das es hilft. Natürlich sollte man so ein Programm niemals auf die Menschheit loslassen - aber ganz ehrlich, das wird doch wohl eh nicht geplant sein.
Ähnliche Themen
- Antworten
- 6
- Aufrufe
- 1.029
- Antworten
- 4
- Aufrufe
- 1.120
- Antworten
- 2
- Aufrufe
- 420