Hallo Freunde,
ich habe ein kurioses Problem beim Schreiben von Daten aus TextBoxen in eine Datenbank.
Eigentlich ist dies ja gar nicht schwer und wurde von mir auch erfolgreich bereits einige male durchgeführt. Das Problem ist, dass ein und der gleiche Quelltext, nur bei 2/3 Datenbanken funktioniert. Ich begreiff das nicht!
Aber immer der Reihe nach:
Als erstes lese ich aus einer großen Form alle Textboxen aus und weise den Inhalt jeweils einer string- oder int-Variable von einem neu erstellten Objekt einer selbstgeschriebenen Klasse zu.
Als nächstes rufe ich eine eigene Methode für die Datenbankverbindung auf, welcher ich lediglich noch den SQL-String übergebe. Die SQL Anweisung schreibt mir die Inhalte aus den Textboxen in meine Datenbank. Leider klappt das nur bei 2 von 3 Datenbanken. Warum kann ich mir nicht erklären. Es gibt keine Fehlermeldungen, es fliegen keine Exceptions und wie gesagt - bei 2 anderen Datenbanken funktioniert es.
Zu Testzwecken versucht erstmal ein Feld, den Namen der Person, in die Datenbank zu schreiben. Wenn das klappt, sollte der Rest simultan sein, jedoch finde ich meinen Fehler nicht.
Bei Klick des Buttons:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| private void btn_AddNewPerson_Add_Click(object sender, RoutedEventArgs e) { Personen person = new Person();
person.bezeichnung = txt_AddNewPerson_bezeichnung.Text; person.firma = txt_AddNewPerson_firma.Text; ... person.fabrikationsnummer = Convert.ToInt32(txt_AddNewPerson_fabrikationsnummer.Text); person.baujahr = Convert.ToInt32(txt_AddNewPerson_baujahr.Text); ... string sqlcommand = string.Format("INSERT INTO Personen(Bezeichnung) VALUES ('{0}')", person.bezeichnung);
DBQuery insert = new DBQuery(); int erg = insert.DB_Add_Person(sqlcommand);
if (erg == 1) MessageBox.Show("Hinzufügen erfolgreich!"); else MessageBox.Show("Fehler!"); } |
Meine Klasse Personen (gekürzt)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| internal class Personen { public string bezeichnung; public string firma; ...
public int fabrikationsnummer; public int baujahr; ... } |
..und zu guter letzt meine Methode für den DB Query:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| public int DB_Add_Person(string sqlcommand) { string path = Environment.CurrentDirectory; string db_name = "DB101.MDF";
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;" + @"AttachDbFilename=" + path + @"\" + db_name + @";" + "Integrated Security=True;" + "Connect Timeout=30;" + "User Instance=True";
SqlCommand cmd = new SqlCommand(sqlcommand, con); try { con.Open();
int erg = cmd.ExecuteNonQuery();
if (erg > 0) { con.Close(); return erg; } else { con.Close(); return 0; } } catch (Exception ex) { MessageBox.Show("Fehlermeldung: {0}", ex.Message); con.Close(); return 0; } } |
Meine Datenbank ist ein mittels Visual Studio erzeugtes .MDF File, welches auch der Projektmappe hinzugefügt wurde.
Die Datenbank erhält lediglich - wie gesagt, sind erstmal alles noch Testzwecke um die Fehlerquellen zu minimieren - eine Tabelle namens "Personen" mit einer Spalte namens "Bezeichnung" von Typ nchar(10) (NULL ist nicht zugelassen).
Versuche ich die Änderungen in die Northwind Datenbank zu schreiben (natürlich unter Anpassung der Pfade und des SQL Strings) gibt es keine Probleme. (Sogesehen gibt es die laut dem Compiler und der IDE auch hier nicht, nur die Änderungen werden halt nicht gemacht, was also eine fehlerhafte Funktionalität darstellt).
Es scheint mir, dass der Fehler irgendwo an der Datenbank liegt. Falsche Einstellungen? Wenn ja, welche müssen hier getätigt werden?
Über Hilfe wäre ich sehr dankbar!
Beste Grüße und guten Rutsch!
Edit 1: Mir ist gerade aufgefallen, dass die beiden anderne Datenbanken, welche nicht in meinem Projektmappen-Explorer (und somit im Projekt?!) hinterlegt sind, sondern nur über den Datenbank-Explorer erreichbar sind, die sind, in welche ich problemlos schreiben kann.