Forum: PC-Programmierung asp.net MySQL select - statements


von Detlef (Gast)


Lesenswert?

ich programmiere in Mono/Linux für einen Linux-Server asp.net,*.aspx .
Da komme ich momentan nicht weiter.
Ich habe eine SqlDateSource mit MySQL-Connection.

Diese SqlDateSource ist mit einer GridView verbunden.

Solange ich die Spalten der Datenbank direkt ausgebe, funktioniert es 
normal.

Verwende ich aber eine MySql Funktion im Query, z.B.
"Select sum(col1), col2 from table1",

dann hat er probleme mit col1:

System.Web.HttpException
Property col1 not found in System.Data.DataRowView

Die gleiche Query funktioniert aber, wenn ich direkt im 
MySql-Eingabe-Interpreter bin.

Kennt jemand eine Lösung?
Auf andere Datenbanken oder LinQ umsteigen ?
(Mit SQLite geht es auch nicht, schon ausprobiert, das scheint kein 
DB-Problem zu sein, sondern asp.net oder mono)

von Detlef (Gast)


Lesenswert?

Nachtrag:
1
        MySqlConnection dbcon = new MySqlConnection("......");
2
        dbcon.Open();
3
4
        MySqlCommand cmde = new MySqlCommand(
5
                "select  sum(col1) , col2 FROM table1", dbcon);
6
        MySqlDataAdapter da = new MySqlDataAdapter(cmde);
7
        DataSet ds = new DataSet();
8
        da.Fill(ds);
9
        gridTest1.DataSource = ds;
10
        gridTest1.DataBind();
1
System.Web.HttpException
2
Property col1 not found in System.Data.DataRowView
3
Description: HTTP 500.Error processing request.
4
5
Details: Error processing request.
6
7
Exception stack trace:
8
  at System.Web.UI.DataBinder.GetPropertyValue (System.Object container, System.String propName) [0x0006e] in <79d7580b4e46487286a5f8386a98413d>:0 
9
  at System.Web.UI.WebControls.BoundField.GetBoundValue (System.Web.UI.Control controlContainer) [0x0004d] in <79d7580b4e46487286a5f8386a98413d>:0 
10
  at System.Web.UI.WebControls.BoundField.GetValue (System.Web.UI.Control controlContainer) [0x00012] in <79d7580b4e46487286a5f8386a98413d>:0 
11
  at System.Web.UI.WebControls.BoundField.OnDataBindField (System.Object sender, System.EventArgs e) [0x00024] in <79d7580b4e46487286a5f8386a98413d>:0 
12
  at System.Web.UI.Control.OnDataBinding (System.EventArgs e) [0x00029] in <79d7580b4e46487286a5f8386a98413d>:0 
13
  at System.Web.UI.Control.DataBind (System.Boolean raiseOnDataBinding) [0x0003c] in <79d7580b4e46487286a5f8386a98413d>:0 
14
...

von Thomas V. (tomv)


Lesenswert?

Hallo Detlef,

ich habe zwar keine Ahnung von asp.net, aber "Gridview" klingt für mich 
schon nach einer Funktion für die Präsentation der Daten in einer GUI.
Eventuell braucht er ja dafür konkrete Spaltennamen?

In diesem Fall könnte eine leicht abgeänderte Query wie

"Select sum(col1) as summe1, col2 from table1"

vielleicht zielführend sein.

von Detlef (Gast)


Lesenswert?

Nee, ich habe es ausprobiert "sum(col1) as sum1", und er wirft die 
gleiche Exception.

https://dev.mysql.com/doc/dev/connector-net/6.10/html/T_MySql_Data_MySqlClient_MySqlCommand.htm

Die MySqlCommand Class ist ja sehr umfangreich,
man müsste vllt die Query anders formulieren?

von Thomas V. (tomv)


Lesenswert?

Detlef schrieb:
> Nee, ich habe es ausprobiert "sum(col1) as sum1", und er wirft die
> gleiche Exception.

Dann wäre es interessanter, mehr herauszubekommen, was ihn da stört.

> Die MySqlCommand Class ist ja sehr umfangreich,
> man müsste vllt die Query anders formulieren?

Aus Sicht von MySQL ist die Query syntaktisch in Ordnung. habe da 
sgerade noch einmal direkt im MySQL getestet.
Ich vermute die Ursache eher in Deinem Framework drumherum.

von Detlef (Gast)


Lesenswert?

Wenn ich den Spaltennamen in runden Klammern schreibe, also
"Select (col1), col2 from ..."
dann kommt auch die gleiche Exception.
(Aber funktioniert im MySql-Interpreter)

Muss man vllt fÜr die Klammern spezielle Escape-Sequenzen verwenden?

von Mit zur Wahrheit. (Gast)


Lesenswert?

col1 im die query mit aufnehmen, nicht nur sum(col1)

von Thomas V. (tomv)


Lesenswert?

Ist es vielleicht ein Bug im Mono?

https://marc.info/?l=mono-bugs&m=123370994706945&w=2

von Detlef (Gast)


Lesenswert?

"col1 im die query mit aufnehmen, nicht nur sum(col1)"

Genau das war's, das habe ich unabhängig selber rausgefunden.

von leo (Gast)


Lesenswert?

Detlef schrieb:
> "Select sum(col1), col2 from table1",

Du zeigst zwar die Tabelle nicht, also nur eine Vermutung:
Du kannst Aggregate (sum) nicht mit Einzelwerten mischen, du brauchst 
entweder auch ein Aggregat fuer col2 oder ein 'group by col2'.

HTH
leo

von Detlef (Gast)


Lesenswert?

Sorry,
ich hatte nicht sum(), sondern from_unixtime().
Die Zeiten sind in der Spalte col1 als unix_timestamp gespeichert, ich 
wollte sie als Datum/Uhrzeit anzeigen.

Da ich vorher viel im Internet suchte, und sum() öfters vorkommt als 
from_unixtime() habe ich es geändert.
Durch die Exception ist mir die Vermischung Aggregate/Einzel gar nicht 
aufgefallen.

von leo (Gast)


Lesenswert?

Detlef schrieb:
> Sorry,
> ich hatte nicht sum(), sondern from_unixtime().

Das erleichtert die Fehlersuche ungemein, keine genaue Angaben, falsche 
Source, ..., baba

leo

von Detlef (Gast)


Lesenswert?

Das hatte mit dem Fehler nichts zu tun.
Das Verhalten war bei sum() oder from_unixtime() gleich.

Das obige Code-Beispiel mit der abgedruckten Exception war aber original 
mit sum() !

Ich bin davon ausgegangen, dass Mono seltene DB-typische Funktionen 
nicht kennt, aber bei DB-unabhängigen Funktionen funktionieren müsste.
(Von timestamps darf und kann ich ja die Summe bilden,
aber das macht wenig Sinn.)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.