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 5

    Also 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!


Anmelden zum Antworten