Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mo 07.12.15 14:11 
Hallo zusammen,
kaum macht man mal paar Monate nichts wegen der Arbeit schon steht man wieder auf dem Schlauch.
Ich habe hier eine "Kleinigkeit" was mich aber gerade vor ein riesen Problem stellt.

Ich habe eine Combobox, die optional zum auswählen ist.
In der Datenbank ist das entsprechende Feld mit "Erlaube Null" markiert.

Die Property der Klasse

ausblenden C#-Quelltext
1:
        public long? CustomerContactID { get; set; }					


Die Methode zum Schreiben in die MySQL Datenbank. Im einzelnen geht es hier um das Feld "KundekontaktID"

ausblenden 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:
        public static void UpdateBillingMain(BillingMain myMain)
        {
            strSQl = "Update rechnung SET datum=?datum, kundeid=?kundeid, kundekontaktid=?kundekontaktid, prozent=?prozent, art=?art where rechnungid=?rechnungid";

            using (MySqlConnection conn = new MySqlConnection(connStr))
            {
                using (MySqlCommand cmd = new MySqlCommand(strSQl, conn))
                {
                    conn.Open();

                    cmd.Parameters.AddWithValue("?kundeid", myMain.CustomerID);
                    cmd.Parameters.AddWithValue("?kundekontaktid", myMain.CustomerContactID);
                    cmd.Parameters.AddWithValue("?datum", Convert.ToDateTime(myMain.BillingDate));
                    cmd.Parameters.AddWithValue("?prozent", myMain.Prozent);
                    cmd.Parameters.AddWithValue("?art", myMain.Type);
                    cmd.Parameters.AddWithValue("?rechnungid", myMain.BillingId);

                    cmd.ExecuteNonQuery();

                    conn.Close();
                }
            }
        }


Wenn jemand die Combobox auswählt funktioniert es auch, aber wenn das Feld leer bleibt nicht.

ausblenden C#-Quelltext
1:
2:
3:
4:
            if (cmbAnsprechpartner.SelectedIndex == -1)
                myBilling.CustomerContactID = null;
            else
                myBilling.CustomerContactID = Convert.ToInt64(cmbAnsprechpartner.SelectedValue);


Würde mich über Hilfe freuen.

Gruß
Daniel

P.S.: ich weiß noch, dass es keinen Sinn macht zwischen englischen und deutschen Befehlen zu mischen.
Dies ist immer noch das erste Projekt was ich mal vor gefühlt Jahren angefangen habe was ich jetzt bis März endlich mal beenden will und würde dann in einem neuen eure Ratschläge dahin gehend umsetzen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 07.12.15 15:28 
Zitat:
Wenn jemand die Combobox auswählt funktioniert es auch, aber wenn das Feld leer bleibt nicht.


Geht nicht ist mal eine sehr dünne Beschreibung. Wieweit hast du das denn schon debuggt? Steht was unerwartetes in SelectedIndex oder SelectedValue? Oder kommt da das passende an aber der Update Befehl schreibt nicht das erwartete in die DB oder knallt es mit einer Exception oder oder oder ....

Zitat:
P.S.: ich weiß noch, dass es keinen Sinn macht zwischen englischen und deutschen Befehlen zu mischen


Naggen tun wir trotzdem. Wenn du seit ein paar Monaten nicht dran gearbeitet hast leidest du da hoffentlich selbst dran und nimmst die Lektion mit ;)
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Di 08.12.15 09:33 
Hey,
der Fehler kommt daher, dass wenn der User nicht den Kontakt angeben will, weil es optional ist, ich dem Wert null zuweise, da die Datenbank an der Ecke leer bleiben soll.

Leider speichert er es so dann nicht und bemängelt die null an der Ecke

Danke

Gruß
Daniel

P.S.: Das Feld KundekontaktID hat einen Fremdschlüssel zu einer anderen Tabelle und beim Update bemängelt er er könne den Fremdschlüssel eine child Row nicht setzen wegen der NULL

Edit. Ich sehe gerade, dass er aus der nicht ausgewerteten Combobox statt meiner zugewiesenen NULL eine 0 macht und dadurch den Schlüssel nicht setzen kann.
Wie könnte ich das umgehen?

EDIT2: Wenn ich genau hingeschaut hätte, dann hätte ich gesehen, dass er den Fehler nicht in der MainMethode sondern einer anderen Methode verursacht hat und das lag daran dass ich long und nicht long? übergeben habe.

Sorry