Benutzer mit den meisten Antworten
Frage zur dataGridView in c#

Frage
-
Hallo Leute,
ich bin im Umgang mit C#, Visual Studio 2010 und MySql noch Anfänger und habe diesen Quelltext geschrieben:
String sql = "SELECT * FROM `"+tabelleAnzeigenComboBox3.Text+"`"; DataTable datatable = new DataTable(); MySqlDataAdapter dataAdapter = new MySqlDataAdapter(sql, connection); dataAdapter.Fill(datatable); dataGridViewAusgabe.DataSource = datatable; dataGridViewAusgabe.Show();
Jetzt kann ich in meinem c# Programm jede Tabelle mir anzeigen lassen.
Jetzt meine Frage: Wie kann ich die Änderungen die man im dataGridView Fenster machen kann, auch an meine MySQL Datenbank schicken?
Wäre für Tipps Dankbar :D
Grüße ColleMonster
Antworten
-
Hallo C.,
- Danke für eure Beiträge
gern.
Da ich nicht Deinen kompletten Quellcode sehen kann ... beachte u.a. den (MySql)CommandBuilder (in meinen Links), der die Commands erstellt:
[MySQL AB :: MySQL 6.0 Reference Manual :: 26.2.3.2 Using MySqlCommandBuilder]
http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/6.0/en/connector-net-examples-mysqlcommandbuilder.html[Gewusst wie: Binden von Daten an das DataGridView-Steuerelement in Windows Forms]
http://msdn.microsoft.com/de-de/library/fbk67b6z.aspxDu brauchst auch AFAIK nur die Update-Methode und kein vorheriges GetChanges etc, denn das macht Update intern schon automatisch.
[DbDataAdapter.Update-Methode (DataTable) (System.Data.Common)]
http://msdn.microsoft.com/de-de/library/z1z2bkx2.aspx
ciao Frank- Als Antwort markiert ColleMonster Donnerstag, 26. Mai 2011 11:11
-
Hallo C.,
Danke an alle für die Hilfe. Das Beispiel von Marcel läuft bei mir solange ich nur eine Reihe hinzufüge. Wenn ich einen Wert ändern will, bekomme ich eine Ausnahme.
InvalidOperationException wurde nicht behandelt: Dynamische SQL-Generierung für den UpdateCommand wird nicht für einen SelectCommand unterstützt, der keine Schlüsselspalteninformationen zurückgibt.
Die Fehlermeldung sagt ja schon alles. Dein SelectCommand gibt keine Schlüsselspalteninformationen zurück. Hier sind die Bedingungen damit die dynamische SQL-Generierung über den CommandBuilder funktioniert:
1. Mindestens ein Primärschlüssel oder eine eindeutige Tabellenspalte muss vom SELECT-Ausdruck zurückgegeben werden.
2. SelectCommand muss sich auf eine einzige Tabelle beziehen (keine JOINS, auch nicht in zugrundeliegenden Views).
3. SelectCommand muss sich auf bearbeitbare Tabellenspalten beziehen (also z.B. keine Expressions).
(alle weiteren Bedingungen findest Du im unten angeführten Artikel von Bill Vaughn)Nehmen wir als Beispiel folgende Tabellendefinitionen:
A. Tabelle mit definiertem Primärschlüsseldelimiter $$ CREATE TABLE `customers` ( `CustomerID` int(11) NOT NULL AUTO_INCREMENT, `CompanyName` varchar(45) DEFAULT NULL, `Address` varchar(45) DEFAULT NULL, PRIMARY KEY (`CustomerID`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8$$
B. Tabelle ohne definiertem Primärschlüssel, aber mit einem "ID" im Spaltennamen
delimiter $$ CREATE TABLE `customersnopk` ( `CustomerID` int(11) DEFAULT NULL, `CompanyName` varchar(45) DEFAULT NULL, `Address` varchar(45) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
C. Tabelle aus der kein Primärschlüssel deduziert werden kann
delimiter $$ CREATE TABLE `customersnopknoid` ( `Customer` int(11) DEFAULT NULL, `CompanyName` varchar(45) DEFAULT NULL, `Address` varchar(45) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
Im letzten Fall (C) wird die von Dir erwähnte InvalidOperationException geworfen, da der CommandBuilder die Primärschlüsselspalte(n) einfach nicht mehr ermitteln kann.
Lösung 1 (empfohlen): Du definierst eine Primärschlüsselspalte in Deinen Tabellen.
Lösung 2: Du erstellst das SQL für die dataAdapter.InsertCommand, dataAdapter.UpdateCommand, dataAdapter.DeleteCommand) manuell.Weaning Developers from the CommandBuilder:
http://msdn.microsoft.com/en-us/library/ms971491.aspxGruß
Marcel- Als Antwort vorgeschlagen Marcel RomaModerator Mittwoch, 25. Mai 2011 14:21
- Als Antwort markiert ColleMonster Donnerstag, 26. Mai 2011 07:58
-
Hallo C.,
na, das was ich gesagt habe, hast Du da aber nicht wirklich eingebaut - egal, gehen wir nochmal von Deinem Beispiel-Projekt (Download) aus.
Wenn ich jetzt zum Beispiel mal Deinen Code:
http://cid-88c66749e2b571f2.office.live.com/self.aspx/.Public/sqltest.zipbenutze mit der Tabelle "dennis", die ich mal so definiert habe:
- delimiter $$
CREATE TABLE `dennis` (
`idDennis` int(11) NOT NULL,
`Vorname` varchar(45) DEFAULT NULL,
PRIMARY KEY (`idDennis`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Forums Frage'$$
ausprobiere, habe ich keine Probleme mit dem Update-Button, wenn ich die aktuellen MySql-Versionen benutze:
MySQL -> [Download MySQL Community Server] [Download Connector/Net] [Download MySQL Workbench]
ciao Frank- Als Antwort markiert ColleMonster Montag, 30. Mai 2011 15:05
- delimiter $$
Alle Antworten
-
Hallo C.,
- Jetzt meine Frage: Wie kann ich die Änderungen die man im dataGridView Fenster machen kann, auch an meine MySQL Datenbank schicken?
Die Änderungen, die im Grid gemacht werden, werden intern gespeichert.
Mit der Update-Methode kann man diese in die DB aktualisieren:[mysql Tabelle aktualisieren mit Daten aus DataGridView (gefiltert)]
http://social.msdn.microsoft.com/Forums/de-DE/visualcsharpde/thread/1b8035c3-da6e-484e-85f9-7c558e729fb4/Letztlich einfach analog zu:
[Gewusst wie: Binden von Daten an das DataGridView-Steuerelement in Windows Forms]
http://msdn.microsoft.com/de-de/library/fbk67b6z.aspxnur mit "MySql" vor den entsprechenden Datenbank-Klassen.
ciao Frank- Als Antwort vorgeschlagen Holger M. Rößler Dienstag, 24. Mai 2011 08:05
-
Danke für eure Beiträge!
Ich habe jetzt einen Update Button mit der Update Methode hinzugefügt. Das alleine reicht aber noch nicht. Bekomme jetzt eine Ausnahme...
"Für ein Update ist ein gültiger Insert-Command erforderlich, wenn eine DataRow Auflistung mit neuen Zeilen weitergegeben wird."
private void updateButton_Click(object sender, EventArgs e) { dataAdapter.Update(datatable); }
-
Den Command musst du vor dem Aufruf der Update-Methode initialisieren.
Der von Frank gepostete Link sollte dir hierbei eigentlich helfen: http://social.msdn.microsoft.com/Forums/de-DE/visualcsharpde/thread/1b8035c3-da6e-484e-85f9-7c558e729fb4/- Bearbeitet Robert BreitenhoferModerator Mittwoch, 25. Mai 2011 10:57 Hyperlink als Hyperlink
-
Hallo C.,
Hier ist ein Beispiel:
using System; using System.Data; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace UpdateMySqlDbFromDgv { public partial class Form1 : Form { private MySqlDataAdapter dataAdapter; private MySqlConnectionStringBuilder connectionBuilder; private DataTable datatable; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.connectionBuilder = new MySqlConnectionStringBuilder { Server = "127.0.0.1", Database = "Test", UserID = textBoxUserName.Text, Password = textBoxPassword.Text }; } private void buttonUpdate_Click(object sender, EventArgs e) { if (this.dataAdapter == null) return; dataAdapter.Update(datatable); } private void buttonSelect_Click(object sender, EventArgs e) { using (MySqlConnection connection = new MySqlConnection(this.connectionBuilder.ConnectionString)) { // ToDo: Benutzereingabe immer überprüfen String sql = String.Format("SELECT * FROM `{0}`", tabelleAnzeigenComboBox3.Text); datatable = new DataTable(tabelleAnzeigenComboBox3.Text); this.dataAdapter = new MySqlDataAdapter(sql, connection); this.dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; MySqlCommandBuilder builder = new MySqlCommandBuilder(this.dataAdapter); dataAdapter.Fill(this.datatable); } dataGridViewAusgabe.DataSource = this.datatable; } } }
Um Informationen zum PrimaryKey miteinzubeziehen, mußt Du dataAdapter.MissingSchemaAction verwenden:
"When the MySQLDataAdapter fills a DataSet, it will create the necessary tables and columns for the returned data if they do not already exist. However, primary key information will not be included in the implicitly created schema unless the System.Data.MissingSchemaAction property is set to System.Data.MissingSchemaAction.AddWithKey."
MySqlDataAdapter:
http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqldataadapter.html#connector-net-examples-mysqldataadapter-updatecommand
Gruß
Marcel
- Als Antwort vorgeschlagen Marcel RomaModerator Dienstag, 24. Mai 2011 08:45
- Bearbeitet Marcel RomaModerator Dienstag, 24. Mai 2011 08:59 Code revidiert
-
Hallo C.,
- Danke für eure Beiträge
gern.
Da ich nicht Deinen kompletten Quellcode sehen kann ... beachte u.a. den (MySql)CommandBuilder (in meinen Links), der die Commands erstellt:
[MySQL AB :: MySQL 6.0 Reference Manual :: 26.2.3.2 Using MySqlCommandBuilder]
http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/6.0/en/connector-net-examples-mysqlcommandbuilder.html[Gewusst wie: Binden von Daten an das DataGridView-Steuerelement in Windows Forms]
http://msdn.microsoft.com/de-de/library/fbk67b6z.aspxDu brauchst auch AFAIK nur die Update-Methode und kein vorheriges GetChanges etc, denn das macht Update intern schon automatisch.
[DbDataAdapter.Update-Methode (DataTable) (System.Data.Common)]
http://msdn.microsoft.com/de-de/library/z1z2bkx2.aspx
ciao Frank- Als Antwort markiert ColleMonster Donnerstag, 26. Mai 2011 11:11
-
Danke an alle für die Hilfe. Das Beispiel von Marcel läuft bei mir solange ich nur eine Reihe hinzufüge. Wenn ich einen Wert ändern will, bekomme ich eine Ausnahme.
InvalidOperationException wurde nicht behandelt.
Dynamische SQL-Generierung für den UpdateCommand wird nicht für einen SelectCommand unterstützt, der keine Schlüsselspalteninformationen zurückgibt.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace sqltest { public partial class Form1 : Form { private MySqlDataAdapter dataAdapter; private MySqlConnectionStringBuilder connectionBuilder; private DataTable datatable; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.connectionBuilder = new MySqlConnectionStringBuilder { Server = "localhost", Database = "datenbank", UserID = "root", Password = "sql" }; } private void buttonSelect_Click_1(object sender, EventArgs e) { using (MySqlConnection connection = new MySqlConnection(this.connectionBuilder.ConnectionString)) { //MessageBox.Show("Test"); // ToDo: Benutzereingabe immer überprüfen String sql = String.Format("SELECT * FROM `{0}`", tabelleAnzeigenComboBox3.Text); datatable = new DataTable(tabelleAnzeigenComboBox3.Text); this.dataAdapter = new MySqlDataAdapter(sql, connection); this.dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; MySqlCommandBuilder builder = new MySqlCommandBuilder(this.dataAdapter); dataAdapter.Fill(this.datatable); } dataGridViewAusgabe.DataSource = this.datatable; } private void buttonUpdate_Click_1(object sender, EventArgs e) { if (this.dataAdapter == null) return; try { dataAdapter.Update(datatable); } catch (InvalidOperationException f) { MessageBox.Show("Fehler"+f); } } } }
-
Hallo C.,
Danke an alle für die Hilfe. Das Beispiel von Marcel läuft bei mir solange ich nur eine Reihe hinzufüge. Wenn ich einen Wert ändern will, bekomme ich eine Ausnahme.
InvalidOperationException wurde nicht behandelt: Dynamische SQL-Generierung für den UpdateCommand wird nicht für einen SelectCommand unterstützt, der keine Schlüsselspalteninformationen zurückgibt.
Die Fehlermeldung sagt ja schon alles. Dein SelectCommand gibt keine Schlüsselspalteninformationen zurück. Hier sind die Bedingungen damit die dynamische SQL-Generierung über den CommandBuilder funktioniert:
1. Mindestens ein Primärschlüssel oder eine eindeutige Tabellenspalte muss vom SELECT-Ausdruck zurückgegeben werden.
2. SelectCommand muss sich auf eine einzige Tabelle beziehen (keine JOINS, auch nicht in zugrundeliegenden Views).
3. SelectCommand muss sich auf bearbeitbare Tabellenspalten beziehen (also z.B. keine Expressions).
(alle weiteren Bedingungen findest Du im unten angeführten Artikel von Bill Vaughn)Nehmen wir als Beispiel folgende Tabellendefinitionen:
A. Tabelle mit definiertem Primärschlüsseldelimiter $$ CREATE TABLE `customers` ( `CustomerID` int(11) NOT NULL AUTO_INCREMENT, `CompanyName` varchar(45) DEFAULT NULL, `Address` varchar(45) DEFAULT NULL, PRIMARY KEY (`CustomerID`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8$$
B. Tabelle ohne definiertem Primärschlüssel, aber mit einem "ID" im Spaltennamen
delimiter $$ CREATE TABLE `customersnopk` ( `CustomerID` int(11) DEFAULT NULL, `CompanyName` varchar(45) DEFAULT NULL, `Address` varchar(45) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
C. Tabelle aus der kein Primärschlüssel deduziert werden kann
delimiter $$ CREATE TABLE `customersnopknoid` ( `Customer` int(11) DEFAULT NULL, `CompanyName` varchar(45) DEFAULT NULL, `Address` varchar(45) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
Im letzten Fall (C) wird die von Dir erwähnte InvalidOperationException geworfen, da der CommandBuilder die Primärschlüsselspalte(n) einfach nicht mehr ermitteln kann.
Lösung 1 (empfohlen): Du definierst eine Primärschlüsselspalte in Deinen Tabellen.
Lösung 2: Du erstellst das SQL für die dataAdapter.InsertCommand, dataAdapter.UpdateCommand, dataAdapter.DeleteCommand) manuell.Weaning Developers from the CommandBuilder:
http://msdn.microsoft.com/en-us/library/ms971491.aspxGruß
Marcel- Als Antwort vorgeschlagen Marcel RomaModerator Mittwoch, 25. Mai 2011 14:21
- Als Antwort markiert ColleMonster Donnerstag, 26. Mai 2011 07:58
-
Hallo C.,
- Danke an alle für die Hilfe
gern. Unsere Beispiele sollten eigentlich alle funktionieren, wenn die DB Primärschlüssel hat.
Was ich annehme ist, dass Du keine Primärschlüssel in den Tabellen definiert hast.
Eine selbstdefinierte Insert-Methode ist normal keine besonders empfehlenswerte Methode, obwohl in manchen Situationen notwendig. Nimm den von mir empfohlenen MySqlCommandBuilder.[MySQL Command Builder funktioniert nicht / kann Datenbank nicht updaten]
http://www.vb-magazin.de/forums/forums/p/6067/23947.aspx
ciao Frank
-
> Frank schrieb: Was ich annehme ist, dass Du keine Primärschlüssel in den Tabellen definiert hast.
Wow, sehr originell. Zitierst Du hier jemanden?
> Frank schrieb: Eine selbstdefinierte Insert-Methode ist normal keine besonders empfehlenswerte Methode, obwohl in manchen Situationen notwendig.Also wat nu? Ja oder ja?
> Frank schrieb: Nimm den von mir empfohlenen MySqlCommandBuilder.Hat er doch. Und nur weil er Deine Links gelesen hat ;-)
-
Hallo Marcel,
ich schreibe meistens einfach nur meine Meinung und meine Tips zu den Fragen hier und gehe sporadisch auf Schnitzer von anderen ein - etwa bei Dir auf das GetChanges, was Du ja jetzt gottseidank aus deiner Antwort auch gelöscht (nach-editiert) hast. Aber ich mache auch Schnitzer und lerne selber auch immer mit.
Bzgl. "Dzaebel Update Primärschlüssel" findet Google bspw. 1150 Stellen von mir über die Jahre ;-)
ciao Frank -
Ich habe jetzt eine Tabelle angelegt und mit meinem Programm aufgerufen. Leider hat sich nix geändert.
CREATE TABLE `customers` ( `CustomerID` int(11) NOT NULL AUTO_INCREMENT, `CompanyName` varchar(45) DEFAULT NULL, `Address` varchar(45) DEFAULT NULL, PRIMARY KEY (`CustomerID`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8$$
-
> Frank schrieb: gehe sporadisch auf Schnitzer von anderen ein - etwa bei Dir auf das GetChanges, was Du ja jetzt gottseidank aus deiner Antwort auch gelöscht (nach-editiert) hast
Das GetChanges() hatte in meinem ursprünglichen Code (das ich für das Beispiel hier teilweise wiederverwendet habe) einen ganz anderen Sinn, da dort die Daten an eine Bibliothek weitergegeben wurden. Übrigens wird GetChanges() ganz routinemäßig in Zusammenhang mit Update() verwendet.> Frank schrieb: Bzgl. "Dzaebel Update Primärschlüssel" findet Google bspw. 1150 Stellen von mir über die Jahre ;-)
Ich sprach von diesem Thread. Der erste, der hier MySqlCommandBuilder und den Primärschlüssel erwähnt, war ICH. Das verdient fairerweise eine Erwähnung, oder? -
Hallo C.,
Ich habe jetzt eine Tabelle angelegt und mit meinem Programm aufgerufen. Leider hat sich nix geändert.
CREATE TABLE `customers` ( `CustomerID` int(11) NOT NULL AUTO_INCREMENT, `CompanyName` varchar(45) DEFAULT NULL, `Address` varchar(45) DEFAULT NULL, PRIMARY KEY (`CustomerID`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8$$
Ich habe mir die Mühe gemacht und den von Dir zuletzt geposteten Code mit der o.g. Tabellendefinition getestet. Keine Ausnahme. Der CommandBuilder funktioniert wie erwartet ;-) Solltest Du weiterhin Probleme damit haben, könntest Du ein Test-Projekt auf SkyDrive o.ä. hochladen und hier einen Link posten. Ich werde mir den Code ansehen.
Gruß
Marcel -
Hallo C.,
also ich bekomme kein Geld.
Mir geht es eher darum, gute Lösungen anderen Benutzern zur Verfügung zu stellen.
Die Punkte oder "Medaillien", die im Forum gelistet werden, werden nicht als Geld umgesetzt, das ist eher, damit sich Benutzer etwas orientieren können.
Zu MVPs kannst Du hier etwas nachlesen:[Microsoft Most Valuable Professional]
http://mvp.support.microsoft.com/?ln=de
Zum Thema:Das als Antwort markierte Posting enthält keinen Code - ich schätze aber, dass es das Problem mit den Primärschlüsseln war. Der Code scheint ja meinem Link zu http://msdn.microsoft.com/de-de/library/z1z2bkx2.aspx nur mit MySql analog zu sein, insofern - ist nur für mich und andere User - scheint der Primärschlüssel der Knackpunkt gewesen zu sein.
vielen Dank.
ciao Frank -
Ich hatte deinen Link nicht weiter verfolgt, der von Marcel hatte mir ja schon weiter gebracht. Ich danke dir aber auch recht herzlich!
Vielleicht kannst du mir ja bei meinem kleinen Problem noch helfen.
"Ein kleines Problem ist da noch. Wenn ich auf den Update Button klicke und dann eine andere Tabelle laden möchte, sind die Tabellen immer leer."
-
> Frank schrieb: also war es jetzt der Primärschlüssel, den ich und Marcel erwähnten, der das Problem gelöst hat?
> C. antwortete: Das Beispiel und der Hinweis von Marcel habe mein Problem gelöst.
> Frank schrieb: Der Code scheint ja meinem Link zu http://msdn.microsoft.com/de-de/library/z1z2bkx2.aspx nur mit MySql analog zu sein
> C. antwortete: Ich hatte deinen Link nicht weiter verfolgt, der von Marcel hatte mir ja schon weiter gebracht.
Dieses Betteln und Schnorren und Druck ausüben, geht mir langsam auf die Nerven, Frank. Ich weiss nicht, wie die Moderation das sieht, was mich angeht, werde ich mich an diesem Thread nicht mehr beteiligen.@ColleMonster: Dein Code ist in Ordnung.
Marcel
-
Hallo C.,
- Ich danke dir aber auch recht herzlich!
gern.- "Ein kleines Problem ist da noch. Wenn ich auf den Update Button klicke und dann eine andere Tabelle laden möchte, sind die Tabellen immer leer."
ich habe Deinen Code mal nachvollzogen ...gut, ich würde normal das using wegnehmen und ganz nach oben nur einmalig die Connection öffnen, denn sonst könnte die Connection bei Update_Click im dataAdapter disposed sein, wenn ich mich jetzt auf:
http://cid-88c66749e2b571f2.office.live.com/self.aspx/.Public/sqltest.zipbeziehe. Also grob als Ansatz vielleicht so - jetzt mal bei SQL Server etwa so (ansonsten natürlich Deinen Code benutzen, weil Dein Code ja MySql benutzt) :SqlConnection connection; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.connectionBuilder = new SqlConnectionStringBuilder(); connectionBuilder.DataSource = @".\SQLExpress"; connectionBuilder.InitialCatalog = "Demo"; connectionBuilder.IntegratedSecurity = true; connection = new SqlConnection(this.connectionBuilder.ConnectionString); } private void buttonSelect_Click_1(object sender, EventArgs e) { //MessageBox.Show("Test"); // ToDo: Benutzereingabe immer überprüfen String sql = String.Format("SELECT * FROM [{0}]", tabelleAnzeigenComboBox3.Text); datatable = new DataTable(tabelleAnzeigenComboBox3.Text); this.dataAdapter = new SqlDataAdapter(sql, connection); this.dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; SqlCommandBuilder builder = new SqlCommandBuilder(this.dataAdapter); dataAdapter.Fill(this.datatable); dataGridViewAusgabe.DataSource = this.datatable; }
bei diesem Code funktioniert bei mir das Update und die Auswahl und es ist nicht leer.
Es könnte dann wieder an den Tabellen-Definitionen liegen.
ciao Frank -
Oh man, ich habe versucht das Beispiel in mein Programm zu übernehmen und jetzt läuft es gar nicht mehr. Ein klick auf Anzeigen bleibt ohne Wirkung, es wird keine Tabelle angezeigt.
private MySqlDataAdapter dataAdapter2; private MySqlConnectionStringBuilder connectionBuilder2; private DataTable datatable2; String sql; //2. Tabelle anzeigen in der dataGridView Button private void button8_Click(object sender, EventArgs e) { using (MySqlConnection connection = new MySqlConnection(this.connectionBuilder2.ConnectionString)) { //MessageBox.Show("Test"); // ToDo: Benutzereingabe immer überprüfen sql = String.Format("SELECT * FROM `{0}`", tabelleAnzeigenComboBox3.Text); datatable2 = new DataTable(tabelleAnzeigenComboBox3.Text); this.dataAdapter2 = new MySqlDataAdapter(sql, connection); this.dataAdapter2.MissingSchemaAction = MissingSchemaAction.AddWithKey; MySqlCommandBuilder builder = new MySqlCommandBuilder(this.dataAdapter2); dataAdapter2.Fill(this.datatable2); } dataGridViewAusgabe.DataSource = this.datatable2; } //1. Tabellen in die ComboBox laden Button private void tabelleAnzeigenButton2_Click_1(object sender, EventArgs e) { if (eingeloggt == false) { MessageBox.Show("Bitte erst einloggen!"); return; } tabelleAnzeigenComboBox3.Visible = true; tabelleAnzeigenComboBox3.Text = ""; tabelleAnzeigenComboBox3.Items.Clear(); befehlAusfuehren("SHOW TABLES FROM " + datenbank); tabelleAnzeigenComboBox3.Items.AddRange(tabellenNamen); } //3. Update Button private void updateButton_Click(object sender, EventArgs e) { if (this.dataAdapter2 == null) return; try { dataAdapter2.Update(datatable2); } catch (InvalidOperationException f) { MessageBox.Show("Fehler" + f); } } private void Form1_Load(object sender, EventArgs e) { this.connectionBuilder2 = new MySqlConnectionStringBuilder { Server = "localhost", Database = "datenbank", UserID = "root", Password = "sql" }; String text; try { StreamReader sr = new StreamReader("E:\\file.txt"); text = sr.ReadLine(); while (text != null) { zeichen[zaehler] = text; //MessageBox.Show(text); Console.WriteLine(text); text = sr.ReadLine(); zaehler++; } sr.Close(); Console.ReadLine(); for (int i = 0; i < zeichen.Length+1; i++) { if (zeichen[i] == "Datenbank:") { textBox1.Text = zeichen[i + 1]; //MessageBox.Show(zeichen[i + 1]); } if (zeichen[i] == "User:") { textBox2.Text = zeichen[i + 1]; } if (zeichen[i] == "Passwort:") { textBox3.Text = zeichen[i + 1]; } if (zeichen[i] == "Server:") { textBox5.Text = zeichen[i + 1]; } } } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); } }
-
Hallo C.,
na, das was ich gesagt habe, hast Du da aber nicht wirklich eingebaut - egal, gehen wir nochmal von Deinem Beispiel-Projekt (Download) aus.
Wenn ich jetzt zum Beispiel mal Deinen Code:
http://cid-88c66749e2b571f2.office.live.com/self.aspx/.Public/sqltest.zipbenutze mit der Tabelle "dennis", die ich mal so definiert habe:
- delimiter $$
CREATE TABLE `dennis` (
`idDennis` int(11) NOT NULL,
`Vorname` varchar(45) DEFAULT NULL,
PRIMARY KEY (`idDennis`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Forums Frage'$$
ausprobiere, habe ich keine Probleme mit dem Update-Button, wenn ich die aktuellen MySql-Versionen benutze:
MySQL -> [Download MySQL Community Server] [Download Connector/Net] [Download MySQL Workbench]
ciao Frank- Als Antwort markiert ColleMonster Montag, 30. Mai 2011 15:05
- delimiter $$