Laden...

Forenbeiträge von Xynratron Ingesamt 1.177 Beiträge

08.12.2010 - 16:24 Uhr

huhu,

naja, schau dir doch erstmal Linq2SQL an. Wenn du dann damit arbeitest, wird Dir recht schnell auffallen, wo man den zur Laufzeit einstellen kann.

Und natürlich kann man dann auch mehrere Connection-Strings in der app.config ablegen und sich dann den richtigen suchen (zum Mandanten) oder eben selbst zusammenbauen.

😃

Xynratron

08.12.2010 - 16:21 Uhr

huhu,

ja, erster Treffer:

Googlesuche nach access GROUP_CONCAT

😃

xynratron

08.12.2010 - 15:54 Uhr

huhu,

Was ist da nicht korrekt?

ganz einfach - ich fasse mal deine Frage zusammen:

verwendetes Datenbanksystem: <Access>
In MySQL klappt [der] befehl group_concat

Oder anders: es ist eine Funktion von MySQL und deswegen kennt Access es nicht.

😃

Xynratron

08.12.2010 - 15:38 Uhr

huhu,

ja, du kannst den Connectionstring auch zur Laufzeit angeben.

😃

Xynratron

08.12.2010 - 09:25 Uhr

huhu,

Der Name des Parameters spielt erstmal keine Rolle, da bei "?" die Reihenfolge der Parameter im Command wichtig ist.

.. und wenn mich nicht alles täuscht, ist memo ein reserviertes Wort in Access ..

und eigentlich warte ich wenigstens noch auf die Fehlermeldung die Du bekommst.

siehe [Hinweis] Wie poste ich richtig? Punkte 1.1.1 und 5

😃

xynratron

06.12.2010 - 15:21 Uhr

huhu,

hab die letzte Zeit einige Projekte portiert und keine Probleme gehabt.

Allerdings werde ich aus deinem Posting nicht schlau: Was geht oder geht jetzt nicht?

😃

Xynratron

06.12.2010 - 14:37 Uhr

huhu,

WCF Discovery Services
das ist nur die Verlagerung von reinem UDP auf Vorhandenes

Welchen Vorteil hat es denn, wenn man "reines UDP" verwendet?

😃

Xynratron

06.12.2010 - 14:10 Uhr

huhu,

Die ASP.net Steuerelemente spiegeln nur einen Teil der Funktionalität wieder, welche das fertig gerenderte Element im Browser hat. Deswegen gibt es hier keinen direkten Einstiegspunkt. Allerdings lassen sich zu jedem Element über die "Attributes" die entsprechenden Client-Attribute dazu rendern.

z.B:

DropDownList ddl = new DropDownList();
ddl.Attributes.Add("onchange", "javascript: alert('geändert');");

siehe http://de.selfhtml.org/javascript/objekte/options.htm#text für ein Javascript-Beispiel.

😃

xynratron

05.12.2010 - 20:48 Uhr

huhu,

Das hilft Dir nichts, denn der Browser wird das Cookie nicht an die andere Domain weitergeben.

Edit: Aber du könntest über eine "dritte" Domain einen Cookie setzen lassen, der dann von den anderen beiden per Javascript gelesen und zur richtigen Domain zur Identifikation gesendet wird. Ungeähr so wie die Tracking-Cookies diverser Werbeseiten. Aber ob das "in Zukunft" ne gute Idee ist, keine Ahnung.

😃

Xynratron

05.12.2010 - 20:44 Uhr

huhu,

Dein SQL-Statement sieht ein wenig seltsam aus. Prinzipiell willst Du ja zu einem bestimmten Kunden eine Notiz anlegen. Ergo musst du zu diesem Kunden - hierbei sollte dir z.B. der Primary-Key des Datensatzes bekannt ein - das Notizfeld updaten. Oder du hast eine zweite Tabelle mit den Notizen, aber dann hat die auch einen FK zum Kunden.

Also:

Update Kunden set [Memo]={Memo} where ID = {kunden.ID}

