Laden...
Avatar #avatar-2140.png
tom-essen myCSharp.de - Experte
Entwickler & Consultant NRW Dabei seit 15.05.2005 1.820 Beiträge
Benutzerbeschreibung
Interessen: CAPI, TAPI, TWAIN, Win32, Client/Server, Komponenten-Entwicklung, SharePoint, Azure, Cloud-Dienste. Hardware: Ständig wechselnd 😉

Forenbeiträge von tom-essen Ingesamt 1.820 Beiträge

28.02.2011 - 13:53 Uhr

Hallo!

@Totenkopfschwärmer:
Wie schon von den Vorrednern geschrieben, sind die Grundlagen absolut erforderlich. Dazu kann man ja, wie auch in den meisten Büchern begleitend üblich, eigene kleine Programme schreiben, um die Anwendung des neu erlernten zu üben.

Anschließend kann man sich entweder selbst eine Idee suchen und dazu ein Programm schreiben, oder man sucht sich ein kleines, fertiges Programm und analysiert dieses (wie bzw. warum werden die einzelnen Typen, Methoden, ... verwendet, ...), dabei aber immer kritisch bleiben (nur weil es funktioniert, muss es nicht zwingend der richtige Weg sein).

Deine Bot-Idee dringt in einen Bereich vor, welcher die C#-/.NET-Welt teilweise schon wieder verlässt und dafür die Windows-API benötigt. Und für so etwas sollte man zumindest C# sehr gut können.

26.02.2011 - 16:56 Uhr

Hallo!

@Beccy:
Die Fehlermeldung sagt doch alles aus: COMException ist ein Typ/Klasse, mit using darf man aber nur Namespaces einbinden.

25.02.2011 - 11:06 Uhr

Hallo!

@nighty2k:
Bei SQL gibt es auch für WHERE -Conditions das between-Schlüsselwort, um bei Zahlen oder Datumswerten einen bereich zu definieren.

24.02.2011 - 10:00 Uhr

Hallo!

Einige der Smileys scheinen (zumindest bei mir) nicht korrekt zu sein.
"Rotes Gesicht" ( 👍 ) wird bei mir als Daumen nach oben angezeigt, "Augen rollen" ( 🙄 ) als Daumen nach unten, "Zunge raus" habe ich zweimal ( 😜 👅 ), "Freude" ist ein "Achtung"-Schild ( ⚠ ) und "traurig" erinnert mich mehr an schlafen oder gähnen ( 😭 ).
Ist dass nur bei mir so, oder sonst noch keinem aufgefallen?

24.02.2011 - 09:52 Uhr

Hallo!

Habe ein ähnliches Problem.
Schau mal zum einen in der Registry nach (siehe dazu auch http://download.oracle.com/docs/cd/B13789_01/win.101/b10113/registry.htm).
Und dann gibt's noch unter c:\programme\oracle\inventory... irgendwo eine XML-Datei, wo die verschiedenen installierten versionen vermerkt sind. Evtl. zeigt eine dieser Einstellungen auf das falsche Unterverzeichnis.

EDIT: Ups, die Antwort kommt etwas spät 8o.

24.02.2011 - 09:49 Uhr

Hallo!

@all:
Habe gerade festgestellt, dass unter 64bit die Jet-Treiber nicht funktionieren, weil dies von MS nicht supported wird 😦. Werde also demnächst entweder nur noch eine x86-Version anbieten oder beide parallel.

EDIT: Habe noch ein paar Fehler bzgl. MSSQL gefunden (wenn z.B. in den Tabellen Leerzeichen sind). Und auch der Aufruf der Snippets aus dem Tray-Menü funktioniert noch nicht wie gedacht. An Lösungen wird gearbeitet.

24.02.2011 - 09:47 Uhr

Hallo!

@eveN:
ad 1.) Die Eigenschaftsdialoge für die Datenquelleneigenschaften werden alle dynamisch erstellt. Dass hat leider den nachteiligen Effekt, dass - zumindest beim ersten Aufruf eines MSSQL-Eigenschaftsfensters - dann erst die Datenbanken gesucht werden können (was mich zugegeben selbst auch manchmal stört).
Aber den Vorschlag der asynchonen Auffüllung der ComboBox greife ich auf, und werde ihn bei Gelegenheit umsetzen.

ad 2.) Ups, das war eigentlich erstmal nur für mich zum testen und sollte garnicht in die offizielle version rein 😁

