Database-Explorer

tom-essen
Hallo!

Wie bereits in  Additional.NET beschrieben, arbeite ich seit ca. 2007 an einem Framework zur Erweiterung der .NET-Funktionalitäten.

Ein Punkt dabei war der Zugriff auf Datenbanken bzw. Daten in datenbank-ähnlichen Strukturen über eine einheitliche Schnittstelle.

Dank der Feiertage bin ich diesem Ziel nun wieder einen Schritt näher gekommen.

Aus dem anfänglichen Testprojekt ist ein für mich recht wichtiges Werkzeug geworden. Im Gegensatz zu einem erst zu installierendem SQL Management Studio mit locker 100 MB ist der Database-Explorer (im folgenden nur noch DBE genannt) sofort einsatzbereit und mit ca. 22MB (bzw. ca. 7MB als ZIP) auch schneller geladen (OK, mit Oracle-Dateien sind es knapp 120 MB).

Der Vorteil liegt in der gleichzeitigen Verwaltung mehrere Datenquellen in einer Oberfläche. Sicherlich bieten die DB-speziellen Tools einige Vorteile, aber für den alltäglichen Bedarf sind diese in der Regel nicht notwendig (behaupte ich zumindest mal).

Die Komponenten des Frameworks dürfen auch in eigenen Projekten verwendet werden, ein Beispiel findet sich in einem der folgenden Beiträge.

Z.Zt unterstützt der DBE folgende Datenquellen (Stand Jan. 2013):
  • MS SQL
  • MS SQL Compact
  • mySQL, wenn der Connector v6.3.5 im GAC liegt (andere Versionen wurden nicht getestet)
  • Oracle (bei installiertem Client)
  • ODBC
  • CSV/Text
  • Firebird
  • SQLite (benötigt sqlite.dll)
  • HTML
  • dBase
  • Excel (bis 2007)
  • Access (über 32bit-MS-Jet 4.0-Treiber)
Die Datenquellen werden nach Datenquellentyp (MSSQL, mySQL, ...) sortiert angezeigt. Das TreeView-Control arbeitet dynamisch, d.h. beim erstmaligen aufklappen kann es etwas dauern, bis die darunterliegenden Informationen geladen wurden (gerade bei den dateibasierten Datenquellen).

Einstellungen:
Aktuell habe ich noch das Problem, dass hier oft englische und deutsche Namen durcheinander kommen, da arbeite ich noch dran. Bei einigen dateibasierten Datenquellen (CSV, Text, HTML) sind zusätzliche Einstellungen möglich, um die Auswahl einzuschränken bzw. Vorgaben bzgl. der Daten zu machen (bei CSV bspw. ob die erste Zeile die Spaltennamen enthält).

Folgendes ist geplant (Reihenfolge ist nicht zwingend maßgebend):
  • Transaktionen
  • Implementierung von IDataReader
  • Verbesserter Support für MS SQL, mySQL und Oracle bzgl. Views und Procedures.
  • Unterstützung für DB2, PostGreSQL (Reihenfolge nicht relevant Augenzwinkern ).
  • Abfrage über mehrere Datenquellen, also z.B. zwischen Excel, MSSQL und CSV
  • Unterstützung für SharePoint-Listen und Word-Tabellen.
  • Verbesserte Unterstützung für Word, Excel und Access.
  • Verbesserte Encoding-Prüfung beim CSV-Import.
  • Verbesserte Unterstützung für dBase (Memotexte, Encoding, Indizees, Geschwindigkeit).
  • Mehrstufige Abfragen (z.B. zu einer Angebotsnummer nicht nur den Eintrag aus einer Angebotstabelle sonder zusätzlich auch die Angebotspositionen aus einer anderen Tabelle laden und separat anzeigen).
  • Vergleich von Abfragen, Verwenden von Teilergebnissen bzw. Spalten eines Ergebnisses für weitere Abfragen.
  • SQL-Query-Editor mit IntelliSense (das wird dauern Augenzwinkern ).
  • Schreiben in dateibasierte Datenquellen
  • SQL-Parser für erweiterte SELECT-Abfragen bei dateibasierten Datenquellen (teilweise schon umgesetzt)
  • Notifications, sofern von der DB unterstützt
  • Auflistung und Ausdrucksmöglichkeit für angegebene Referenzen
  • Rechteverwaltung
  • Stored Procedures
  • ...
Leider ist das Archiv mit OpenXML-Support zu groß für den Upload geworden, daher nun per Link:  DatabaseExplorer.zip (7.0 MB). Das Archiv einfach in einen Ordner entpacken und die exe starten, Mindestvorraussetzung ist .NET v3.

Und hier noch ein Screenshot mit Erläuterung der Symbole (die Toolbar ist unterteilt in die Bereiche Panel-Steuerung, Panel-Layout, Ergebnis-Layout und Ergebnis-Verwendung): (Stand ca. Mitte 2012, muss mal wieder angepasst werden)
tom-essen
Hallo!

Hier noch ein Screenshot
tom-essen
Hallo!