oder

Insert into KundenNotizen (FK_Kunden, [Memo])  Values ({Memo},{kunden.ID})

{} - durch die entsprechenden Parameter ersetzen.

😃

Xynratron

05.12.2010 - 20:28 Uhr

huhu,

Bei Mailslots brauchst du wenigstens die Domain - und zusätzlich auch den Slot-Namen. Läuft also auf das gleiche wie Server-IP und Port hinaus.

Bei Broadcasts/Multicasts brauchst du auch wenigsten nen Ziel-Port, damit ein etwaiger Server was mitbekommt.

Man könnte noch über manuelle Programmeinstellungen oder einen festen Port (=> dann per Broadcast rumfragen); auch Mailslots in ner Domain oder auch alle Rechner mal anfragen - etc. pp. nachdenken.

naja, Khalid sage es schon, WCF Discovery Services macht das praktisch für dich.

😃

Xynratron

05.12.2010 - 20:02 Uhr

huhu,

ja dann^^

dann ist der Port den dein Server benutzt (z.B. 8080) vermutlich einfach nicht in der Firewall deines Hosters für deinen Server freigeschalten.

Das ist im Endeffekt genau das gleiche wie ein "Port Forwarding am Router" - nur dass ein DSL-Router eben mini-Firewall + Nat-Router spielt. An einer anständigen Firewall ist das auch alles einzustellen, nur mit mehr Einstellungs- und Filtermöglichkeiten.

Ergo musst Du deinen Hoster bitten, die benötigten Ports freizuschalten. Ausserdem bekommst du das Problem vermutlich jedesmal, wenn jemand aus einem größeren Netzwerk (z.B. Firmennetzwerk) versucht, auf deinen Service zuzugreifen (da ist dann ein Zugriff auf "deinen" Port in der Regel erstmal nicht erlaubt. Wenn Du http-Binding (auf Port 80!) anbietest, dann geht es meistens).

TeamViewer, Skype etc. umgehen das Probelm, indem sie die Verbindungen über Port 80 (http) oder 443 (https) leiten. Der Vermittlungsserver von dem oben gesprochen wurde hat damit aber weniger zu tun. Der kümmert sich nur drum, dass sich die Partner finden (er gibt die IP-Adressen der Partner dem jeweiligen anderen).

😃

Xynratron

02.12.2010 - 14:10 Uhr

huhu,

gerade in nem anderen Thread gekommen: Breite oder Lange Tabellen

Nicht immer ist Sql der optimale Ansatz.

Gerade bei solchen Datenstrukturen ist eine Dokumentenbasierte DB ( stichwort NoSql ) deutlich flexibler, da sie

  1. Nicht in jedem Datensatz alle Daten halten muss, und
  2. Beliebig erweiterbar ist.

Gerade wenn man noch an der Architektur sitzt, sollte man RavenDB, CouchDB und MongoDB nicht ausser aucht lassen.


>

Wäre für Dich evtl. ne Überlegung wert.

😃

Xynratron

02.12.2010 - 14:03 Uhr

huhu,

Wenn ich als Basisadresse eine Uri angebe, wo die IP nicht der IP des Rechners entspricht wo das Programm läuft, so bekomme ich keine Exception.
Ich hätte jetzt erwartet, dass ich einen Fehler bekomme, dass die Url ungültig ist, bzw. dass ich auf dieser Url keinen Listener starten kann.

Naja, weil es durchaus sein kann, dass IP-Pakete, welche scheinbar nicht zu den eingestellten IP-Adressen gehören, trotzdem an diesen Rechner gesendet werden. Es kann durchaus Konfigurationen geben, in denen das passiert.

Die IP, die ich angegeben habe gibt es aber überhaupt nicht. Wie kann ich jetzt den Endpunkt ansprechen?

Von aussen? Dem Rechner die IP geben oder drauf verzichten eine falsche IP einzutragen. Der Netzwerkkarten Treiber und IP-Stack werden jedenfals nicht von alleine auf die Idee kommen, "fremde" IP-Pakete anzunehmen und zu versuchen diese an eine lokale Anwendung weiterzugeben.