ad 3.) DAS kann ich mir absolut nicht erklären. Da schau doch mal bitte in die LogFiles (oder Menü Hilfe, Zeige Protokoll) was da bzgl. dieser Anfrage drin steht.

21.02.2011 - 16:40 Uhr

Hallo!

Oder mit Komponenten des Database-Explorer (Beispiele sind im Thread).

21.02.2011 - 09:54 Uhr

Hallo!

@ibaxx:
Nimm' bloss schnell MessageBox.Show wieder raus: Je nachdem was deine Anwendung macht, kriegst du pro Sekunde bis zu einem Dutzend nachrichten, die dir den Bildschirm mit MessageBoxen vollhauen. Schreib die Daten lieber in die Debug-Konsole oder eine Textdatei.
Und der Fehler könnte auftreten, weil die ersten nachrichten angezeigt werden sollen, obwohl das handle des Hauptfensters noch nicht erstellt wurde.

Evtl. wird auch ein Event oder die KeyPreview-property nicht direkt in der Hauptform sondern im Designer-Code oder durch eine andere Komponente/Klasse gesetzt, vielleicht gibt es da noch Abhängigkeiten oder Erweiterungen.

15.02.2011 - 15:30 Uhr

Hallo!

Es gibt wieder eine neue Version, ist aber diesmal nicht viel dazu gekommen:*TrayIcon-Menü um datenbank-gebundene Snippet-Liste erweitert *Kontextmenü in der TreeView an einigen Punkten erweitert *Die zuletzt verwendeten Abfragen können nun pro Datenquelle über das Kontextmenü abgerufen werden (max. Anzahl in den Einstellungen, Standard ist 20) *Im- und Export von Snippets möglich (ACHTUNG! Z.Zt. noch keine Prüfung auf doppelte Einträge beim Import)

Bzgl. SQL-Parser bei den dateibasierten Datenquellen bin ich noch nicht weiter gekommen., ist ja doch eine etwas größere Aufgabe.

15.02.2011 - 13:45 Uhr

Hallo!

Erstmal die Frage, für welche Zielgruppe die Doku sein soll: Entwickler oder Endanwender.
Für ersteres kann man SandCastle verwenden, für zweiteres ist es eher ungeeignet.

Und da SandCastle meines Wissens nach lediglich aus den Assemblies un den erstellten XML-Dateien die Doku erstellt, sollte die verwendete IDE irrelevant sein.

14.02.2011 - 22:00 Uhr

Hallo!

@MagicAndre1981:

da aber in der Firma nur Windows XP zugelassen ist läuft das OS dementsprechend mit 32 Bit

14.02.2011 - 21:45 Uhr

Hallo!

Aus meiner persönlichen Erfahrung kann ich sagen, dass es am besten ist, wenn man sich ein Projekt aussucht, welches man selbst benutzen möchte, also wenn man z.B. eine konkrete Vorstellung hat, wie man bestimmte Aufgaben mit dem Computer einfacher lösen könnte.
Der Vorteil dabei ist, dass man aufgrund der eigenen Verwendung zum einen eine ganz andere Motivation hat und weiterhin auch viel mehr Ideen hat und bei der Verwendung auch kleinere Fehler relativ schnell entdeckt werden.
Dabei sollte man natürlich nicht gleich mit einem OCR-Projekt starten, welches vollautomatisch den gesamten Aktenbestand in der Wohnung erfasst, sondern eher mit was kleinem (z.B. der berühmten ersten Adress- oder Notiz-Verwaltung als großem Bruder des "Hallo Welt"-Programms).

14.02.2011 - 13:39 Uhr

Hallo!

Um versionsunabhängig auf Office-Instanzen zuzugreifen, bleibt dir entweder, alle dafür benötigten Office-Wrapper einzubinden, oder komplett auf COM-LateBinding umzusteigen, zu zweiterem gobt's sogar schon fertige Komponenten hier im Forum.

10.02.2011 - 13:14 Uhr

Hallo!

Man könnte auch alles in einen separaten Thread packen, und diesen dann bei bedarf beenden. Dadurch wird auch die Abfrage beendet.

10.02.2011 - 13:12 Uhr

Hallo!

Über DataGridView.Source hat man Zugriff auf die Datenquelle

10.02.2011 - 11:01 Uhr

Hallo!

