Laden...

Daten von DataGridView in MySQL durch INSERT einfügen

Erstellt von der_sharky vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.405 Views
D
der_sharky Themenstarter:in
23 Beiträge seit 2017
vor 5 Jahren
Daten von DataGridView in MySQL durch INSERT einfügen

Hallo zusammen,
ich habe eine kleine Anwendung gemacht die Daten von DataGridView in MySQL einfügen soll. Eigentlich funktioniert alles OK nur habe ich das Problem wenn Daten in einer der DataGridView Spalten zu lang ist als die erlaubte Länge in MySQL dann werden unbemerkt die Datensätze gekürzt und in MySQL mit der maximalen erlaubte Länge gespeichert. Der Rest wird einfach entfernt.
Meine Frage: Wie kann ich in C# oder von mir aus in MySQL so machen, dass ich eine Rückmeldung bekommen wenn ich längere Sätze als erlaubt habe. Danke

Beispiel:

In MySQL:
Spalte1 Varchar(5)

in DataGridView:
Text mit 9 Zeichen ---> Microsoft

Ergebniss in MySQL:

Micro



private void button2_Click(object sender, EventArgs e)
        {
            for (int i = 0  ; i < dataGridView1.Rows.Count - 1; i++) // dòng
            {
                        string str = "server=xxxx; database=xxxx; uid=xxxx; pwd=xxxxxx;";
                        MySqlConnection constr = new MySqlConnection(str);
                        constr.Open(); 
                        String cmdText = "INSERT  INTO table (spalte1, spalte2, spalte3) VALUES ('"
                                                   + dataGridView1.Rows[i].Cells[0].Value + "','"
                                                   + dataGridView1.Rows[i].Cells[1].Value + "','"
                                                   + Convert.ToDateTime(dataGridView1.Rows[i].Cells[2].Value).ToString("yyyy-MM-dd HH:mm:ss.fff") + "','"
                                                   + dataGridView1.Rows[i].Cells[3].Value + "')";
                        MySqlCommand cmd = new MySqlCommand(cmdText, constr);
                        cmd.ExecuteNonQuery();
                constr.Close();
            }          

        }
    }
}




16.806 Beiträge seit 2008
vor 5 Jahren

[Artikelserie] SQL: Parameter von Befehlen

und

[Artikel] Drei-Schichten-Architektur

Um es freundlich auszudrücken; ganz schönes gepuzzle 😉
.. und leider oft der Ursprung von fehlerhafter und unsicherer Software.

Zieh das erst mal gerade, und dann schau ob der Fehler überhaupt noch auftritt.
Womöglich nur ein Seiteneffekt weil sehr(!!) unsauber umgesetzt.

Ansonsten ist natürlich klar, dass Du das in die DB schreibst, was Du ihr gibst.
Eine Rückmeldung gibt es nur, wenn Du DB Constraints verletzt.
Das kannste aber sauber selbst analyisieren [Artikel] Debugger: Wie verwende ich den von Visual Studio?

D
der_sharky Themenstarter:in
23 Beiträge seit 2017
vor 5 Jahren

Hallo Abt,

denke erstmal für die schnelle Antwort. Ich bin total neu im C# Bereich und freue mich sehr wenn ich hier Tipps kriegen kann. So ich habe mich bisschen über SQL Abfragen mit Parameter erkundigt nur halt meistens sind die Beispiele für MS SQL Server. Ich muss alles aber in MySQL machen. Also lange Rede kurzer Sinn: Ich habe den Code umgebaut aber leider jetzt bekomme ich den Fehler: "Column Material cant be NULL". Es ist aber nirgendwo NULL in der Daten. Ich verstehe nicht woher dieser Fehler kommt. Außerdem es kommt keine Meldung wenn in der Spalte mehr Text steht als erlaubt. Alles wird einfach geschnitten und in der Datenbank gespeichert. Genau so wie im Beispiel oben mit Microsoft

Hier ist der Code:


private void button2_Click(object sender, EventArgs e)
        {

            string constring = "server=xxxxxxx; database=xxxxx; uid=xxxx; pwd=xxxxx;";

           
            string Query = "insert into  MatData (Material,Bruttogewicht,Returnable) values" + "(?Material,?Bruttogewicht,?Returnable)";

           
            using (MySqlConnection conn = new MySqlConnection(constring))
            using (MySqlCommand command = new MySqlCommand(Query, conn))
            {
                conn.Open();

                command.Parameters.Add("?Material", MySqlDbType.Float);
                command.Parameters.Add("?Bruttogewicht", MySqlDbType.Float);
                command.Parameters.Add("?Returnable", MySqlDbType.VarChar);     
        try
                {

                    foreach (DataGridViewRow dr in dataGridView1.Rows)
                    {
                        
                        command.Parameters["?Material"].Value = dr.Cells[0].Value;
                        command.Parameters["?Bruttogewicht"].Value = dr.Cells[1].Value;
                        command.Parameters["?Returnable"].Value = dr.Cells[2].Value;
              
                command.ExecuteNonQuery();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }


1.029 Beiträge seit 2010
vor 5 Jahren

Hi,

an Stelle der Fragezeichen gehören dort soweit ich mich erinnere '@' hin.

Abseits davon hast du hoffentlich auch im Debugger geprüft, dass im Wert kein NULL steht?

LG

PS: Unter ADO.NET ist der Unterschied zwischen Mssql und Mysql kaum spürbar.

5.657 Beiträge seit 2006
vor 5 Jahren

The parameter is preceded by an '@' symbol to indicate it is to be treated as a parameter.

Siehe: https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-parameters.html

Siehe auch: [Artikelserie] SQL: Parameter von Befehlen

Weeks of programming can save you hours of planning

D
der_sharky Themenstarter:in
23 Beiträge seit 2017
vor 5 Jahren

Hallo Taipi,

mit @ habe ich dasselbe Problem.
Ich werde gleich der Debugger prüfen

Lg

5.657 Beiträge seit 2006
vor 5 Jahren

Schau dir die Beispiele in [Artikelserie] SQL: Parameter von Befehlen an. Dann siehst du auch, daß du als Parameternamen nur den Namen und nicht @Namen übergeben mußt.

Weeks of programming can save you hours of planning