😃

Xynratron

02.12.2010 - 11:16 Uhr

huhu,

Die Daten des Formulars werden in einer Textdatei abgespeichert, die im Verzeichnis der .exe liegt.

Bitte mach das nicht. Du kannst nicht sicherstellen, dass ein Anwender auf dieses Verzeichnis Schreibzugriff hat. Deswegen laufen "viele" Programme seit Windows Vista nur mit Problemen. (und Prinzipiell seit Win2000 schon nicht mehr, wenn der User nur ein Benutzer ist)

😃

Xynratron

02.12.2010 - 11:13 Uhr

huhu,

überprüf doch anschliessend ob es sich um ein Start-Tag handelt (isStartElement) und wenn nicht, dann ab zum nächsten und wieder überprüfen.

😃

Xynratron

29.11.2010 - 12:55 Uhr

huhu,

Noch so als Anhang: Kannst du die Tabellen nicht zusätzlich als Views definieren und aus allen nchars einfach nvarchars machen? ala:

CREATE VIEW V_MyTable as
select cast(Feld1 as nvarchar(50)), cast(Feld2 as nvarchar(20)) from T_MyTable

😃

Xynratron

28.11.2010 - 16:57 Uhr

Hallo baer999,

ja, da hast du recht, Connectionstrings sind (warum auch immer) auf den ApplicationScope festgelegt.

Es gibt mehrere Lösungsansätze:

nicht als "Verbindungszeichenfolge" sondern wirklich als "string" definieren (dann kann man UserScope auswählen)

oder

unter How to persist changes to My.Settings.ConnectionString gibts ne Anleitung - allerdings vb#. Klick einfach bei den Properties auf "Code Anzeigen" und adaptiere den vb-Code

😃

Xynratron

28.11.2010 - 16:18 Uhr

  1. >
    sollte dir nicht helfen dieses Problem zu lösen, sondern ist dazu da, dieses Stringgefrickel zu vermeiden.

Bitte Bitte Bitte mach dass.

😃

Xynratron

28.11.2010 - 12:34 Uhr

huhu,

IEnumerable<Obj> result = obj.Where(o => o.Str.Contains("CB"));

😃

Xynratron

PS: mann, dass ist immer eine so hohe Response-Rate hier^^

24.11.2010 - 13:14 Uhr

huhu,

dann ist deine Vorlage falsch. Es ist eines der reservierten Zeichen bei XML, die immer mit einem Entity ersetzt werden müssen. (Bzw. diese Entities sind vordefiniert)

> - &gt;
< - &lt;
& - &amp;
' - &apos;
" - &quot;

😃

Xynratron

24.11.2010 - 09:23 Uhr

huhu,

Bei diesen Fehlern ist es eigentlich immer eine Rechte Geschichte.

Besonders interessant in dem Zusammenhang ist aber schon seit Jahren die Frage: Wozu brauchst Du das?

Ein Fall ist z.B. "Ich möchte die Ini-Datei von meinem Programm in c:\Windows verändern" und sowas. Das ist schlechter Stil, Anwendungseinstellungen haben seit Jahren nix mehr im Programmordner und/oder Windowsordner zu suchen.

In den allermeisten Fällen werden eben keine zusätzlichen Rechte benötigt.

😃

Xynratron

22.11.2010 - 21:59 Uhr

huhu,

Wollte noch kurz nen Denkanstoss geben: Wieso muss denn eine Sortierung auf einem Integer basieren? Zur "Laufzeit" würde ich die Sortierung in einen Decimal verpacken und habe damit genau ein Update. (zwischen 2 und 3 einsortiert = 2.5)

Bei einer Kollision wird der neue und der kollidierende alte Wert zum nächst niedriegeren bzw. höheren geändert (2 Updates; 2.5 => 2.25; 2.5 => 2.75)

Natürlich kann es vorkommen, dass man irgendwann keinen "Platz" mehr hat, deswegen regelmäßig (oder wenn sich die kollision nicht beheben lässt) wieder auf ganze Zahlen (oder einen beliebigen anderen Bereich) umsortieren (=komlettes Update)

Damit habt ihr im laufenden Betrieb schnelle Updates und im Wartungsintervall einen kompletten Update. Sollte effizienter sein, als immer xx% updaten zu müssen.

😃

Xynratron

22.11.2010 - 11:41 Uhr

huhu,

ja, dann schreibt ihr also für jede Zeile immer wieder komplett dieselben Attribute und es ändern sich nur die Daten. Persönlich würde ich die Datentypen in einen Column-Bereich auslagern und darunter dann die Liste der Rows mit den Werten.

Naja, aber deine Frage bezüglich des Datasets: Lass es von einem Dataset schreiben dann kannst du es auch wieder einlesen oder baue analog zur Archiv-Funktion eine Lese-Funktion um das ganze dann im Frontend benutzen zu können. (Darfst es natürlich per Hand lesen und dann in ein passendes Dataset schreiben)

😃

Xynratron

22.11.2010 - 11:30 Uhr

huhu,

wir nutzen den Html2PDF Converter von http://www.winnovative-software.com/ - ist aber auch kostenpflichtig. Funktioniert aber einwandfrei.

😃

Xynratron

17.11.2010 - 14:05 Uhr

huhu,

probier mal

public void executeQuery(string sqlQuery, Database db)
{
    using(SqlConnection conn = getConnection(db))
    {
        conn.Open();
        using (SqlCommand com = new SqlCommand(sqlQuery, conn))
        {
            using (SqlDataReader dr = com.ExecuteReader())
            {
                while (dr.Read())
                { }
            }
        }
    }
}

😃

Xynratron

17.11.2010 - 13:58 Uhr

huhu,

überprüf doch mal, ob das Zertifikat wirklich auf dem Rechner registriert ist (Zertifikate in der MMC).

😃

Xynratron

17.11.2010 - 13:54 Uhr

huhu,

ist im grossen und ganzen kein Problem. List<T> wird auch als T[] im Webservice serialisiert.

Das "MVC" in deiner Beschreibung irritiert mich, meinst du WCF-Services? Die gehen auch ohne Probleme, eventuell muss man den Endpoint in der app.config anpassen.

Wir haben was ähnliches am laufen: aus einem WSDL eines Java-Programms wurde bei uns ein .Net-Webservice (WCF-Server) generiert und das Java-Programm kann ohne Probleme drauf zugreifen.

Wenn die WSDL bekannt ist, kann man ja aucj euer "neues" Programm dagegen programmiereun.

😃

Xynratron

17.11.2010 - 13:40 Uhr

huhu,

so wie dein Code aussieht, wandert deine Connection nicht ins Nirvana, sondern wird weder geschlossen noch disposed. Also kann sie garnicht in den Pool zurückgegeben werden um neu verwendet zu werden.

😃

Xynratron

15.11.2010 - 16:42 Uhr

Huhu MarcinD,

Ich habe keine Ahnung, woher dein SQL-Script stammt, aber ein Befehl names 'Show Tables' gibt's nicht.

probier mal folgendes:


select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='Belege'

Ausserdem lege ich Dir hiermit schonmal [Artikelserie] Parameter von SQL Befehlen ans Herz.

😃

Xynratron

10.11.2010 - 21:23 Uhr

hmm, ja, guter Einwand 😃 - dem liese sich aber dann mit einem Compiler-Symbol beikommen - für diejenigen, welche wissen was sie tun.

10.11.2010 - 21:16 Uhr

huhu,

wenn es um Geschwindigkeit geht, dann könnte man gleich wieder alle Generics, Lamda, und Linq rauswerfen. Vermutlich noch ein paar Dinge mehr. Aber es geh ja nicht nur um den Compiler 😉 sondern um das Framework und eine Wunschliste.

