DataReader Problem?!



  • Hallo,

    wahrscheinlich ein einfaches Problem, aber ich stehe heute einfach auf dem Schlauch. 😞
    Ich hoffe, das ihr mir helfen könnt?!

    public static IEnumerable<Sales> GetSalesVolume(Int32 customerNo)
            {
                string sJanuaryVol = "";
                double dJanuaryVol = 0;
                string sFebruaryVol = "";
                double dFebruaryVol = 0;
                // ...
    
                string strSQL = @"SELECT Month(be.lieferdat) AS MONAT, b.KundenNr 
                                    FROM tblorderDetail be 
                                    LEFT JOIN tblorder b ON be.BestellID = b.BestellID LEFT JOIN tblitems a ON be.ArtikelID = a.ArtikelID 
                                    WHERE be.lieferdat Like '2012%' 
                                    GROUP BY Monat, b.KundenNr 
                                    HAVING b.KundenNr Like '?customerNo%' ORDER BY Monat";
                using (var connection = new MySqlConnection(sConnection))
                {
                    connection.Open();
    
                    using (var command = new MySqlCommand(strSQL, connection))
                    {
                        command.Parameters.Add("?customerNo", MySqlDbType.Int32);
                        command.Parameters["?customerNo"].Value = customerNo;
    
                        using (var dr = command.ExecuteReader())
                        {
                            List<Sales> volume = new List<Sales>();
                            while (dr.Read())
                            {
                                for (int m = 1; m <= 12; m++)
                                {
                                    if (dr.GetString(0) == "1")
                                    {
                                        if (dr.IsDBNull(6) == true)
                                        {
                                            sJanuaryVol = "0";
                                        }
                                        else
                                        {
                                            sJanuaryVol = dr.GetString(6);
                                        }
                                        dJanuaryVol = dJanuaryVol + Convert.ToDouble(sJanuaryVol);
                                    }
                                    else if (dr.GetString(0) == "2")
                                    {
                                        if (dr.IsDBNull(6) == true)
                                        {
                                            sJanuaryVol = "0";
                                        }
                                        else
                                        {
                                            sFebruaryVol = dr.GetString(6);
                                        }
                                        dFebruaryVol = dFebruaryVol + Convert.ToDouble(sFebruaryVol);
                                    }
                                }
                                volume.Add(new Sales { January = dJanuaryVol, February = dFebruaryVol });          
                            }
                            return volume;
                        }
                    }
                }
            }
    

    Nun meine Frage ... warum wird

    while (dr.Read())
    

    nicht ausgeführt? der Debugger springt statt dessen gleich zum Rückgabewert.
    Die Sql Anweisung ist soweit richtig - zumindest wenn ich sie so direkt auf der Datenbank ausführe. Werte für das Jahr und den Kunden werden ebenso übergeben.
    Daten sind für die angegebenen/übergebenen Werte vorhanden.

    Was können die Ursachen sein?
    An welchen Stellen kann der Fehler stecken?

    Danke schon mal!
    Cejka



  • Vermutlich weil '?customerNo%' ein Stringliteral ist, welches in der Datenbank nicht vorkommt. Named Parameter gibt man ohne '' an.


Anmelden zum Antworten