Schau doch mal beim Starten des Programms in der Programm-Ausgabe nach, ob da WPF-Fehler angezeigt werden. Evtl. werden diese im laufenden betrieb irgendwie abgefangen oder ignoriert, und nur der Designer stellt sich da zickig an. Kenne zwar 2010 nicht (arbeite noch mit 2008), aber benutze eigentlich auch nur die Full XAML View, weil der Designer zumindest in 2008 grottenschlecht ist, gerade bei komplexeren Styles oder Layouts.

08.02.2011 - 12:56 Uhr

Hallo!

@Ostblock:
Ja, gibt es, heißt ColumnHeaderClicked oder so ähnlich.

@Minuert:
Wäre unlogiusch. Dann ändert sich ja auch gleichzeitig der selektierte Eintrag, was u.U. nicht gewünscht ist.

08.02.2011 - 09:19 Uhr

Hallo!

LGPL erlaubt die Verwendung in kommerziell genutzten oder vertriebenen Anwendungen, der Einsatz sollte in diesem Fall also kein Problem sein.

Ungeachtet dessen: Selbst wenn eine Anwendung nur innerhalb einer Firma verwendet werden soll ohne einen direkten Gewinn damit zu erzielen, bewirkt es ja trotzdem einen Mehrwert durch automatisierte Workflows für die einsetzende Firma.

06.02.2011 - 23:28 Uhr

Hallo!

Nur zum Verständnis: Wie kann denn der Garbage Collector durch die oben beschriebene DataTable derart beeinflusst werden?

Eine DataTable mit derart vielen Datensätzen hat auch entsprechend viele Verwaltungsobjekte für jede Spalte in jeder Zeile. Und mit jedem GC.Collect müssen sämtliche Referenzen geprüft werden, bei 300.000 Datensätzen kann das schon etwas Zeit in Anspruch nehmen.

06.02.2011 - 23:20 Uhr

Hallo!

gibt es schon was neues in Bezug auf Abfragen nach dem Inhalt einer bestimmten Spalte für die DBASE Dateien?

Meinst du Konstrukte in der Form

select spalte1, spalte2 from...

Wenn nein: was dann.
Wenn ja: Ist in Arbeit, der Lexer und Syntax-Parser für SELECT-Statements ist bereits fertig, als nächstes steht die Integration in die entsprechenden Adapter auf dem Plan.

05.02.2011 - 12:06 Uhr

Hallo!
Der FileSystemWatcher hat ein Exception-Event. Registriere dieses und dann schau nach, ob das Event in deinem Szenario aktiviert wird.
Wenn ja, musst du danach vom FSW eine komplett neue Instanz erstellen, die alte ist nicht mehr valide.

03.02.2011 - 20:54 Uhr

Hallo!

Ein wirklich sehr interessantes Projekt. Ein kleiner Fehler steht noch in dem Sample: Beim Start ist die TextBox noch leer, und daher wird ein negativer Index berechnet, was zum Abbruch führt. Ausserdem könnte es für viele hilfreich sein, das Projekt nicht gegen .NET 4 sondern eine niedrigere Version zu erstellen.

03.02.2011 - 12:26 Uhr

Hallo1

Ich war kürzlich in einer ähnlichen Situation, und konnte nichts dergleichen finden. Selbst die NativeMethods in der MAPI.dll (in pinvoke und MSDN nachgeschlagen) bieten nur die Möglichkeit, einen Dateinamen anzugeben.
Das heisst nicht, dass es absolut keine Möglichkeit gibt, aber wenn, ist diese sehr gut versteckt 😉

03.02.2011 - 12:24 Uhr

Hallo!

Schau mal im EventLog nach, ob dort evtl. Fehlermeldungen stehen. Es ist möglich, das einige PlugIns es nicht mögen, wenn Outlook vor deren Initialisierung minimiert wird (ich vermute, weil dann der GDI-Treiber das Zeichnen irgendwie unterbindet bzw. verhindert).

Du kannst ja mal versuchen, Outlook zuerst normal zu starten, also ohne Minimierung. Wenn dann alles korrekt geladen wird, liegt es an der Minimierung.

03.02.2011 - 12:21 Uhr

Hallo!

Beim Tab-Namen könntest du versuchen, diesen in einfache Anführungszeichen zu setzen.
Das Auslesen erst ab einer bestimmten Zeile wirst du nach dem Einlesen selbst machen müssen, dafür bieten die Jet-Treiber keinen Support.
Alternativ könntest du die VSTO verwenden, damit könntest du beide Probleme in einem Rutsch lösen, wird aber auch etwas aufwendiger (aber ich vermute mal, das meiste ist Fleiß-Arbeit). Auch kann ich nicht sagen, wieviel langsamer das Einlesen dann wird.
Ab Office2007-Dateien (xlsx) kann man zudem noch das OpenDocument-SDK verwenden, für ältere Dateien (xls) kannst du dir auch mal NPOI anschauen.

03.02.2011 - 11:59 Uhr

Hallo!

@chanderegg:

geupdatet

Super Wort: Besser wäre noch "geupgedatetd".
Nein, mal ernsthaft: Was spricht gegen "aktualisiert" (dann krieg' ich wenigstens keine Entenpelle mehr).

03.02.2011 - 09:29 Uhr

Hallo!

Der Pfad, wo die Dateien abgelegt sind, ist in der Regel für alle User bis auf den DB-Admin gesperrt, d.h. ein normaler User hat dort keinen Zugriff drauf. Dass solltest du bedenken, wenn du die Software verteilst.
Evtl. kannst du einen Umweg gehen, indem du die Dateien in ein temporäres Verzeichnis legst und dann per Script den Import der Dateien veranlasst. Da man die anderen Einstellugen ebenfalls über T-SQL regeln kann, sollte das auch gehen.

EDIT: Ein Ansatz ist hier: mdf Datei auf den Server importieren oder auslesen - Forum Fachinformatiker.de (sp_attach_db ist das Stichwort)
EDIT2: Hier die Quelle erster Wahl: sp_attach_db (Transact-SQL), sowie sp_attach_single_file_db (Transact-SQL)

03.02.2011 - 09:21 Uhr

Hallo!

@all:
Im ersten Beitrag ist nun auch ein Screenshot, welcher die Symbole und Bereiche erklärt

@Bundy.NET:
zu 2.) Da musst du nichts umstellen, wollte nur wissen, ob es daran liegt. Die Herausforderung dabei ist, dass diese Dialoge zur Laufzeit erstellt werden, da muss ich mal schauen, wie ich das mit in die Größenberechnung einbauen kann.

03.02.2011 - 08:44 Uhr

Hallo!

@Bundy.NET:
Zu 1.) MS SQL Compact setze ich mal mit auf meine Liste
Zu 2.) Hast du evtl. bei dir die DPI-Einstellung geändert?
Zu 3.) Der Access-Import ist z.Zt. äusserst rudimentär eingebunden und geht über den genannten OLE-Treiber. Der Connectionstring sieht so aus:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source={Name der Accessdatei}

. Die Treiber erhälst du hier:*Download details: Microsoft Access Database Engine 2010 Redistributable *So erhalten Sie das aktuelle Service Pack für die Microsoft Jet 4.0-Datenbank-Engine *Microsoft Download Center: Search Results

Und dann musst du noch aufpassen, wenn du ein 64bit-System hast, da gibt's wohl auch noch Unterschiede.

03.02.2011 - 08:33 Uhr

Hallo!

Das kommt, weil es sich um Properties handelt, welche vermutlich ihre Werte über die COM-Verbindung direkt laden.
Wenn die Verbindung nun gestört ist, wird bei Abfrage aller Werte die COM-Exception zurückgegeben.

02.02.2011 - 09:00 Uhr

Hallo!

@P.K.

Selbst ohne das ein Decompiler, an die
Informationen kommt?

Garnicht. Wenn einer den Code decompiliert, sieht er irgendwann auch deine Verschlüsselung. Je nach Grad der Verschlüsselung dauert es dann evtl. etwas länger, aber es ist möglich.

Die Frage ist wie üblich bei solchen Anliegen nicht, ob so etwas verhindert werden kann, sondern NUR, wieviel Aufwand man betreiben möchte, um es einem gegenpart so schwer wie möglich zu machen, an die Daten zu kommen.
Der normale User wird sicherlich einen Decompiler nicht kennen bzw. benutzen können und selbst dann muss man noch die Sprache beherrschen. Ein absoluter Freak wird sich durch sowas aber nicht wirklich abschrecken lassen.

02.02.2011 - 08:52 Uhr

Hallo!