Es würden ja tatsächlich ein [Obsolete] im Framework reichen - und manche alten Obsolete-Drohungen "Wird in zukünftigen Versionen nicht mehr zu Verfügung stehen" mal wahr werden zu lassen.
😃

Xynratron

10.11.2010 - 20:20 Uhr

huhu,

Der Appool braucht einfach ein paar Sekunden um zu starten. Dann muss deine App initialisiert werden. Wenn alles mal läuft und die Seite im Cache liegen (= dann geht alles schnell) funktionierts wie erwartet. Alos ein "normales" Verhalten. Unsere Apps z.B. brauchen durchaus 30 Sek um anzulaufen - dannach alles wie erwartet im Millisekunden-Bereich.

Appools werden - wenn sie XX min. nicht angesprochen werden - auch wieder beendet (=> MartinH hats gechrieben). Wenn also kein Traffic auf der Seite ist, mal die Konfiguration kontrollieren.

😃

Xynratron

10.11.2010 - 19:52 Uhr

Na gut, dann wenigstens ne Warung^^

und "eingefahrene Entwickler" interessieren sich erst garnicht für FxCop; aber wieso nicht endlich mal ein paar [Obsolte] von Warning auf Error stellen?

Es mag möglich sein, in denen ein Dispose nicht aufgerufen werden "muss" - aber eine Situation in der es nicht aufgerufen werden soll?

😃

Xynratron

10.11.2010 - 19:43 Uhr

*hust* Debugger hust

10.11.2010 - 19:10 Uhr

huhu,

noch als Ergänzung: schau dir mal mit Wireshark deinen sonstigen Traffic an. Windows zerhackstückelt sehr viele Cecksums in den Paketen. Diese werden von der Gegenseite im Normalfall aber trotzdem akzeptiert.

Abgesehen davon ist das eigentliche Paket (incl. Checksum) Sache des Treibers, nicht der verwendeten App - hier also Entwarnung.

😃

xynratron

10.11.2010 - 19:04 Uhr

huhu,

explizite Compilerfehler ala
*Please use Generics like List<Type> instead of StringCollection, ArrayList.. *Please use using or Try-finally for Types implementing IDisposeable

nen Parser für SQL-Strings (=avoid using concenated Strings; use Parameters instead)

Also Zeug, dass eingefahrere Entwickler und Neulinge mit wichtigen Konzepten vertraut macht.

😃

Xynratron

10.11.2010 - 18:40 Uhr

huuh,

Visual Studio 2010 und Client-Framework eingestellt?

😃

Xynratron

10.11.2010 - 18:32 Uhr

Guten Abend zusammen;

Das hier ist leider eins meiner Bauchschmerzthemen. Leider ist es durchaus möglich, auch bei MD5 einen Input zu erzeugen, der als gültiges Kennwort gilt.

Aber das betrifft auch viele andere Hashfunktionen.

Hatte mal was zusammengeschrieben; bitte die Querverweise lesen und "verstehen" was ein Kennwort-Hash bedeutet.
Kennwortsicherheit - Hashing von Kennwörtern

Liebe Grüsse

Xynratron

08.11.2010 - 15:45 Uhr

dann entschuldige bitte - dachte das wäre ein "Pro-Breit" gewesen.

08.11.2010 - 15:26 Uhr

huhu,

dabei sehe ich als Nachteil dass die eine Info-Spalte ein Container für alles sein kann. Dateien (binär) und Text vermischen halte ich für nicht unbedingt ideal.

Oder ist das anders gemeint?

Ja und Nein 😃 ich meine folgendes:

aufgrund verschiedener Informationstypen werden viele Attribute benötigt

Auch wenn zu einem Paket verschiedene "Info"-Daten (File, EMail, Event) geben kann, so sind die Attribute dieser Infos (Von, An, CC, Bildgrösse etc.) doch nicht zusätzlich in der INfo-Tabelle zu speichern, sondern in einer Extra-Tabelle. Als nächstes wäre hier eine Spaltenliste (Von, An, CC, Bildgrösse etc.) ja eher daneben; hier meine ich, ist eine Liste mit Attributen durchaus besser.

