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();
}
}
}
}
[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?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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);
}
}
}
}
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.
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
Hallo Taipi,
mit @ habe ich dasselbe Problem.
Ich werde gleich der Debugger prüfen
Lg
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