ein Programm, das auch eingescannte Handschriften erkennt, ist mir noch nie über den Weg gelaufen .
Gibt es aber in vielen großen Unternehmen, wo eingehende Briefe ins interne DMS aufgenommen werden. Allerdings kostet so eine Software dann auch zwischen 100.000,- und 250.000,- Euro, die Erkennungsrate liegt zwischen 85-95% (was bei einigen Briefen bzw. handschriften schon erstaunlich ist 😄)

EDIT:

dass Handschriften meistens als Vektordaten vorliegen

Das würde aber andererseits bedeuten, dass man durch Umwandlung von Grafikdaten in Vektordaten bereits einen großen Schritt weiter kommen würde!?

02.02.2011 - 08:46 Uhr

Hallo!

Die Möglichkeit besteht.

Die Container-Klasse sollte von ICollection, IEnumerable, ICustomTypeDescriptor und INotifyPropertyChanged abgeleitet und entsprechend implementiert werden, die Property-Klasse von PropertyDescriptor.

Weitere Hilfen findest du hier:* http://www.propertygridresourcelist.com

EDIT: Evtl. habe ich dich falsch verstanden: Zu einer bereits vorhandenen, "normalen" Klasse können zur Laufzeit KEINE zusätzlichen Properties hinzugefügt werden.

01.02.2011 - 16:13 Uhr

Hallo!

@Bundy.Net:
Danke für den Hinweis, hab's gerade behoben.
Folgende Änderungen sind dabei:*Bei MSSQL-DBs werden in der Tabellenliste nun keine Views mehr mit angezeigt *Beim Drag'n'Drop von Dateien öffnet sich nun ein Kontextmenü mit den möglichen Optionen *Bei Rechtsklick auf das TrayIcon öffnet sich nun ein Menü, u.a. mit den offenen Panels. Bei Auswahl wird das entsprechende Panel in den Vordergrund geholt, egal ob als TabPage oder als Form *In der Toolbar der Panels gibt es nun einen neuen Button, welcher die verwendete Datenquelle im TreeView markiert (und den Namen als ToolTip enthält) *Rudimentärer Ausdruck ist möglich (Druck-Einstellungen werden nicht gespeichert) *Kleinere Fehler beim XLSX-Import per OpenDocument behoben

31.01.2011 - 15:42 Uhr

Hallo!

offtopic:
Wenn man nicht genau weis, was es macht, nennt man es Manager (trifft nicht nur auf Software zu)

31.01.2011 - 10:11 Uhr

Hallo!

@steffen_dec:
Was genau geht den "irgendwie" nicht?

31.01.2011 - 09:18 Uhr

Hallo!

Bei mir in der Firma (knapp 20 Mitarbeiter) wird auch MS CRM 4.0 eingesetzt.
Ich denke mal, einmal eingerichtet, reicht eine Person aus, welche ab und zu mal etwas anpasst. Sollte nur alles gute dokumentiert werden.

Das MS CRM kann auch über WebService abgefragt werden, auch Änderungen sind möglich, und wenn man sich in der DB-Struktur SEHR (!!) gut auskennt, kann man auch da Änderungen durchführen.

Zudem gibts frei erhältlich von MS ein SDK mit detaillierten Beschreibungen zu allen Entitäten, den Zusammenhängen und natürlich zum gesamten WebService, oft auch mit Code-Beispielen.

Dann gibt's noch MS Navision, das geht aber mehr in Richtung ERP.

EDIT: Da MS CRM webbasiert ist, muss auf den Clients nur für die Outlook-Integration ein AddIn installiert werden.

27.01.2011 - 11:36 Uhr

Hallo!

Wenn es eine xlsx-Datei ist (also Excel2007 oder höher) kannst du das OpenXml-SDK verwenden. Dann kannst du die Datei als Package (in .NET 3.0 in der WindowsBase-Assembly) einladen und über die Objekt-Struktur den Inhalt auslesen. Ich habe das im Database-Explorer ebenfalls so gemacht.

25.01.2011 - 12:39 Uhr

Hallo!

@ala86:

Wie bringe ich jezt dieses Start.cmd in das Form2 ?

Exakt diese Frage wird in den oben verlinkten Beiträgen beantwortet.

24.01.2011 - 14:10 Uhr

Hallo!

Evtl. hilft schon, anstatt das Symptom zu bearbeiten, bereits die Ursache zu untersuchen.

