| 

.NET C# Java Javascript Exception

1
Erstmals hallo zusammen, bin recht neu hier 
Mit dem Thema VB in Verbindung von .Net befasse ich mich erst seit kurzem. Wobei ich das System super finde, leider fehlt es halt noch etwas um die Materie richtig ausnutzen zu können…
Nun komme ich eben zu meiner Frage, wo ich an meine Grenzen derzeit Stoße…..
Würde gerne eine vorhandene Excel xlsx Datei in ein Gridview laden, und das dann in Html anzeigen lassen. Das habe ich schon mit der Hilfe des Internetes ganz gut geschafft 
Kann da auch zwischen den einzelnen Arbeitsblättern in der xlsx Datei wählen, also alles super!

Mein Problem ist das in der genannten Datei oft gleiche Werte (Duplikate) sind und diese dann logischer Weisse auch in HTML angezeigt werde.
Mein Wunsch wäre es eben das beim Darstellen des Gridview die Dopplungen nicht angezeigt werden würden. Das kann anhand der ersten Spalte passieren da, da immer eine IP Adresse drinsteht.

Hier mal mein Code zum einlesen ins Gridview:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
' Definition von Pfad
pfad = "~/App_Data/2.xlsx"
Dim DBConnection = New OleDbConnection(
"Provider=Microsoft.ACE.OLEDB.12.0;" &
"Data Source=" & Server.MapPath(pfad) & ";" &
"Extended Properties=""Excel 8.0;HDR=Yes""")
DBConnection.Open()
Dim SQLString As String = "SELECT * FROM [10 - Events$]"
Dim DBCommand = New OleDbCommand(SQLString, DBConnection)
Dim DBReader As IDataReader = DBCommand.ExecuteReader()
GridView1.DataSource = DBReader
GridView1.DataBind()
DBReader.Close()
DBConnection.Close()


End Sub


Wäre super wenn mir da jemand helfen könnte oder nen Ansatz geben kann wie ich da weiter machen könnte. Bestenfalls mit Beispiel :-)

Beste Grüße
Peter
News:
28.01.2018
7 Antworten
0
Zunächst müssten Sie entscheiden, welcher Datensatz bei einem Duplikat erhalten bleiben soll.
Duplikate können Sie zunächst ganz einfach vermeiden, in dem Sie statt
SELECT * FROM ...

stattdessen
SELECT DISTINCT * FROM ...

verwenden.
Bei komplexeren Anforderungen bleibt Ihnen nicht anderes übrig, als die Datensätze aus DataReader in einen eigene Collection einzulesen und erst diese Collection zu binden.

Vielleicht hilft dies weiter...
29.01.2018
edvservice 1,3k 1 6
Hallo, besten Dank für die Antwort!! Werde ich heute später noch ausprobieren.
Welcher von dennen Datensätzen erhalten bleibt ist eigenltich egal, da sich die Zeilen in dem Excel Sheet (mehrfach-) wiederholen, der inhalt aber ja der gleiche ist. Wegen der Übersicht sollen diese dann eben nur einmal angezeigt werden.....

Wie gesagt probiere ich dann aus, evtl. war es ja das schon...
peterjura 29.01.2018
0
Hab es schon probieren können, die Idee war gut! Aber leider steckt der Teufel ja im Detail, liegt auch an meiner nicht ganz richtigen Formulierung.

Problem ist das ich in der jeweiligen Zeile auch ein Zeitstempel habe, somit ist die Zeile nicht immer gleich.

Die Überprüfung muss sich immer auch die erste Spalte der jeweiligen Zeile beziehen. Nur anhand dieses Kriterium darf er Filtern...
29.01.2018
Da der Exceltreiber praktisch die gesamte SQL-Syntax auch für andere Treiber bereitstellt, sollte auch so etwas möglich sein:
SELECT Spalte 1,.. Spalte n FROM <Arbeitsblatt>
GROUP BY Spalte 1 ...
HAVING <Bedingung>
Damit kann nach Daten gruppiert und nur unterschiedliche Gruppenbegriffe ausgewählt werden - ich habe es allerdings nicht explizit erprobt.
edvservice 29.01.2018
0
..... Danke für die Info.......
Ja denke auch das dies in irgendeiner Form möglich ist. Sei es Gruppierung oder einfach Ausblenden......

Scheitert leider noch etwas an meinen Kentnissen.....
29.01.2018
0
Da ich die Struktur Ihrer Daten nicht kenne und nicht weiß, welche Daten wie zu extrahieren sind, kann ich Ihnen leider keine näheren Angaben zum SQL geben. Ich erprobe solche Statement einfach mit einer Datenbank - bei uns SQL-Server mit Beispieldaten.

Sie können aber auch den DataReader sequentiell durchlaufen und eine eigene Collection von Daten zusammenstellen - etwa so:
if (reader.HasRows)
{
while (reader.Read())
{
// Hier ihre Daten abfragen - Beispiel Ganzzahl und Zeichenkette
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
// Hier Collection(klasse) aufbauen
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();

Die Collection(klasse) lässt sich dann als Datenquelle für Ihr Grid verwenden.
29.01.2018
edvservice 1,3k 1 6
0
....naja Struktur ist etwas übertreiben...

ist eine einfache Excel Tabelle. In de ersten Spalte der jeweiligen Zeile ist eine IP Adresse, anhand derer soll er reagieren.

Die Zeile nur einmal im Griedview pro IP Adresse anzeigen...
29.01.2018
Wenn es mehrere Zeilen mit der selben IP-Adresse in Spalte 1 gibt, stellt sich aber die Frage: Welche Zeile soll gewählt werden? Sie benötigen dann für die Auswahl ein zweites Kriterium im SQL oder Sie verarbeiten die Daten wie oben angedeutet sequentiell, was möglicherweise einfacher ist.
edvservice 30.01.2018
0
.. einfach die erste Zeile die in der Reihe vorkommt, da diese alle die bis auf den Zeitstemel die gleichen Daten erhalten.

Und dieser Stempel ist eher unwichtig...
30.01.2018
0
Dann sollte folgendes funktionieren:

SELECT <IP-Spalte>, MIN(<Spalte2>, ... MIN(<Spalte n>) FROM <Blatt>
GROUP BY <IP-Spalte>


Diese Abfrage gruppiert nach der <IP-Spalte> - bei Ihnen Spalte 1 - bei alle anderen Spalten werden die kleinsten Werte verwendet. Dies möglich, da die Daten bis auf den Zeitstempel gleich sind. Damit wird die IP-Adresse mit dem kleinsten Zeitstempel selektiert.
30.01.2018
edvservice 1,3k 1 6
auch in aspx? also VB.NET=?
peterjura 31.01.2018
...checke es nicht, sorrry
..
peterjura 31.01.2018
Sie haben in Ihrem Beispiel bereits eine Verbindung zum Excel aufgebaut. Müssen Sie nicht einfach Ihr Statement anpassen?
Falls das der Treiber nicht mitmacht, könnte man den ODBC-Treiber für Excel probieren. Zumindest in VB-Script funktioniert das wunderbar und sollte auch unter ASP.NET gehen.
Schneller dürfte übrigens dann der Weg über den DataReader sein und eine sequentielle Bearbeitung, dann hier nicht so viele Schichten konfiguriert und durchlaufen werden müssen. Die Logik steckt dann in der Schleife: Identbegriff merken und auf Wechsel reagieren und eine eigene Collection aufbauen.
edvservice 01.02.2018

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH