Wie funktioniert die Update()-Routine von ADO.NET?
-
Hallo,
Habe gestern erst mein Autoincrementproblem gepostet nun habe ich ein neues nettes kleines Problem (jaja ich weiß ich bin Anfänger ;))
Ich habe hier eine kleine Updateroutine:
updateReturn = this->dataTableAdapterInstance->Update( false, this->textBox2->Text, this->textBox3->Text, this->textBox4->Text, intConvert.Parse(this->textBox5->Text), intConvert.Parse(this->textBox6->Text), nullptr,false,nullptr, title_detail::originalStatus->getTitel(),nullptr, title_detail::originalStatus->getKategorie(),nullptr, title_detail::originalStatus->getVerliehen(),nullptr, intConvert.Parse(title_detail::originalStatus->getOrdner()),nullptr, intConvert.Parse(title_detail::originalStatus->getSeite()));
Mein UpdateCommand ist:
UPDATE inventar_data SET gelöscht = @gelöscht, titel = @titel, kategorie = @kategorie, verliehen = @verliehen, ordner = @ordner, seite = @seite WHERE (@IsNull_gelöscht = 1 AND gelöscht IS NULL OR gelöscht = @Original_gelöscht) AND (@IsNull_titel = 1 AND titel IS NULL OR titel = @Original_titel) AND (@IsNull_kategorie = 1 AND kategorie IS NULL OR kategorie = @Original_kategorie) AND (@IsNull_verliehen = 1 AND verliehen IS NULL OR verliehen = @Original_verliehen) AND (@IsNull_ordner = 1 AND ordner IS NULL OR ordner = @Original_ordner) AND (@IsNull_seite = 1 AND seite IS NULL OR seite = @Original_seite)
Mein Problem ist jedes mal wenn ich die Updateroutine aufrufe steigt er mir mit folgendem Fehler aus:
Eine nicht behandelte Ausnahme des Typs "System.ArgumentNullException" ist in CD-Inventar.exe aufgetreten.
Zusätzliche Informationen: Der Wert darf nicht NULL sein.
Der Witz ist, mache ich die selbe änderung "manuell" im Abfragegenerator funktioniert es einwandfrei :S
Wär schön wenn ihr mir helfen könntet
Grüße aus Stuttgart!
-
Na irgendwo übergibst Du NULL wo != NULL erwartet wird.
Das könnte bei einer der Prase stellen sein , die eine Exception werfen.
Prüfe mit dem Debugger alle Werte, die Du an Parse übergibst.
-
also habe die dinger geprüft und es passiert nicht dabei :s
-
Welche Dinger und was sollte beim Prüfen denn passieren ?
Welchen Wert hat denn textBox6 textBox5 title_detail::originalStatus->getOrdner() und title_detail::originalStatus->getSeite() ?
Wenn die Werte != Null sind, prüfe die anderen Werte noch auf NULL
-
Alle werte bis auf den nullptr haben einen Wert.
Welchen Wert hat denn textBox6 textBox5 title_detail::originalStatus->getOrdner() und title_detail::originalStatus->getSeite() ?
textBox6 hat den wert 3
textBox5 hat den wert 2
title_detail::originalStatus->getOrdner() hat den wert 4
title_detail::originalStatus->getSeite() hat den wert 5Also in der textBox steht der neue wert in der get-Methode der alte!
-
Dann wird es wohl an einer der nullptr liegen die Du da übergibst.
Btw.: Willst Du nicht lieber ne DataRow und den Adapter mit Update aufrufen als die Methoden direkt zu verwenden ?
-
Setze in Deiner Datenbank alle Spalten auf "NULL allowed" dann ist das Problem weg.
Oder poste hier mal aussagefähige Code Schnipsel...
-
Ich tippe mal ein wenig darauf, das für die Originalwerte, die für den Datenabgleich ob sich der Datensatz zwischenzeitlich geändert hat, nullptr übergeben wird.
In diesem Falle würde man sich , sollte das mit dem Null Allowed klappen, ggf. eine CurrencyViolation einfangen.
Aber wie gesagt, ohne aussagefähigen Code lässt sich da nur rum raten.
-
Also es klappt jetzt
Ich übergebe nun der Update()-Funktion anstatt eines nullptrs ein System::DBNull::Value->ToString() und schon läuft es
Danke für eure Hilfe!