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.