Musste gerade feststellen, dass die Einstellungen nur per Tastatur kaum durchführbar sind (Maus-Batterien leer), dass muss ich noch ändern.

Hier noch ein Screenshot während der Einrichtung einer dBase-Datenquelle (Auswahl einer Datei):
bounty4
Hallo Tom,

coole Sache der Database-Explorer. Funktioniert mit meinen DBASE IV Datenbanken nur zum Teil.
Bei der wichtigen DB werden Tabelle und Spalteninfo ausgelesen. Allerdings ohne Inhalte. Liegt vermutlich daran, daß die DB Memory Felder enthält.
Bei einer mit dem DB Base Viewer erstellten DB wird die Tabelle komplett geöffnet.
Das Logging scheint noch nicht zu funktionieren. Zumindest habe ich den Pfad angegeben. Wird die Datei automatisch erstellt?

.csv Dateien wurden Problemlos geöffnet. Schön wäre eine Möglichkeit der Angabe des Trenners.

Könnte ich die TD.Additional.Data.Dbase.dll nutzen? Wenn ja wie?

Danke schonmal

Gruß Thomas
Scavanger
Praktische Sache. Daumen hoch

Was von meiner Seite aus noch wünschenswert wäre, wäre eine Unterstützung von SQLite, mit SQLlite DB's hab ich relativ oft zu tun.

Ansonsten ein Top-Programm.
tom-essen
Hallo!

@bounty4:
Ja stimmt, die MemoryFelder, werden (noch) nicht unterstützt (d.h die Daten in den DBT-Dateien).
Bzgl. Logging: Die Datei wird automatisch erstellt, sobald eine Meldung erstellt wird. Allerdings unterstützen die dateibasierten Datenquellen-Adapter z.Zt. noch kein Logging. Ist aber nun auch mit auf der Liste.
Bzgl. Trenner bei CSV-Import: Ebenfalls ein guter Hinweis, ist nun auch auf der Liste.
EDIT: Stand Nov. 2012 alles umgesetzt.

Die TD.Additional.Data.Dbase.dll kann man selbstverständlich auch in eigenen Projekten verwenden.
Als Verweise muss man "TD.Additional.dll", "TD.Additional.Data.dll" und die jeweilige Datenquellen-Assembly einbinden.

C#-Code (Beispiel für dBase):
using TD.Additional.Data;
using TD.Additional.Data.Dbase;
using TD.Additional.Data.File;

[...]

var settings = new DbaseDataSourceSettings()
    { FileSource = new FileSourceSettings() { FileName = "Name der dbase-Datei" } };
using (var dataSource = Connections.CreateConnection(settings))
    if (dataSource != null)
    {
        var dataTable = dataSource.Execute("SELECT * FROM whatever");
        // ...
    }

Zuerst werden die Einstellungen erstellt, für jede Datenquelle gibt es entsprechende Settings-Klassen. Für jede muss man anschließend die benötigten Eigenschaften setzen (bei dBase ist momentan nur die Quelle notwendig).
Bei den dateibasierten Datenquellen kann man aktuell zwischen Dateien (FileSourceSettings, Property FileName), Verzeichnissen (FolderSourceSettings, Property Folder) und frei zugänglichen Internetpfaden für einzelne Dateien (UriSourceSettings, Property Uri) wählen.
Connections ist eine statische Klasse, die z.Zt. einzige Methode CreateConnection erstellt eine zum Settings-Typ passende Adapter-Instanz. Wird keine gefunden, wird null zurückgegeben (daher die Prüfung). Mit Execute kann man dann die Daten für eine (gültige) Query abrufen.

EDIT (05.09.2011): Die Methode "Execute" hieß früher "GetData".

@Scavanger:
SQLite kommt mit auf die Liste.
tom-essen
Hallo!