Schau dir mal AppDomain.CurrentDomain.AssemblyResolve an, dort kannst du zumindest schonmal feststellen, was er nicht findet.

Dann wird entweder deine Meldung exakter oder du kannst gleich auf den korrekten Pfad verweisen und der Fehler tritt erst garnicht auf.

24.01.2011 - 14:06 Uhr

Hallo!

@herbivore:
Ich muss leider zugeben, dass mir diese Doppeldeutigkeit bisher entgangen ist 8o.
Zwar kenne ich Smalltalk als Entwicklungssprache, aber hier im Forum bin ich nie darauf gekommen, eine Assoziation dazu herzustellen.
Im Nachhinein werd' ich jetzt wahrscheinlich andauern daran denken 😁

22.01.2011 - 23:30 Uhr

Hallo xheinrich!

.NET passt in die Tabelle genauso rein wie Java. JEE ist zwar in Java geschrieben, Java selbst ist aber nur die Basis. Wenn du ein in .NET implementiertes Application Framework findest - unter der Voraussetzung, es hat einen ähnlichen Verbreitungsgrad wie die bereits beschriebenen Frameworks -, dann könnte dieses mit in die Tabelle aufgenommen werden.

Mit .NET selbst kann man Transportprotokolle unterschiedlichster Art unterstützen (z.B. TCP/UDP), bei den Anwendungstransportprotokollen gibt es ebenfalls manigfaltige Möglichkeiten (FTP und HTTP sind sogar bereits integriert).

Alle weiteren Differenzierungen der Tabelle bauen meinem Verständnis nach auf diesen und höheren ISO/OSI-Schichten auf, und sind daher ebenfalls nicht als Vergleich in diesem Fall geeignet.

Als Analogie könnte man die Versionsverwaltung heranziehen: Bei einem Vergleich zwischen CSV und SVN passt .NET auch nicht dazu, weil dieses beide Formen realisieren könnte, selbst aber nur die Mittel dafür zur Verfügung stellt.

EDIT: Spellcheck

21.01.2011 - 12:21 Uhr

Hallo!

verwendetes Datenbanksystem: Verschiedene

Ich überlege gerade, wie ich möglichst unabhängig des verwendetet Datenbanksystems in einem Interface den Zugriff auf Objekte wie Funktionen, Prozeduren, Indizees, Schlüssel, ... einer Datenbank definieren kann.

Dazu habe ich erstmal grob überlegt, welche möglichen Eigenschaften die Objekte haben könnten:
Trigger: Tabellenname, Aktion, ...
Primärschlüssel: Tabellenname, Spaltenname Tabelle
Fremdschlüssel: Tabellenname, Spaltenname Tabelle, Fremdtabellenname, Spaltenname Fremdtabelle
Index: Tabelle, Spaltenliste, DB-spezifische Eigenschaften (z.B. Schemagebunden(MS SQL)), eindeutig, …
Prozedur, Tabellenfunktion, Skalarfunktion: Parameterliste, DB-spezifische Eigenschaften (z.B. Schemagebunden(MS SQL)), …

Ein Problem dabei ist, dass z.B. bei Triggern, Indizees und Schlüsseln eine Einschränkung nach Tabelle/View möglich ist, bei den anderen nicht

Nun sehe ich zwei Alternativen:

  1. Für jeden möglichen Objekttyp eine eigene Methode, Rückgabewert spezifisch
  2. Eine allgemeine Methode mit Angabe des gewünschten Objekttyps, Rückgabewert ist eine string-Liste mit den Objektnamen, eine zweite Methode, welche nach Übergabe des Namens spezifische Informationen zurückkgibt

Der Vorteil bei der ersten Methode ist die Sicherheit, dass Parameter und Rückgabewert genau definiert sind, Nachteil ist die Fixierung auf die unterstützten Objekte (wenn z.B. Trigger erst später implementiert werden sollen, müssten dafür alle abgeleiteten Implementationen angepasst werden, auch wenn einige Datenquellen dies garnicht unterstützen).


IDataSource.GetFunctions():List<IFunctionDefinition> // Liste mit Funktionsnamen
IDataSource.GetProcedures():List<IFunctionDefinition> // Liste mit prozedurnamen
IDataSource.GetScalarFunktions():List<IFunctionDefinition> // Liste mit Funktionsnamen
IDataSource.GetIndexes(TableName):IIndexDefinition
IDataSource.GetPrimarykey(TableName):string // Spaltenname
IDataSource.GetForeignKeys(TableName):IForeignKeyDefinition
...

Der Vorteil bei der zweiten Methode ist die Flexibilität bzgl. möglicher Unterstützung zusätzlicher Objekte bzw. die Freiheit innerhalb eines Adapters, die entsprechende Funktionalität für ein bestimmtes Objekt zu unterstützen oder nicht.
Der Nachteil ist aufgrund der DB-Systeme die unterschiedliche Menge an Eigenschaften und deren Definition, ggf. dadurch zu umgehen, dass der Rückgabewert eine von einem Interface abgeleitete Klasse darstellt, welche nach der Abfrage in einem Programm gecastet werden muss.


IDataSource.GetElements(ElementType):List<string> // Rückgabewert ist Liste mit Namen, ElementType=(TableFunctions, ScalarFunctions, Procedures, Indexes, PrimaryKeys, ForeignKeys)
IDataSource.GetTableElements(TableElementType,TableName):List<string> // Rückgabewert ist Liste mit Namen, TableElementType=(Indexes, PrimaryKeys, ForeignKeys)
IDataSource.GetElementDefinition(ElementName):IElementInformation

Ich würde prinzipiell die zweite Alternative wählen, habe aber noch kein schlüssiges Konzept für "GetElementDefinition", genauer den Rückgabewert.

Interessieren würde mich nun eure Meinung: Gibt's evtl. noch eine weitere Alternative, seht ihr bestimmte Gründe für eine der hier genannten, ...

20.01.2011 - 12:58 Uhr

Hallo!

Im Forum gibt's bereits fertige Klassen, welche INI-Dateien einlesen, bearbeiten und auch wieder speichern können.

EDIT: Z.B. Ini-Datei-Klasse

20.01.2011 - 11:14 Uhr

Hallo!

Sehr schöner Artikel.

Allerdings hat die Komponente mit der expliziten Angabe der Quell- und Ziel-Controls einen Schönheitsfehler.
Kann eine Anwendung über AddIns so erweitert werden, dass auch zusätzliche UI-Elemente dazu kommen, welche u.U. ebenfalls Daten draggen könnten, müsste jedes AddIn die entsprechende Dropper-Instanz suchen, sich dort eintragen und ggf. beim Entladen wieder austragen.
Evtl. könnte man EINEN Dropper instanziieren, welcher dann für sämtliche Drag'n'Drop-Vorgänge zuständig wäre (dann müssten bei AddJob 3 Parameter angegeben werden: Quell-Control, Ziel-Control, Effect) und man könnte diese Instanz in einen DI-Container packen.

20.01.2011 - 09:34 Uhr

Hallo!

Meine Hauptsorge z.Zt. ist, dass ich eine Version online stelle, wo ich dann nach kurzer Zeit in größerem Umfang Schnittstellen anpassen muss (hatte ich in meinem Weihnachtsurlaub, wo ich den Database-Explorer begonnen hatte).

Da ich aber mittlerweile die meisten Interfaces (zumindest meiner Meinung nach) halbwegs zukunftssicher habe, wage ich mal die Behauptung, bis Ende des Monats eine Veröffentlichung ermöglichen zu können.

Sobald dies der Fall ist, werde ich es hier selbstverständlich vermelden 😉

19.01.2011 - 15:40 Uhr

Hallo!

Ja, die Ressourcen wären immer vorhanden & es handelt sich um das Internet. 😉

Aha, du kannst also garantieren, dass die Verbindung des Kunden zum Internet jederzeit gewährleistet ist (darauf zielten die vorherigen Fragen nämlich primär ab) ?!

Problem: Beim Kunden ist ein Handwerker vor Ort, welcher die DSL-Leitung kappt, weil er seinen Bohrer nicht unter Kontrolle hatte, oder ein Bagger auf der Strasse haut die Leitungen des Ganzen Blocks kurz und klein.

Bis das behoben ist, wäre der Kunde nicht in der Lage, dein Programm zu benutzen.

19.01.2011 - 14:13 Uhr

Hallo!

Ich kenne mich mit dem DataReader nicht aus, aber kann es evtl. sein, dass die while-Schleife umgedreht werden müsste, d.h. das erste Ergebnis bereits vom Reader vorgehalten wird.

Alternativ kannst du ja mal alles nicht über einen Reader sondern direkt als DataTable abrufen und vergleichen.