Das ergibt nicht nur fiese Select Statements sondern auch noch miese Performance.

Dem möchte ich widersprechen. Ein Suche-SQL auf die Breite Tabelle wäre ja noch komplexer ("where (An like '%müller%' or to like '%müller%') etc.) - vor allem wenn man dann auch noch über Tabellen joinen muss, um Pakete mit Attributen ala "hat Email von Müller Event heute verschicken or ist Fax vom letzten Monat" zu finden.

Die Performance ist imho in dem Fall dann gleich.

Irgendwo hier gibts nen Post von Florian Reischel mit einem einfachen SQL für genau diese Suchanfragen an eine Attributtabelle. Müsste man mal suchen.

😃

Xynratron

PS: Sorry, das posting ist irgendwie schlecht zu lesen. Mein Kopf ist grad zu voll, ka wie ich das besser beschreiben soll^^

08.11.2010 - 13:51 Uhr

huhu,

ich bin mir nicht sicher, warum ihr denkt, man müsste für Lösung 1 unendlich viele Spalten in einer Tabelle anlegen?

Ich würde die Tabelle statt "Breit" einfach "Lang" machen; dann habt ihr eure NULL-Values nicht und könnt später beliebige Typen mit beliebigen Attributen dazupacken. Das ganze ohne die DB erweitern zu müssen.

Bei der Lösung 2 müsste man ja immer die DB ändern, wenn was dazukommt.

😃

Xynratron

07.11.2010 - 23:56 Uhr

huhu,

wenn ich richtig verstehe, dann werden die im Gridview korrekt dargestellt, nur in deinem Code geht es nicht?

Dann benutz doch mal nen Debugger und sieh dir deinen Code und das DataTable genau an, was da so drin steht.

Ansonsten können wir hier nur ins blaue hinein tippen.

😃

Xynratron

05.11.2010 - 10:38 Uhr

huhu,

Das sind doch keine Seiten-Kopf/Fuss-Zeilen sondern eher Dokument-Kopf bzw. Fusszeilen; schau doch mal ob es sowas in der Richtung gibt.

Zur Kosmetik: mach die Linien mal etwas dicker.

😃

Xynratron

03.11.2010 - 23:20 Uhr

huhu,

äh, schön für die späte Antwort, dann kann ich auch noch sagen - und ich hoff ich versteh dich nicht falsch - bzw. hab ich noch nie nachgeguckt wohin VS meine dll's bei nem Test hinkopiert; naja, ich zitiere mal Herbivore

Leider liefert Assembly.GetEntryAssembly in bestimmten Fällen das falsche Ergebnis (null), z.B. wenn man im Visual Studio eine NUnit test.dll mit dem NUnit-Gui startet. Kann das vorkommen, kann man

Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location);  

verwenden (also mit Assembly.GetExecutingAssembly). Dieser Code muss dann jedoch unbedingt im Code der EXE selbst stehen. Er darf dann nicht in einer DLL stehen, zumindest nicht, wenn die DLL in einem anderen Verzeichnis liegt. Es würde dann das Verzeichnis der DLL ermittelt werden.

siehe [FAQ] Pfad zur eigenen Anwendung (EXE) ermitteln

Das wichtige ist der letzte Satz.

Preisfrage: liegt deine test-dll im selben Verzeichnis wie die anderen und wo du die "fehlende" hin haben willst?

😃

Xynratron

03.11.2010 - 22:54 Uhr

huhu,

gibts nen Fehler, wird der Process nicht gestartet oder was bedeutet "klappt dieser Prozess nicht mehr"?

😃

Xynratron

03.11.2010 - 22:37 Uhr

huhu,

AFAIK ist das ohne Probleme möglich.

using (SqlConnection conn = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Data Source=."))
{
    conn.Open();
    conn.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e)
    {                                    
            Console.WriteLine(e.Message);
    };
    using (SqlCommand cmd = new SqlCommand("Print 'Test'", conn))
    {
        cmd.ExecuteNonQuery();
    }
}

