dynam. DB-Abfrage anzeigen

26/07/2009 - 13:37 von Stefen Maier | Report spam
Hallo,

ich möchte dem User die Möglichkeit geben selbst Abfragen zu erstellen und
in einer Tabelle das Egebniss anzeigen zu lassen.

Dabei möchte ich ein paar Restriktionen einhalten.
1- das Ergebniss ist voll dynam., also die Tabellen sehen jedesmal anders
aus, andere Felder, Feldnamen, FeldTypen
2- sollte die Abfrage zu lange dauern, soll sie der User abbrechen können.
Thread.Abort reicht hier nicht, was könnte man sonst noch tun, die
DB-Verbindung irgendwie killen?
3- Formatierung der Anzeige mit Tablestyle, alle Datetime-Felder sollen auch
die Uhrzeit anzeigen, Integer rechtsbündig ggf. formatiert mit 1000er
Punkten., Double immer zwei. Kommastellen usw.


Wie geht man hier vor, in welcher Reihenfolge rufft man was auf?
 

Lesen sie die antworten

#1 Frank Dzaebel
26/07/2009 - 15:22 | Warnen spam
Hallo Stefen,

ich möchte dem User die Möglichkeit geben selbst Abfragen zu
erstellen und in einer Tabelle das Egebniss anzeigen zu lassen.
Dabei möchte ich ein paar Restriktionen einhalten.
1- das Ergebniss ist voll dynam., also die Tabellen sehen jedesmal
anders aus, andere Felder, Feldnamen, FeldTypen



Das ganz hàngt von der Vielzahl der zu unterstütenden
DBs ab, aber ich beschrànke mich mal auf SQL Server.
Es gibt viele Möglichkeiten und Tools dafür.
Es ist in diesem Szenario meistens vorteilhaft, ein
DataGridView zu nehmen und dessen DataSource
an einen DataTable (o.à.) zu binden:

[SqlCommand.BeginExecuteReader-Methode (AsyncCallback, Object,
CommandBehavior) (System.Data.SqlClient)]
http://msdn.microsoft.com/de-de/lib...wyh68.aspx



2- sollte die Abfrage zu lange dauern, soll sie der User abbrechen
können. Thread.Abort reicht hier nicht, was könnte man sonst noch
tun, die DB-Verbindung irgendwie killen?



Im Prinzip lassen sich asynchrone Abfragen über:

[SqlCommand.Cancel-Methode (System.Data.SqlClient)]
http://msdn.microsoft.com/de-de/lib...ancel.aspx

abbrechen - allerdings nicht in allen Fàllen.



3- Formatierung der Anzeige mit Tablestyle, alle Datetime-Felder
sollen auch die Uhrzeit anzeigen, Integer rechtsbündig ggf.
formatiert mit 1000er Punkten., Double immer zwei. Kommastellen usw.



Das DataGridView hat genügend Einstellungsmöglichkeiten.

[Gewusst wie: Formatieren von Daten im DataGridView-Steuerelement in Windows
Forms]
http://msdn.microsoft.com/de-de/lib...2790s.aspx

Was letztlich folgendes benutzt:

[Formatierung von Typen]
http://msdn.microsoft.com/de-de/lib...ft59x.aspx

Für erweiterte Formatierung ist folgendes nützlich:

[DataGridView.CellFormatting-Ereignis (System.Windows.Forms)]
http://msdn.microsoft.com/de-de/lib...tting.aspx

________

Für ambitioniertere Vorgehensweisen, kann man
auch einen Code-Editor bereitstellen, der die
Abfrage über C# mit LINQ erlaubt (Du bist in diesem
Szenario u.a. immer der Gefahr der SQL Injection
ausgesetzt), oder das freie SQL Server Management
Studio (2008) dafür installieren lassen.
Oder über die freie Visual Studio 2008 Shell (isolierter Mode)
den C# Editor für LINQ zugànglich machen [..]


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen