Hallo!
Über welche Datenmengen sprechen wir den?
Musst du hinerher auch genau wissen, welche Änderungen angefallen sind, oder einfach nur das neue Ergebnis anzeigen?
Un was für Änderungen sollen "erkannt" werden: INSERT, UPDATE, DELETE?
Bei den neueren MS-SQL-DB's kann man sich benachrichtigen lassen, falls sich ein Abfrageergebnis ändert. Allerdings kann ich nicht sagen, ob dabei auch die Änderungen übertragen werden (vermute allerdings eher nicht).
Hallo!
Mit SharePoint-Boradmitteln ist dies nicht möglich.
Entweder findest du eine passende Erweiterung dafür, oder du musst dir selbst was schreiben.
Bzgl. 2 Variante:
Wenn es nur fix für diese eine Liste ist, und nicht an Kunden bzw. andere installationen gebunden werden soll:
Event-Receiver für New und Changed-Events registrieren, dort das Bild laden, skalieren und wieder speichern.
Um Event-Receiver zu registrieren, gibt's zum einen Erweiterungen, oder man schreibt ein kleines backup.
Die erweiterte Variante ist ein Feature, welches die Assembly im GAC deployt und die Event-Receiver registriert.
SharePoint ist so schon verdammt mächtig, und über Erweiterungen nahezu beliebig ausbaubar. Allerdings muss man sich schon einigermaßen mit der Struktur auskennen und (wie beim .NET-Framework) mit den entsprechenden SharePoint-.NET-Klassen.
Die Struktur einer SharePoint-installation kann man sich mit dem SharePoint-Manager (suche nach SPM auf CodePlex) anschauen. Dort gibt es spezielle Versionen für 2007, 2010 und sogar schon für 2013. Das Programm muss direkt auf dem SharePoint-Server gestartet werden.
Hallo,
habe aktuell dasselbe Problem, scheint aber rechner-abhängig zu sein. Auf dem Rechner, wo es fehlerhaft dargestellt wird, kann ich auch die Seiteneinstellungen nicht dauerhaft ändern. Bin auch noch am googeln, aber bis jetzt keine Lösung gefunden.
Wenn jemand sowas schonmal lösen könnte, wäre ich dankbar für Hinweise (umgekehrt werde ich eigene Erkenntnisse hier natürlich auch posten).
Hallo,
Zum einen gibts im dem Beispiel bei Codeproject tatsächlich ein Handle
In Windows hat JEDES Element auf dem Bildschirm ein Handle.
Hier bräuchte der TE das Handle vom Desktop, das ist schlecht
Warum? Auch der Desktop hat ein Handle.
Gibt viele Beispiele dazu hier im Forum.
Da laufen die Benachrichtigungen über COM
Auch beim Ziehen über einem Element gibt es die WindowMessages, nur keine Drag/Drop-spezifischen. In diesem Fall ist es MouseMove (oder MoveMouse?) und man muss dann prüfen, ob Maus-Button gedrückt ist, was aber über einen Hook rel. einfach ist.
Hallo,
schonmal in die FAQ's oder Artikel geschaut?
[FAQ] TcpClient: einfaches Beispiel
[Tutorial] Client-/Server-Komponente über TCP-Sockets
Hallo,
als Kompromiss könnte man in den Einstellungen des Programms bzw. über die Kommandozeile das Polling-Interval vorgeben.
Oder ob er andersherum nicht viel zu viele Änderungen meldet, wenn die Datei nach jeder geschriebenen Zeile geschlossen wird.
Hierzu könnte man die Änderungs-Events zwar vermerken, aber nur im Zeitinterval die Änderungen seit dem letzten Lese-Vorgang ausgeben.
Hallo!
Sieht interessant aus. Schön wäre noch eine Option, Programme erst zu starten, wenn z.B. die CPU nur noch zu (z.B.) 20% beschäftigt ist, und bei Multi-Core-Systemen dann auf freie Kerne verteilt wird.
Hallo!
Besser wäre die Prüfung auf eine bestimmte Fensterklasse (sobald ein Fenster in diesem Prozess sichtbar ist). Dann könnte man im Idealfall sogar den fehlertext auslesen und den entsprechenden Button drücken (bzw. selbiges simulieren).
Hallo!
@Hobby Programmierer:
Das hätte aber den Nachteil, dass, wenn die Netzwerkverbindung abbr8icht oder die Anwendung abstürzt, dieser Eintrag nicht wieder entfernt werden kann.
Hallo!
Es könnte auch bzw. zusätzlich an den Rechten liegen. Evtl. hat das Konto, unter welchem der Dienst läuft, keinen Zugriff auf das Skript.
Hallo!
Aber genau dafür ist es gedacht: Ein Programm soll die Möglichkeit erhalten, vor einem Shutdown Daten zu sichern, ...
Hallo Pixel,
funktioniert den die Demo-Anwendung korrekt?
Bei mir liefert die korrekte Ergebnisse, evtl. müssen die Werte ja noch umgerechnet werden.
Hallo!
Für Projektideen:
*[FAQ] C# Projektvorschläge (Anfänger, Schüler, Praktikanten)
*Umfangreichere Projektideen gesucht
Hallo!
@BerndFfm:
Auch Oracle geht ohne Installation, allerdings muss man da zum einen einiges mehr an DLL's mit beitun (wobei sich hier dann die Frage stellt, ob dass so erlaubt ist) und zum anderen ist die Eingabe des Servers etwas umständlicher (da man dann die Einträge der tnsnames.ora direkt angeben muss).
Hallo!
Die von dN!3L genannten Methoden im StackFrame geben allerdings nur im Debug-Mode bzw. wenn die passende dbg-Datei vorhanden ist, die genauen Informationen zurück.
Hallo!
.NEt leifert dafür doch bereits alle Klassen, u.a. MailMessage (System.Net.Mail).
Dazu gibt's auch zahlreiche Beispiele.
Hallo!
Kann OpenOffice denn mittlerweile docx-Dateien öffnen? Denn diese kann man auch ohne installiertes Office erstellen.
Hallo!
In der aktuellen WindowsDeveloper (ehemals dotnet-Magazin) ist ein Artikel zu dem Thema (dokumentbasierte Anwendungssysteme). Dabei werden u.a. Ribbons und Tabs (wie in Visual Sutudio) als Mittel der Wahl beschrieben.
Der Quasistandard
Oberfläche und Bedienlogik für dokumentenbasierte Anwendungen
Bei modernen Konzepten für dokumentenbasierte Anwendungen hat sich einiges an der Gestaltung der Benutzeroberflächen geändert. Zum Beispiel die Integration der Ribbon Bar (Multifunktionsleiste), die die klassische Kombination aus Menü- und Symbolleiste ersetzt hat. Für dokumentenbasierte Programme lässt sich ebenfalls die Ablaufsteuerung (Bedienlogik) in gewissen Bereichen standardisieren. Diese und andere praktische Lösungsansätze sind Gegenstand des Artikels.
von Veikko Kryczyk
Hallo!
Das MouseClick
-Event enthält die Mauskoordinaten. Diese musst du dann nur noch auswerten.
Wenn es WinForms-Elemente sind, haben diese jeweils ein eigenes MouseClick
-Event, es reicht aus, dafür einen Handler zu schreiben, welcher dann anhand des sender
-Objekts das Ziel bestimmen kann.
Hallo!
Es gibt den CDATA
-Abschnitt in XML, darin kann man binäre Daten enkodiert verpacken.
Hallo!
Bei dem von herbivore genannten Link geht es um den Aufruf einer Systemfunktion.
Bei dem von dir gewünschten Ergebnis wirst du da nicht umher kommen, entsprechend sollte dir dieses Thema geläufig sein (Stichworte DllImport, P/Invoke).
Hallo,
also List<T>
scheint vielleicht erstmal etwas komplex zu sein, aber man kommt eigentlich sehr schnell damit zurecht.
Dass man für jede zu schreibende Zelle in Excel eine Zeile Quellcode benötigt, ist falsch. Man kann das mit Schleifen machen (entweder for
oder foreach
).
Und zum Schreiben in Excel (oder MS-Office-Dokumente allgemein) gibt es eine sehr schöne Komponente: NetOffice - MS Office in .NET.
Hallo!
Beim Verwenden von Datumswerten in Datenbanken sollte man immer auch zuerst die Sprache der Datenbank in Erfahrung bringen, weil man nie sicher sein sollte, dass immer eine bestimmte Sprache verwendet wird (auch dann, wenn man die Anwendung nur für sich selber plant).
Einmal
SELECT @@LANGUAGE
als ExecuteScalar ausführen und behalten.
var dateStr = date.ToString("dd.MM.yyyy");
if (GetDbLanguage(dataSource) == "US_ENGLISH")
dateStr = date.ToString("yyyy-MM-dd");
Hallo!
Wenn auch der Vorschlag von FZelle nicht hilft, kommst du evtl. mit dem Database-Explorer weiter, die Komponenten daraus kann man auch in eigene Programme einbinden (sind auch Beispiele dazu im Thread).
Hallo!
Für die System.Messaging-Queues gibt es doch die Completed-Events. Da wird in den Argumenten auch auf die Message verwiesen. Hilft das?
Hallo!
Die Tabelle muss in der Tat "händisch" erstellt werden.
Der Database-Explorer z.B. macht dies mit Hilfe der folgenden Klasse:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
namespace TD.Additional.Data.MSSql
{
/// <summary>
/// SQL table creation helper class.
/// </summary>
/// <example>
///var createTableCommand = Helpers.SqlTableCreator.GetCreateFromDataTableSQL(tableName, table, "Latin1_General_CI_AS");
///using (SqlCommand createTable = new SqlCommand(createTableCommand, connection))
///try
///{
/// var sqlResult = createTable.ExecuteNonQuery();
/// if (sqlResult != 0) { }
///}
///catch
///{
/// log.Error("Error creating sql table, command {0}", createTableCommand);
/// throw;
///}
/// </example>
public class SqlTableCreator
{
#region Instance Variables
private SqlConnection _connection;
public SqlConnection Connection
{
get { return _connection; }
set { _connection = value; }
}
private SqlTransaction _transaction;
public SqlTransaction Transaction
{
get { return _transaction; }
set { _transaction = value; }
}
private string _tableName;
public string DestinationTableName
{
get { return _tableName; }
set { _tableName = value; }
}
#endregion
#region Constructor
public SqlTableCreator() { }
public SqlTableCreator(SqlConnection connection) : this(connection, null) { }
public SqlTableCreator(SqlConnection connection, SqlTransaction transaction)
{
_connection = connection;
_transaction = transaction;
}
#endregion
#region Instance Methods
public object Create(DataTable schema)
{
return Create(schema, null);
}
public object Create(DataTable schema, int numKeys)
{
int[] primaryKeys = new int[numKeys];
for (int i = 0; i < numKeys; i++)
primaryKeys[i] = i;
return Create(schema, primaryKeys);
}
public object Create(DataTable schema, int[] primaryKeys)
{
string sql = GetCreateSQL(_tableName, schema, primaryKeys);
using (SqlCommand cmd = new SqlCommand(sql, _connection))
{
if (_transaction != null && _transaction.Connection != null)
cmd.Transaction = _transaction;
return cmd.ExecuteNonQuery();
}
}
public object CreateFromDataTable(DataTable table)
{
string sql = GetCreateFromDataTableSQL(_tableName, table);
SqlCommand cmd;
if (_transaction != null && _transaction.Connection != null)
cmd = new SqlCommand(sql, _connection, _transaction);
else
cmd = new SqlCommand(sql, _connection);
return cmd.ExecuteNonQuery();
}
#endregion
#region Static Methods
public static string GetCreateSQL(string tableName, DataTable schema, int[] primaryKeys)
{
string sql = "CREATE TABLE " + tableName + " (\n";
// columns
foreach (DataRow column in schema.Rows)
if (!(schema.Columns.Contains("IsHidden") && (bool)column["IsHidden"]))
sql += column["ColumnName"].ToString() + " " + SQLGetType(column) + ",\n";
sql = sql.TrimEnd(new char[] { ',', '\n' }) + "\n";
// primary keys
string pk = "CONSTRAINT PK_" + tableName + " PRIMARY KEY CLUSTERED (";
bool hasKeys = (primaryKeys != null && primaryKeys.Length > 0);
if (hasKeys)
{
// user defined keys
foreach (int key in primaryKeys)
pk += schema.Rows[key]["ColumnName"].ToString() + ", ";
}
else
{
// check schema for keys
string keys = string.Join(", ", GetPrimaryKeys(schema));
pk += keys;
hasKeys = keys.Length > 0;
}
pk = pk.TrimEnd(new char[] { ',', ' ', '\n' }) + ")\n";
if (hasKeys) sql += pk;
sql += ")";
return sql;
}
public static string GetCreateFromDataTableSQL(string tableName, DataTable table, String collation)
{
string sql = "CREATE TABLE " + tableName + " (\n";
// columns
foreach (DataColumn column in table.Columns)
sql +=
"[" + column.ColumnName + "] " +
SQLGetType(column) +
(String.IsNullOrEmpty(collation) || column.DataType != typeof(String) ? "" : " COLLATE " + collation) +
",\n";
sql = sql.TrimEnd(new char[] { ',', '\n' }) + "\n";
// primary keys
if (table.PrimaryKey.Length > 0)
{
sql += "CONSTRAINT [PK_" + tableName + "] PRIMARY KEY CLUSTERED (";
foreach (DataColumn column in table.PrimaryKey)
sql += "[" + column.ColumnName + "],";
sql = sql.TrimEnd(new char[] { ',' }) + "))\n";
}
else
sql += ")\n";
return sql;
}
public static string GetCreateFromDataTableSQL(string tableName, DataTable table)
{
return GetCreateFromDataTableSQL(tableName, table, null);
}
public static string[] GetPrimaryKeys(DataTable schema)
{
List<string> keys = new List<string>();
foreach (DataRow column in schema.Rows)
if (schema.Columns.Contains("IsKey") && (bool)column["IsKey"])
keys.Add(column["ColumnName"].ToString());
return keys.ToArray();
}
// Return T-SQL data type definition, based on schema definition for a column
public static string SQLGetType(object type, int columnSize, int numericPrecision, int numericScale)
{
switch (type.ToString())
{
case "System.Boolean":
return "BOOLEAN";
case "System.String":
return "VARCHAR(" + ((columnSize == -1) ? 255 : columnSize) + ")";
case "System.Decimal":
if (numericScale > 0)
return "REAL";
else if (numericPrecision > 10)
return "BIGINT";
else
return "INT";
case "System.Double":
case "System.Single":
return "REAL";
case "System.Int64":
return "BIGINT";
case "System.Int16":
case "System.Int32":
return "INT";
case "System.DateTime":
return "DATETIME";
default:
throw new Exception(type.ToString() + " not implemented.");
}
}
// Overload based on row from schema table
public static string SQLGetType(DataRow schemaRow)
{
return SQLGetType(
schemaRow["DataType"],
int.Parse(schemaRow["ColumnSize"].ToString()),
int.Parse(schemaRow["NumericPrecision"].ToString()),
int.Parse(schemaRow["NumericScale"].ToString()));
}
// Overload based on DataColumn from DataTable type
public static string SQLGetType(DataColumn column)
{
return SQLGetType(column.DataType, column.MaxLength, 10, 2);
}
#endregion
}
}
Ist bestimmt noch anpassungsbedürftig, aber als Einstieg sollte es helfen.
Hallo!
Wieder ist eine aktualisierte Version über den Link im 1. Beitrag verfügbar.
Geändert wurde diesmal folgendes:*Übersichtlicherer Einstellungsdialog durch Verwendung von Registerkarten *Verbesserter SQL-Parser *Ausdruck der Struktur einer Datenquelle (über Kontextmenü) als TreeView *Im- und Export der Daten und der Struktur einer Datenquelle (über Kontextmenü) *Kontextmenü Spalte im Ergebnis: Ändern des Datentyps *Kontextmenü Zeile: Ausdruck von markierten Zeilen (als Tabelle, als Schlüssel-Wert-Paarung, ...)
Hallo!
Warum setzt Du nicht VOR dem lesen der DataTable die richtigen Typen?
Nurmal als Nachtrag zum möglichen Sinn eines solchen Vorgehens:
Ich habe aktuell ebenfalls dieses "Problem" in meinem Database-Explorer. Ich lese Daten einer CSV ein, die Spalten-Typen sind dann natürlich erstmal alle auf string. Will ich diese nun in eine andere Datenbank übertragen (z.B. MS SQL), möchte ich ggf. vorher einige Spaltentypen ändern.
juetho's beschriebene Vorgehensweise wird dafür am besten sein.
Hallo!
Idealerweise liegen dir die Exceldaten als DataTable vor, welche du dann als Datenquelle einem DataGridView übergeben kannst. Alles weitere ist spekulativ, da dein Beitrag nicht allzu ausführlich ist.
Hallo!
Allgemein betrachtet ist ein Excel-AddIn für einen C#-Neuling meiner Meinung nach etwas zu hoch gegriffen, evtl. sollte man erstmal mit einer kleinen StandAlone-Anwendung beginnen.
Die Excel-Datei kann man entweder mit OLE auslesen (Dazu gibt's hier im Forum einen großen Beitrag von Rainbord) oder man verwendet NetOffice - Ein versionsunabhängiger Wrapper für MS-Office (Dazu gibt's auf der CodePlex-Homepage auch zahlreiche Beispiele).
Hallo!
Ist jetzt schon abgeschaltet, man kommt nur noch ins Forum.
EDIT: Was passiert eigentlich mit den bereits vorhandenen Daten?
Hallo!
Er meint tatsächlich das das Speichern der Settings im Programmverzeichnis vernünftig ist.
Habe mir den Beitrag jetzt nicht komplett durchgelesen, aber alleine aufgrund des Namens denke ich mal, dass das empfohlene Einsatzgebiets auf Anwendungen liegt, welche nicht voll installiert wurden, sondern sich z.B. auf einem USB-Stick befinden, und dann halte ich diese Vorgehensweise durchaus für sinnvoll.
Hallo!
Über den Link im ersten Beitrag gibt’s wieder eine neue Version, u.a. mit den folgenden Änderungen:*Verbesserter SQL-Parser *Verbesserter Ausdruck des SQL-Baums *Beseitgung einiger kleinerer Fehler
Hallo!
Auf den ersten Blick sieht es so aus, dass zuerst die einfachen Elemente und dann die komplexen aufgeführt werden. Mach' doch mal testweise aus ORDER_PARTIES einen einfachen Typ ohne Unterelemente und lass nochmal eine XSD erstellen.
Hallo!
@Tortellini:
Was noch interressant wäre: ist es möglich, dass, wenn ich z.B. den Buchstaben "a" in einem Textdokument tippe, dieser sofort gespeichert und damit hochgeladen wird, sodass die Funktion "Speichern" entfällt?
Klar wäre das möglich. Aber je nach Größe der Datei wird die Anwendung dann auch träge. Zudem musst du bedenken, dass evtl. zwischen den Tastendrücken zuwenig Zeit bleibt, um die Datei zu übertragen. Du solltest in diesem Fall also eher eine Variante wählen, wo erst nach x Sekunden automatisch gespeichert wird, und diesen Auftrag in eine threadsichere Queue legen, welche in einem anderen Thread abgearbeitet wird.
Eine andere Möglichkeit wäre eine lokale Zwischenspeicherung und Übertragung erst bei Beendigung des Programms.
Bzgl. der Übertragungsmöglichkeit gibt es neben FTP auch noch WebDAV und bestimmt noch ein paar weitere. Für deine Anwendung solltest du dann evtl. auch eine Zwischenschicht für die Übertragung einrichten, um ohne große Umwege später umrüsten zu können
Hallo!
Insgesamt ein sehr komplexes Vorhaben.
Eine Möglichkeit, die mir spontan einfallen würde, wäre ein eigenes Programm, welches als Netzwerkdrucker fungiert. Dann lässt du die Datei über die Kommandozeile auf diesen Drucker drucken.
Dabei sehe ich aber folgende Hindernisse:*Evtl. ist es ohne Treiberentwicklung gar nicht möglich, einen Netzwerkdrucker einzurichten (oder reicht es im Idealfall, wenn am richtigen Port eine Anwendung auf Daten wartet?) *Wie sortiert man die Seiten, wenn ein solches Dokument 2 Seiten breit und 3 Seiten hoch ist? *In welchem Format werden die Daten übergeben?
Oder man versucht, GhostView möglichst automatisiert einzubinden.
Hallo!
zuweit weg um sie darüber anzuschließen
??? zwar hast du durch b bereits die Möglichkeit ausgeschlossen, ein ISDN-Kabel am PC anzuschließen, aber prinzipiell kann so ein Kabel locker 50m überbrücken.
Geht Capi nicht auch über Lan?
Ich weiss nicht, ob die FritzBox auch CAPI über LAN anbietet, aber selbst dann muss man am PC erstmal CAPI einrichten. Ansonsten ginge es noch über USB.
Hallo!
@bootscreen:
Hast du denn ISDN über die Box und die CAPI-Treiber auf deinem PC installiert?
Dann könntest du dir mal den CAPI-Wrapper anschauen.
Fragen dazu kannst du dann auch dort stellen.
Hallo MarC611,
Die Frage fällt eigentlich unter [Hinweis] Wie poste ich richtig?, 1.1 und 1.1.1.
Zumal es die Socket-Klasse (System.Net.Sockets) im Framework gibt, zu welchem die MSDN auch beispiele enthält.
Schau mal in [Tutorial] Client-/Server-Komponente über TCP-Sockets, da solltest du einige Anhaltspunkte finden.
Hallo!
Abgesehen davon, dass du mit keinem Wort erwähnt hat, ob bzw. was du bereits probiert hast, fällt das schon unter [Hinweis] Wie poste ich richtig? 1.1, 1.1.1, 4a, 5.
Das Stichwort hier wäre CSV (komma-separierte Textdateien).
Weiterhin möchte ich aber davon abraten, 2 Tabellen in einer Textdatei unterzubringen, da dies absolut unüblich ist, und anschließend nur wieder mit eigenen Methoden auslesbar ist (anstatt z.B. über ADO.NET). Nimm entweder 2 separate Dateien oder besser eine richtige Datenbank (z.B. SQLite, MS SQL Compact, ...).
Hallo!
Aus dem ersten Beitrag geht für mich nicht ganz deutlich hervor, ob es sich dabei nur um lokale Server handelt oder auch um bei Kunden betreute Server.
Hallo!
In einer DataTable
werden null
-Werte einer Abfrage nicht direkt als null
zurückgegeben, sondern als DBNull.Value
, d.h. du must darauf prüfen.
Hallo!
Warum verwendest du keine GraphicsPath
, damit kannst du sowohl zeichnen als auch Berührungen prüfen (Hit-Test).
Hallo!
Hab' zwar auf der Seite nicht finden können, wie alt diese "Bedingungen" sind, aber ich stelle mal die folgende Vermutung auf:
Diese Seite ist evtl. schon etwas älter. Ursprünglich war es vielleicht wirklich mal von MS gewünscht, das .NET und Microsoft.NET nicht in Programm-Namen verwendet werden (bei zweiterem kann ich es sogar noch besser verstehen). Ab er mittlerweile ist ein .NET im Namen ja schon eher als Werbung für die Plattform zu sehen. Wenn man sich alleine mal anschaut, was auf CodePlex an Projekten liegt, welche ein .NET im Namen haben, glaube ich eher, dass MS das bei derzeitigem Gebrauch (dankend) billigt.
EDIT: Spellcheck
Hallo!
Im ersten Beitrag befindet sich eine neue Version des DBE zum Download.
Folgende Änderungen wurden vorgenommen:*Tabellen- und Spaltennamen lassen sich über das Kontextmenü in die Zwischenablage kopieren *Die Spaltenliste lässt sich über das Kontextmenü von "Columns" als text in die zwischenablage kopieren *Über "Tables" lassen sich alle leeren Tabellen ausblenden *Bei den Spalten wird nun (wenn möglich) angeziegt, ob diese zu einem Primärschlüssel gehören (vorangestelltes "(PK) ") *Invertierung des Ergebnisses über das neue Symbol in der Toolleiste ganz rechts (der rechtsgedrehte grüne Pfeil): Dadurch werden Zeilen und Spalten vertauscht *Kontextmenü in der ersten Zelle zwischen Zeilen- und Spaltenkopf *Erweitertes Kontextmenü der Ergebniszellen (s.u.) *Kein "Procedures"-Zweig mehr in der Baumansicht. Dieser wird erst wieder angezeigt, wenn ich die entsprechende Unterstützung implementiert habe, solange muss man den Umweg z.B. über Snippets nehmen. *Anzeige, welche Zelle "null" ist, also nicht einfach nur leer, sondern nicht gesetzt (durch ein kursiv dargestelltes "null") *Byte-Arrays werden nun in Hex-Schreibweise angezeigt (0x....) *In allen Datenquellen wird mittlerweile auch die Rückgabe zusätzlicher Informationen protokolliert (also z.B. Warnungen oder zusätzliche Fehlerinformationen, welche vom ADO.NET-Adapter kommen).
Hauptsächlich erweitert wurde das Kontextmenü der Ergebniszellen:*Zu referenzierten Spalten (also wo durch die geparste Anfrage eine eindeutige Rückverfolgung zur ursprünglichen Tabelle und Spalte möglich ist) ist nun eine Referenzierung zu anderen Tabellen möglich, ebenso wie eine Verwaltung der möglichen Werte zu Dokumentationszwecken *Textfeldinhalte können nun in einem Extra-Fenster (z.Zt. noch modal) als text, XML oder HTML angezeigt werden, wobei Text- und XML-Ansicht noch gleich sind (an einem ganz einfachen XML-Viewer arbeite ich gerade).
TODOs:
Da der Funktionsumfang mittlerweile doch recht groß geworden ist, bin ich aktuell auch dabei, eine Dokumentation zu schreiben.
Hallo!
@MrSparkle:
Wie soll daurch ein Performance-Gewinn entstehen? Wenn die Daten schon zeilenweise in der Datei stehen, kann man die Daten auch zeilenweise aus der Datei lesen und dann gleich verarbeiten.
Um die Datei zeilenweise einzulesen, müsste man byte für byte einlesen, anstatt immer ganze Blöcke einzulesen, was definitiv mehr Zeit kostet.
Die Daten im Speicher byte für byte durchzuarbeiten ist auf jeden Fall schneller.
Hallo!
Der Klassiker:
Die Methode wird nach Beendigung vom Framework erneut aufgerufen, wenn e.HasMorePages
= true
ist.
Also nicht die Liste innerhalb der Methode durchlaufen, sondern einen externen Index definieren (z.B. private int i = 0;
) und am Ende um 1 hochzählen, die Schleife fällt weg.
Hallo!
Ich habe zuerst einmal ein Hauptverzeichnis für alles in C#.
Darunter habe ich dann Unterverzeichnisse für Grafiken, allgemeine Dokumente, Bibliotheken (libs), Projekte und externe Programme (sowohl Tools als auch externe Bibliotheken, könnte man evtl. auch noch trennen).
Unter Projete und Libs jeweils Unterverzeichnisse für die einzelnen Solutions, darunter dann Zweiger für trunk, branches und tags für SVN, darunter die Versionen (bzw. bei trunk heisst es current, um die Verzeichnistiefe gleich zu halten für rel. Verweise auf libs) und darunter wiederum Unterverzeichnisse für den Quellcode (src), Dokumentation (doc) und was evtl. sonst noch Projekt-spezifisch ist.
hab' mal ein Bild angehängt
Hallo!
Als Alternativangebot wäre evtl. noch http://www.posterxxl.de zu nennen, die machen aus einem Foto sogar Tapeten. Hab's allerdings bisher auch noch nicht getestet (u.a. der Preis hat mich erstmal abgehalten ...).
Hallo!
es gibt dafür bereits fertige Software, allerdings kostenpflichtig (ob kostenfrei für privaten Einsatz, kann ich jetzt nicht sagen).
Dafür einen eigenen Treiber schreiben zu wollen, halte ich für gewagt. Da sollte der Nutzen daraus schon enorm sein.
Evtl. als Alternative:
Man kann ja die Windows-Meldungen abfangen. Wenn nun einer der zu sperrenden USB-Sticks eingesteckt wurde, wirft man diesen gleich wieder aus. Ist zwar nicht die sicherste Lösung, aber zumindest sehr viel einfacher umzusetzen.