😃

Xynratron

03.11.2010 - 08:38 Uhr

huhu,

Weil der sehr viel ressourcensparender ist als MSSQL [..] mehr RAM benutzen als der MSSQL Server Express

Naja - was nun? "Benutzt mehr Ram" beisst sich mit "ressourcensparend" 😃
ich denke die Grundlast, die beide Systeme erzeugen, ist auf allen gängigen Systemen vernachlässigbar.

Dateien in der DB würde für mich bedeuten dass ich den BLOB beim zugriff temporär in eine Datei schreiben müsste und diese dann lokal aufrufen müsste.

Nein, must Du nicht. Kommt auf den Anwendungsfall an. Wenn man z.B. ein Bild in einer Gui darstellt, dann muss man es
a) von der Platte in einen Stream in ein Image-Object laden
b) von der DB in einen Stream in ein Image-Object laden

Bleibt sich also gleich.

Dauert ohne frage eine gewisse zeit länger als ein direkter Dateizugriff.

Vermutlich - wenn das Bild lokal liegt. Ansonsten gibt es noch Faktoren wie: den DB-Server, den File-Server, das Netzwerk...

Dateien wie Bilder, Fotos oder zip/rar Dateien in eine Datenbank zu legen, die man nicht durchsuchen kann, finde ich auch fragwürdig.

Ähh, wie durchsucht du denn aktuell Bilder? Wenn du die "Metainformationen" meinst, ala mp3-ID-Tag, die kann man auch in der DB ablegen. Bei Zip-Dateien geb ich Dir recht, der Windows-Explorer durchsucht die tatsächlich - dazu muss der die aber auch erstmal in den Speicher laden und teil-entpacken.

Meine Meinung:

Es kommt auf den Anwendungsfall an.

In einer Webanwendung würde man den Webserver unnötig ausbremsen, wenn man die Bilder immer aus der DB holt, da diese bei statischen Files sehr fix sind.
Normale Office-Dokumente würde ich weiterhin im File-System speichern. Die Benutzer kommen damit besser zurecht (können auch mal kopieren und löschen und so).
Bestimmte Kataloge - z.B. eine LP-Cover Sammlung - sind in einer DB schön aufgehoben; man kann zusätzliche Infos (Interpret, Lyrics und die mp3-Files) hinterlegen.

Noch einen Punkt zu "Deinem" Problem:

Virtual-Machines und Sicherung: Virtual Machines sind so zu sichern wie "echte Maschinen" - und bei denen kommt doch bitte keiner auf die Idee, jede Nacht ein Image der Platte zu machen, oder?
Fals die Performance der VM nicht ausreicht, ist imho die DB am wenigsten schuld - das Design einer DB sollte nicht davon abhängen, auf welcher Ziel-Hardware sie läuft (und ob die Performance reicht). Wenn du dein Projekt um ein halbes jahr verschiebst/überziehst, dann kann sich die "Hardware-Seite" grundlegend geändert haben.
Man sollte ja auch nicht immer alles und jeden virtualisieren. Auch im "internen" umfeld machen sich schnelle Server bei der Produktivität der Mitarbeiter bemerkbar.

So, ob du jetzt Deine Dateien in der DB speichern sollst oder nicht, kann ich Dir nicht raten, denn ich hab nichtmal ne Idee was für Dateien und was für ein Einsatzzweck.

😃

Xynratron

02.11.2010 - 12:38 Uhr

huhu,

ich würd es mal so probieren:
*Für jedes Format ein Import-Paket erstellen (Import/Export-Assistent) *Daten in Zieltabelle importieren (ungeachtet der doppelten) *Zieltabelle um doppelte Einträge bereinigen

Die Pakete lassen sich speichern und immer wieder ausführen (auch per Auftrag)

zusätzlich ist der SSIS zu erwähnen oder du benutzt FlowHeater

😃

Xynratron