Laden...

Ausnahmefehler System.InvalidCastExeption

Erstellt von Luisman vor 3 Jahren Letzter Beitrag vor 3 Jahren 261 Views
L
Luisman Themenstarter:in
1 Beiträge seit 2020
vor 3 Jahren
Ausnahmefehler System.InvalidCastExeption

Verwendetes Datenbanksystem: PostGresSQL

Hallo alle Miteinander,

verzeiht mir erstmal wenn ich nicht alles ganz korrekt den Forum regeln Poste ich bin neu hier im Forum,
konkret bekomme ich den Fehler das Objekt des Typs "System.Double" kann nciht in Typ "NetTopologySuite.Geometries.Linestring" umgewandelt werden, was meiner Meinung nach bedeutet das der Typ Double aus der Datenbank Tabelle nicht umgewandelt werden kann, wie könnte man die Methode entsprechend umschreiben und den Fehler beseitigen ?


 private List<PointGeom> GetFromLineString(string tableName, NpgsqlDataReader reader)
        {
            var pointList = new List<PointGeom>();
            while (reader.Read())
            {
                var lineString = (LineString)reader[2];
                var srid = lineString.SRID;
                int pointN = 0;

                for (int j = 0; j < lineString.NumGeometries; j++)
                {
                    for (int i = 0; i < lineString.NumPoints; i++)
                    {
                        var poisition = new List<int> { i, j };
                        PointGeom point = new PointGeom(
                            tableName,
                            reader.GetInt32(0),
                            pointN,
                            poisition,
                            !reader.IsDBNull(1) ? reader.GetString(1) : null,
                            ((LineString)lineString).GetPointN(i)
                        );
                        point.Point.SRID = srid;
                        pointList.Add(point);

                    }

                }

            }
                return pointList;
        }

Mit besten Grüßen

T
2.219 Beiträge seit 2008
vor 3 Jahren

Wie soll das jemand für dich machen?
Du zeigst weder die Zeile in der dieser Fehler auftritt, weshalb man nur raten kann.
Ebenfalls kennen wir weder deine Datenbank, Tabelle und Spalten die du hier auslesen willst.

Aktuell kann man anhand der Meldung nur daraus schließen, dass du die falsche Spalte aus deinem DataReader ausliest.
Hier scheinst du in Zeile 6 durch deine Casting den Fehler zu verursachen.
Hast du den mal in die Doku der Library geschaut, ob man die Daten nicht fertig auslesen kann?
Beim SqlServer lese ich die Daten z.B. für SqlGeometry als Bytes aus und lasse diese von SqlGeometry dann verarbeiten.
Hier muss keine extra Methode angelegt werden um die Geometry auszulesen.

Ich kann mir vorstellen, dass die Library schon eine fertige Lösung dafür anbietet.
Musst du aber selbst prüfen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

C
2.121 Beiträge seit 2010
vor 3 Jahren

"lineString" scheint ein komplexes Objekt zu sein das verschiedene "Geometries" und "Points" enthält. Daher kann das rein vom Inhalt her nichts sein was aus einem einzigen double stammt. Erst recht nichts was man durch einen Cast einfach konvertieren könnte.
Ich würde sagen da trifft beides zu. Zum einen falsches Feld und zum anderen muss es eine Konvertierungsroutine geben.