[C#]MySql

Registriert
Apr. 2011
Beiträge
192
Hi liebe Com.
Ich bin gerade dabei eine C# - MySql Verbindung aufzubauen. Wieso kann ich nichts mit der DataGridView(dgv_ausgeben) anzeigen?

PHP:
string myConnectionString = "SERVER=" + tb_host.Text + ";" +
                            "DATABASE=" + tb_database.Text + ";" +
                            "UID=" + tb_user.Text + ";" +
                            "PASSWORD=" + tb_passwort.Text + ";";
            MySqlConnection connection = new MySqlConnection(myConnectionString);

            if (global.connected == false)
            {
                try
                {
                    MySqlCommand command = connection.CreateCommand();
                    command.CommandText = "SELECT * FROM " + tb_table.Text;
                    MySqlDataReader Reader;

                    connection.Open();
                    if (connection.State == ConnectionState.Open)
                        MessageBox.Show("Connection established!", "MySQL Information",
                                        MessageBoxButtons.OK, MessageBoxIcon.Information);

                    MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM " + tb_table.Text, connection);
                    DataSet ds = new DataSet();
                    adapter.Fill(ds, tb_table.Text);
                    this.dgv_tabelle.DataSource = ds.DefaultViewManager;
}

                catch (MySql.Data.MySqlClient.MySqlException ex)
                {
                    MessageBox.Show(ex.Message, "MySQL Exception",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Unknown Exception",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
 
Zuletzt bearbeitet:
Du hast einen lokalen MySQL server installiert? Dann kannst du entweder per MySQL-Konsole oder über ein zusätzliches Tool wie die MySQL Workbench neue DBs auf dem Server anlegen.

Ob .Net Connector und Server dir da helfen können, kann ich dir nicht sagen, hab ich nie benutzt.
 
So zum ausprobieren ist MySQL doch viel zu massiv überbloatet und kompliziert. Würde eher SQLite benutzen. :/
 
Nachdem der TE heute seinen Initial-Post komplett umgeschrieben hat, steht mein Kommentar in keiner Relation zum Thema mehr, somit habe ich meinen Kommentar entfernt...
 
Zuletzt bearbeitet: (TE erstellte komplett neues Thema, Antwort ist somit nicht mehr gültig)
kannst doch einen ganz normalen sql query ausführen lassen mit dem du eine neue datenbank erstellst?
 
Ach man, ich hatte den dienst nicht gestartet -.- und ich habe gedacht das Query ist etwas anderes..

PHP:
string myConnectionString = "SERVER=" + tb_host.Text + ";" +
                            "DATABASE=" + tb_database.Text + ";" +
                            "UID=" + tb_user.Text + ";" +
                            "PASSWORD=" + tb_passwort.Text + ";";
            MySqlConnection connection = new MySqlConnection(myConnectionString);

            if (global.connected == false)
            {
                try
                {
                    MySqlCommand command = connection.CreateCommand();
                    command.CommandText = "SELECT * FROM " + tb_table.Text;
                    MySqlDataReader Reader;

                    connection.Open();
                    if (connection.State == ConnectionState.Open)
                        MessageBox.Show("Connection established!", "MySQL Information",
                                        MessageBoxButtons.OK, MessageBoxIcon.Information);

                    MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM " + tb_table.Text, connection);
                    DataSet ds = new DataSet();
                    adapter.Fill(ds, tb_table.Text);
                    this.dgv_tabelle.DataSource = ds.DefaultViewManager;
}

                catch (MySql.Data.MySqlClient.MySqlException ex)
                {
                    MessageBox.Show(ex.Message, "MySQL Exception",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Unknown Exception",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

Wieso wir in meine DataGridView(gdv_ausgeben) nichts eingetragen?
 
Hi,

so wie ich das sehe (ausser ich ÜBERsehe wieder was) führst du nirgends deine Command aus, kann das sein?

Code:
Reader = command.ExecuteReader();

Habe ich aus diesem Beispiel.

Ich arbeite leider nicht mit dem .NET-Connector, aber lies dir das Beispiel mal durch. Macht meiner Meinung nach auch keinen Sinn erst

Code:
command.CommandText = "SELECT * FROM " + tb_table.Text;

und dann

Code:
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM " + tb_table.Text, connection);

nochmal "SELECT * FROM " + tb_table.Text" zu schreiben.

VG,
Mad


Edit: Ok, du willst wahrscheinlich den Reader nicht mehr verwenden, da du nicht Zeilenweise ausgeben willst sondern in einem DG. Dann wirf ihn aber auch aus dem Code, wenn du was nicht benutzt dann wirf es raus, macht's nur unübersichtlich.

Wieso verwendest du das Ganze nicht wie in diesem Beispiel von MySQL? Anstelle der XML packst du dein DataSet eben einfach als DataSource in dein Grid. Wenn dann nichts drinsteht: Ist die Tabelle gefüllt die du abfrägst?
 
Zuletzt bearbeitet:
Ich habe das jetzt mal probiert:

PHP:
        private void btn_connect_Click(object sender, EventArgs e)
        {
            DataSet myData = new DataSet();
            MySql.Data.MySqlClient.MySqlConnection conn;
            MySql.Data.MySqlClient.MySqlCommand cmd;
            MySql.Data.MySqlClient.MySqlDataAdapter myAdapter;

            conn = new MySql.Data.MySqlClient.MySqlConnection();
            cmd = new MySql.Data.MySqlClient.MySqlCommand();
            myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter();
            BindingSource source = new BindingSource();
            
            conn.ConnectionString = "SERVER=" + tb_host.Text + ";" +
                                    "DATABASE=" + tb_database.Text + ";" +
                                    "UID=" + tb_user.Text + ";" +
                                    "PASSWORD=" + tb_passwort.Text + ";";

            try
            {
                source.DataSource = GetData("SELECT * FROM " + tb_table.Text);
                dgv_tabelle.DataSource = source;
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                MessageBox.Show(ex.Message, "Report could not be created",
                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }
        public static DataTable GetData(string sqlCommand)
        {
            string connectionString = "SERVER=" + tb_host.Text + ";" +
                                    "DATABASE=" + tb_database.Text + ";" +
                                    "UID=" + tb_user.Text + ";" +
                                    "PASSWORD=" + tb_passwort.Text + ";";

            SqlConnection northwindConnection = new SqlConnection(connectionString);

            SqlCommand command = new SqlCommand(sqlCommand, northwindConnection);
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = command;

            DataTable table = new DataTable();
            table.Locale = System.Globalization.CultureInfo.InvariantCulture;
            adapter.Fill(table); //Hier bekomme ich einen Fehler

Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: Named Pipes Provider, error: 40 - Verbindung mit SQL Server konnte nicht geöffnet werden)


            return table;

        }
 
Ich weiß einfach nicht wie ich den fehler behebe..

Schau code oben:
//Hier bekomme ich einen Fehler

Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: Named Pipes Provider, error: 40 - Verbindung mit SQL Server konnte nicht geöffnet werden)
 
Hi,

und wenn du nicht die Inhalte der Textboxen nimmst sondern direkt festlegst, welche Servereinstellungen benutzt werden sollen?

Die Exception ist ja relativ eindeutig: SQL Verbindung kann nicht hergestellt werden.

Gib mal deine übergebene "SQL COMMAND" fest ein. Erstmal keine Dynamik. Mache es wie in diesem Beispiel:

http://dev.mysql.com/doc/refman/5.1/de/connector-net-using-crystal.html und schau ob das geht. Wenn das geht können wir schon mal was ausschließen.

Oder du lädst dein komplettes Projekt hoch, dann schau ichs mir direkt im VS an.

VG,
Mad
 
Hi,

alles klar, ich installier mir schnell MySQL und schau es mir an.

VG,
Mad

Edit: Welche Version vom MySQL-Connector hast du benutzt? Damit ich die gleichen Voraussetzungen hab...

Den hier, also den ADO.NET Connector? Oder einen anderen? Oder den hier, also den ODBC-Connector?
 
Zuletzt bearbeitet:
Hi,

alles klar. Ich teste und melde mich dann.

VG,
Mad
Ergänzung ()

Hi,

Ich habe deine Probleme beheben können.

Code:
 private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                DataSet myData = new DataSet();
                MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();
                MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
                MySql.Data.MySqlClient.MySqlDataAdapter myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter();

                conn.ConnectionString = 
                "SERVER=" + tb_host.Text + ";" +
                "DATABASE=" + tb_database.Text + ";" +
                "UID=" + tb_user.Text + ";" +
                "PASSWORD=" + tb_passwort.Text + ";";

                cmd.CommandText = "SELECT * FROM " + tb_table.Text + ";";
                cmd.Connection = conn;

                myAdapter.SelectCommand = cmd;
                myAdapter.Fill(myData);

                dgv_tabelle.DataSource = myData.Tables[0].DefaultView;
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                MessageBox.Show(ex.Message, "Report could not be created",
                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception exep)
            {
                MessageBox.Show(exep.Message);
            }
        }

Ersetze deinen Eventhandler beim Button-Click hiermit, wirf die "Get Data" komplett raus und fertig.

Zu deiner Frage "Warum kann ich nicht auf die Textboxen zugreifen": Du musst die Fehlermeldungen lesen ;) Deine Methode war "static" deklariert, dann brauchst du einen Verweis auf dein Objekt. Habe ich auch gleich mitbehoben :)

VG,
Mad
 
Zuletzt bearbeitet:
Daaaankesehr ;) ich bin 16 und hab mir seit 14 eher seit 15 programmieren selbst beigebracht - deswegen wenig struktur etc..
Schulde dir was würd mir gern revangieren :)

Könntest du mir auch sagen wieso es so gehört oder so ähnlich :D
 
Zuletzt bearbeitet:
Hi,

ach, kein Thema. Ich mach's beruflich. Wenn ich mal Zeit und Luft habe helf ich gern.

Viel Spaß noch mit deinem Programm. Wenn noch was ist einfach melden.

VG,
Mad
 
Danke dir, schönen abend noch.

MG Lukas

Eine frage hätte ich noch wie kann ich die schön Resizen also das das "grau" nicht da ist, bzw. wie ich am einen Datensatz hineinschreibe..
 
Zuletzt bearbeitet:
Hi,

Könntest du mir auch sagen wieso es so gehört oder so ähnlich

Naja, eigentlich ist es so auch noch nicht perfekt. Ich würde im Event-Handler "Button-Click" nur eine Methode "MacheIrgendwas()" aufrufen, in der ich dann den Rest drin hab.

Ich kann dir den Code bei Gelegenheit auch noch durchkommentieren und schreiben, was wo an welcher Stelle genau passiert.

Warum es bei dir nicht ging (also die Exception): Du hast versucht, eine DataTable zu befüllen, das geht so nicht. So kann man nu ein DataSet füllen meines Wissens, da du bei der Abfrage ("SELECT * FROM...") eine Tabelle zurückkriegst. Und aus diesem DataSet schnappt man sich dann die erste Tabelle ("Table[0]") und benutzt diese als DatenQuelle im DataGridView.

Eine frage hätte ich noch wie kann ich die schön Resizen also das das "grau" nicht da ist, bzw. wie ich am einen Datensatz hineinschreibe..

Den Satz verstehe ich nicht so ganz. Was genau möchtest du wissen? :)

VG,
Mad
 
Wenn ich in meine DataGridView einen Datensatz schreibe, ist die DataGirdView höchstwarscheindlich zu groß/klein und dann sieht ma eben diesen grauen rahmen..
[Screeny]

Wenn ich nun einen neuen Datensatz hineinschreiben möchte also eine neue Zeile, wie mache ich es am bessten, denn wenn ich normal

PHP:
INSERT INTO
    News(Autor, Titel, Inhalt, Datum)
VALUES
    ("Ich",
     "Meine erste News",
     "Hiermit teste ich wie man Datensätze in MySQL einfügt",
    NOW());

So schreiben würde.. Jedoch möchte ich das es automatisch abläuft, dh. das ich
PHP:
News(Autor, Titel, Inhalt, Datum)
automatisiere.. aber wie :\

LG
 

Anhänge

  • C#.png
    C#.png
    57 KB · Aufrufe: 183
Zuletzt bearbeitet:
Zurück
Oben