MySQL Datenbanken Fehlermeldung

mrmorning

Cadet 3rd Year
Registriert
Dez. 2020
Beiträge
33
Hallo zusammen,
ich möchte eine Datenbank erstellen, die notwendigen Befehle und Verbindungen habe ich schon programmiert, allerdings kommt wenn ich eine Datenbank testweise hinzufügen möchte, diese Fehlermeldung
 

Anhänge

  • Screenshot (89).png
    Screenshot (89).png
    378,2 KB · Aufrufe: 313
Ich würd das so interpretieren, dass du einen Syntaxfehler hast. Wo genau kann ich aber nicht sagen.
 
Dann poste doch mal den Code bzw. die Statements, mit denen du die Datenbank erstellen möchtest.
 
Sorry aber ich habe noch nie einen Code gepostet, wie funktioniert das?
 
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?
 
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.
 
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
 
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.
 
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

  • Screenshot (92).png
    Screenshot (92).png
    187,2 KB · Aufrufe: 251
  • Screenshot (93).png
    Screenshot (93).png
    188,3 KB · Aufrufe: 244
Hi,

so:

Unbenannt.JPG


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
 
  • Gefällt mir
Reaktionen: madmax2010
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
 
Hi,

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
 
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

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


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.


mrmorning schrieb:
Unterschied zwischen MySQL Workbench und Microsoft SQL Server Management Studio?
Zwei komplett verschiedene DBMS. Ersteres funktioniert nur mit MySQL, zweites mit MSSQL.
 
  • Gefällt mir
Reaktionen: Raijin
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......


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");
 
  • Gefällt mir
Reaktionen: GroMag und Helge01
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.
 
  • Gefällt mir
Reaktionen: Enurian
Zurück
Oben