Habe gerade im ersten Post eine neue Version online gestellt:
  • In der TreeView werden nun zusätzlich Icons angezeigt, um das Ganze etwas bunter zu machen.
  • Die Ergebnisse lassen sich nun schließen oder über den Pin als eigenes Fenster abdocken (und wieder andocken). Je nach Einstellungen funktioniert auch das Snapping.
  • Die Query eines Ergebnisses kann nun bearbeitet und das Ergebnis auch aktualisiert werden.
  • Die Spaltenbreite kann nun automatisch berechnet werden, die Zeilenhöhe kann ebenfalls angepasst werden.
  • CSV unterstützt nun auch eigene Trennzeichen (bisher wurde immer automatisch gesucht in der Reihenfolge "Tab, Semikolon, Komma". Als nächstes kommt evtl. noch die feste Breite für Spalten, Probleme gibt's teilweise noch bei deim Encoding.
  • Logging funktioniert nun auch bei den dateibasierten Datenquellen.
  • Nun können auch Acces- und Excel-(xls/xlsx)-Dateien eingelesen werden.
  • Beim Minimieren verschwindet der DB-Explorer nun im Try, ein Klick reicht zur "Wiederbelebung" aus.
  • In den Programm-Einstellungen kann man den DB-Explorer nun auch wahlweise mit Windows starten lassen.
Zusätzlich findet sich nun im ersten Post auch eine Liste mit geplanten Erweiterungen.
b-oern
Das Program startet bei mir nicht.

Debugger sagt: Could not find file 'C:\Users\{user}\DatabaseExplorer.ico'.

Und ja ich hab die zip entpackt.
tom-essen
Hallo!

Das Icon ist nun als Resource mit im Programm.
bounty4
Hi Tom,

Programm startet. Allerdings bekomm ich keine der Datenquelleninhalte angezeigt:

C#-Code:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
   bei TD.Additional.Data.File.FileDataSource.GetData(String query)

Bei DBase und CSV Dateien kommt diese Fehlermeldung.

Betreffs der DBT Dateien wäre es schön wenn zumidest die DBF Datei abgefragt werden könnten
Ist da was geplant?

GRuß Bounty
tom-essen
Hallo!

Habe gerade eine neue Version im ersten Post online gestellt.
Das Logging funktioniert nun endlich korrekt, im Hilfe-Menü kann man das Protokoll direkt anzeigen lassen (es gibt noch einige Probleme beim nach dem Minimieren).
Weiterhin gibt es im Hilfe-Menü nun ein Feedback-Formular, wenn man etwas mitteilen möchte.
An einem erweiterten Ausnahme-Dialog arbeite ich noch.
bounty4
Hi,

Supi, mit der neuen Version werden die Daten wieder abgerufen.

Kannst du das mit DBASE Dateien mit Memoryfile (.dbt) realisieren?

Gruß Thomas
tom-essen
Hallo!

@bounty4:
Die Realisierung an sich wird kein Problem darstellen, eher der Zeitpunkt bis zur Fertigstellung.
tom-essen
Hallo!

Im ersten Post findet sich eine neue Version:
  • Bei den Excel-Einstellungen kann man nun auch angeben, dass nicht per OLE-Treiber, sondern entweder per COM (für xls, ACHTUNG: Langsam) oder OpenXML (xlsx) geladen werden soll
  • Access-Import rudimentär möglich
  • Datei kann auf TreeView gezogen werden, wenn mit rechter Maustaste gezogen, kommt nach den Einstellungen die Frage, ob die Datei als Datenquelle eingebunden oder nur die enthaltenen Tabellen angezeigt werden sollen
  • dBase nun mit rudimentärem Memotext-Support, Encoding funktioniert noch nicht korrekt
  • Neue Datenquelle bzw. ändern oder löschen nun direkt über die Toolbar möglich
bounty4
Hi,

du bist ja schnell. Sehr schönes Programm.
Bei den DBASE Files mit Memoryfile werden allerdings nur die Spaltenköpfe ausgelesen.


Gruß Thomas
tom-essen
Hallo!

@bounty4:
Bzgl. der MemoFiles sucht er nach einer gleichnamigen Datei mit Endung dbt. Entweder hat er diese nicht gefunden oder er hat Probleme beim Einlesen (steht was in den Logs).

@all:
Leider fehlte im letzten Archiv die OpenXML-Assembly, das habe ich gerade geändert.
bounty4
Hi,

im Startordner vom Database - Explorer wurde kein Log erstellt.
Die .dbt Datei liegt im gleichen Ordner.

Gruß Thomas
tom-essen
Hallo!

@bounty4:
Schau mal im Menü "Programm" unter "Einstellungen" nach, dort steht der Ordner, in dem die Protokolle abgelegt werden (standardmäßig unter AppData ...)
bounty4
Hi Tom,

da hatte ich nicht geschaut. Das ist das Log:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
13.01.2011 10:08:55	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:08:57	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:08:59	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:09:00	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:09:00	Debug	LoadTable	Loading table 'Daten' from 'D:\ProjectSource\New Folder\Daten\Daten.dbf'
13.01.2011 10:09:00	Debug	LoadTable	Table with 0 rows loaded
13.01.2011 10:09:06	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:09:06	Debug	GetData	New query: 'SELECT * FROM Daten'
13.01.2011 10:09:06	Debug	LoadTable	Loading table 'Daten' from 'D:\ProjectSource\New Folder\Daten\Daten.dbf'
13.01.2011 10:09:06	Debug	LoadTable	Table with 0 rows loaded
13.01.2011 10:09:34	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:09:34	Debug	GetData	New query: 'select * from Daten'
13.01.2011 10:09:34	Debug	LoadTable	Loading table 'Daten' from 'D:\ProjectSource\New Folder\Daten\Daten.dbf'
13.01.2011 10:09:34	Debug	LoadTable	Table with 0 rows loaded

Die .dbt Datei liegt im selben Ordner.

Gruß Bounty
Harry B.
Bei dBase-Datenbanken werden aktuell keine Index-Dateien (CDX) berücksichtigt. Wird das noch ergänzt werden?

Wird man auf dBase-Datenbanken auch schreibend zugreifen können?