Laden...

Forenbeiträge von mabo Ingesamt 334 Beiträge

14.03.2013 - 17:05 Uhr

Hier noch ein bischen Lektüre 🙂

[FAQ] DB-Password/Kennwort/Connection-String sicher speichern
[Tutorial] Konfigurationsmodell im .NET Framework
[Artikel] Custom Settings Provider

Im Prinzip ist alles vorhanden, das einzige was du brauchst ist ein eigener SettingsProvider, dass du das Verzeichnis bestimmen kannst, wo die Settings abgelegt werden.

13.03.2013 - 12:55 Uhr

Und noch ein kleiner Hinweis:

Bei Java sind die Debuginformationen in den .class-Dateien enthalten.

Bei .NET sind die Debuginformationen in .pdb-Dateien enthalten. Diese pdb-Dateien sind notwendig, um die Anwendung debuggen zu können (u.a. sind Zeilennummern im Stacktrace, wenn die pdb-Dateien vorliegen). Das ist dann wichtig, wenn dein Programm bei einer Exception Logeinträge mit Stacktrace wegschreibt.

12.03.2013 - 11:37 Uhr

Hört sich komisch an, aber der Text einer Textbox steht in der "Text"-Eigenschaft.

Optimalerweise erledigt man das aber über Databinding, und nicht über direktes Auslesen der Eigenschaften im Code.

06.02.2013 - 17:13 Uhr

Um noch auf die Frage von oben einzugehen:
Die Keepass-Datei liegt auf Google Drive und ich synchronisiere mein Handy (Android) ca. 1 mal täglich wenn ich nach der Arbeit heim komme.
Ich schätze, dass ich da mittlerweile gut 60 Kennwörter gespeichert habe. Natürlich nehme ich für jede Webseite ein eigenes Kennwort. Keepass hat einen sehr guten Kennwort-Generator eingebaut. 😃

Und wie sicher KeePass ist kann jeder selbst nachschauen, da die Software OpenSource ist.

06.02.2013 - 10:23 Uhr

Ich finde Keepass super und verwalte alle meine Kennwörter damit. Für mich überwiegen die Vorteile, die das Programm bietet. Bei der Menge an Kennwörtern, die man in der heutigen Zeit benötigt finde ich das Programm eine enorme Hilfestellung.

Die Keepass-Datenbank liegt bei mir auf einem Cloud-Speicher, so dass ich nahezu von überall her Zugriff drauf habe. Fürs Handy gibt es auch eine App (und durch regelmäßige Synchronisierung brauche ich auch keine Internetverbindung)

In unserer Firma wird es ebenfalls eingesetzt, um Kennwörter sicher und zentral zu speichern.

07.09.2012 - 14:22 Uhr

Das macht logisch gesehen überhaupt keinen Sinn.

War das im Debug- oder im Release-Modus?
Kannst du evtl. eine Beispielanwendung bereitstellen wo man das nachvollziehen kann?

05.06.2012 - 12:01 Uhr

Genau das was ich gesucht habe, vielen Dank. 👍

05.06.2012 - 11:15 Uhr

ein Blick in die FAQ genügt:

[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Das sind aber Grundlagen. 🙂

05.06.2012 - 11:13 Uhr

Am besten du gehst mit dem Debugger durch und schaust warum das Laden und Speichern nicht funktioniert (hier wäre noch eine ausführliche Fehlerbeschreibung gut, was nicht funktioniert).

vermutlich brauchst du einen eigenen SettingsProvider (siehe [Artikel] Custom Settings Provider )

05.06.2012 - 08:49 Uhr

Wenn nicht, müsste man den Benutzernamen in den Connection Context hinterlegen.

Hallo Khalid,

hast du vielleicht ein kurzes Beispiel wie das geht? Ich finde da nur was im Zusammenhand mit CLR Stored Procedures.

31.05.2012 - 15:00 Uhr

Allgemein ist der direkte Zugriff auf den SQL Server übers Internet ein ziemliches Sicherheitsrisiko, vor allem wenn der Standardport verwendet wird.

Je nachdem wieviele Kunden du hast kannst du auch die Verbindung über einen ssh-Tunnel absichern.

27.04.2012 - 15:12 Uhr

An dieser Stelle kann der Artikel nicht schaden. 😁 [Tipp] Casten aber richtig: () / is / as

27.04.2012 - 14:57 Uhr

Wenn das eine C++-DLL ist kann man die meines Erachtens gar nicht aufrufen (da braucht man einen Wrapper in C)

Versuch mal ausserdem die genaue Signatur der Methode rauszufinden, sonst kann man nur raten.

10.04.2012 - 16:27 Uhr

Vererbung bedeutet, dass alle Funktionen der Basisklasse übernimmst und erweiterst. Das ist das Prinzip der Vererbung.

Wenn du auf so eine Funktion angewiesen bist solltest du deine Architektur nochmal überdenken. Das sind allerdings Grundlagen.

26.03.2012 - 10:55 Uhr

Hast du die Zeiten mit einem Profiler nachvollzogen? Bist du dir sicher dass dieser Code so lange dauert?

26.03.2012 - 10:48 Uhr

Dann installiert man sich Firefox - oder Chrome bzw. Chromeplus. Der IE ist der mit Abstand schlechteste Browser für die Entwicklung von Webseiten, weil es einfach keine Debugging-Möglichkeiten gibt.

Der IE hat glaub ich seit Version 8 einen Entwicklermodus, mit dem kann man einigermaßen Webseiten debuggen. Ist zwar nicht perfekt, aber besser als gar nichts.
Aufrufen kann man den Entwicklermodus mit der Taste F12.

Des Weiteren kann man JavaScript im IE mit VS debuggen

15.03.2012 - 12:04 Uhr

Intern eine Quellcodeverwaltung benutzen und mit rsync die Berichte auf dem Kundenserver aktuell halten (wenn es da niemanden gibt, der mit TortoiseSVN o.ä. umgehen kann)

28.02.2012 - 09:30 Uhr

Schau dir mal die Doku zu InternalsVisibleTo an. Da steht auch drin wie man eine signierte Assembly angeben muss.

Allerdings wird es schon einen Grund haben, warum die Methoden internal deklariert sind

24.02.2012 - 09:53 Uhr

evtl. ist Binding.Format bzw. Binding.Parse das wonach du suchst.

20.02.2012 - 14:47 Uhr

Hallo,

ich habe einen Windows-V-Server in Betrieb und dabei folgende Sicherungsmaßnahmen durchgeführt:

* Kein Plesk
* Administratorkennwort mind. 20 Zeichen lang (mit Umlauten, Sonderzeichen, Zahlen,...)
* RemoteDesktop-Port geändert
* Windows-Firewall konfiguriert und nur die Ports geöffnet die gebraucht werden.
* jedes Programm/Dienst von mir läuft unter einem eigenen, eingeschränkten Benutzerkonto (FTP, Apache, ...)
* Die Nutzdaten sind in einem Truecrypt-Volume abgelegt

Was ich noch vorhabe:
OpenVPN installieren und die Verwaltung über den VPN-Tunnel durchführen.

Das ist bestimmt nicht die ultimative Lösung, aber da der Server nur von einem eingeschränkten Benutzerkreis verwendet wird, denke ich, dass es ausreichend ist.

20.01.2012 - 15:27 Uhr

Vielleicht kommst du mit einem IResultTransformer weiter.

Mit Isession.CreateSQLQuery() kannst du ausserdem direkt "native" SQL-Abfragen losschicken.

siehe auch NHibernate Reference Documentation - Native SQL

18.01.2012 - 17:15 Uhr

So wie es aussieht hast du nur einen Consumer-Thread pro Queue. Wenn das so ist kannst du dir das locking an der Stelle sowieso sparen.

edit: Ich meinte den ersten Beitrag. Bei der Enqueue/Dequeue braucht man es schon.

07.12.2011 - 11:55 Uhr

Um ein PDF zu erzeugen kannst du auch das HTML in einem Browser deiner Wahl öffnen und über einen PDF-Drucker abspeichern.
Wenn du dein Vorhaben genauer beschreiben kannst finden sich vielleicht noch andere Lösungen. 🙂

07.12.2011 - 11:41 Uhr

Wie funktioniert das?
Speichert du das Passwort auf dem USB-Stick ab?

06.12.2011 - 13:59 Uhr

Wir sind auch über die 1000er-Limitierung von Oracle gestossen.
Was aber (zumindest bei Oracle) funktioniert ist folgendes:

from Entity e where e.ID in (:p1) or e.ID in (:p2).... 

Wir haben das ganze dann in eine Methode verpackt, die im Falle von mehr als 1000 Einträgen in der Liste die Query unterteilt in mehrere solcher Bereiche.

Zur Performance kann ich nichts sagen, bei uns läuft es schnell genug. 🙂

24.11.2011 - 15:39 Uhr

Die Unterstützung für SQL Compact finde ich super. 👍

Und einen Fehler habe ich auch gefunden: Als Abfrage "Select count(1) from tabelle" eingeben und auf Show query tree klicken. (Datenbank war MS SQL falls es wichtig ist)

Fehlermeldung:
************** Ausnahmetext **************
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei TD.Additional.Data.Parser.SqlParser.ParseIdentifier(DslElement element)
bei TD.Additional.Data.Parser.SqlParser.ParseToken()
bei TD.Additional.Data.Parser.SqlParser.ParseExpession()
bei TD.Additional.Data.Parser.SqlParser.ParseSelectCommand()
bei TD.Additional.Data.Parser.SqlParser.ParseKeyword()
bei TD.Additional.Data.Parser.SqlParser.ParseToken()
bei TD.Additional.Data.Parser.SqlParser.Parse()
bei DatabaseExplorer.Controls.ResultViewPanel.GetParser(String query)
bei DatabaseExplorer.Controls.ResultViewPanel.toolStripButtonShowQueryTree_Click(Object sender, EventArgs e)
bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

14.11.2011 - 16:55 Uhr

Ist eigentlich ganz leicht. Stichwörter: MVC, Trennung von GUI und Logik, DataBinding

  1. Erstelle eine Klasse, die einen Lauf repräsentiert mit allen Eigenschaften (hast du evtl. schon). Implementiere die INotifyPropertyChanged-Schnittstelle. Das ergibt dein Datenmodell.

  2. Die Eigenschaften greifen per Index auf einen Dictionary-Eintrag zu. Verwende ein Dictionary<int, Lauf> als Container.

z.b.


public string Value 
{
    get
    {
        return Container[Index].Value;
    }
}


  1. Benutze DataBinding, um deine GUI-Elemente mit dem Datenmodell zu verknüpfen.

  2. Nun brauchst du nur noch eine Methode, die beim Wechseln eines Combobox-Eintrags das Datenmodell aktualisiert (oder benutze wieder DataBinding, um die SelectedIndex-Eigenschaft der Combobox an die Index-Eigenschaft des Lauf-Datenmodells zu binden). INotifyPropertyChanged nicht vergessen. 😃

08.10.2011 - 13:19 Uhr

Bei den Mapping-Dateien keine Compile-Action einstellen, nur embedded Resource !

21.09.2011 - 12:03 Uhr

Ich vermute, den Tabellennamen kann man nicht als Parameter mitgeben.

P.S. : [Artikelserie] SQL: Parameter von Befehlen

25.08.2011 - 11:51 Uhr

Das nennt sich "UI Prototyping" oder so ähnlich.

siehe z.B. Suche UI Prototyping Tool

18.08.2011 - 08:59 Uhr

Mit dieses Programm kann man die AssemblyVersion und AssemblyFileVersion für alle Projekte in einer Solution direkt setzen.

Das Programm sucht per Regex den Pfad zu den einzelnen Projekten in der Solution und sucht dann die Datei AssemblyInfo.cs im Unterverzeichnis Properties. Dann werden die Zeilen, die mit [assembly: AssemblyVersion( und [assembly: AssemblyFileVersion( beginnen ersetzt.

Das Programm ist nicht perfekt, aber es tut was es soll. 😁 Ich hoffe dass es jemand brauche kann. Ich habe es für Solution-Dateien von VS2010 entwickelt, ich weiß nicht ob es für 2003/2005 auch funktioniert.


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace VersionInfoFix
{
    class Program
    {
        // Project\(".*"\) = ".*", "(.*)\\.*",
        static Regex _projectRegex = new Regex("Project\\(\".*\"\\) = \".*\", \"(.*)\\\\.*\",");

        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("Unzureichende Argumente");
                Console.WriteLine("Aufruf: VersionInfoFix [Pfad zur .sln] [Version]");
                Console.ReadLine();
                return;
            }
                
            String filename = args[0];
            if (!filename.EndsWith(".sln"))
            {
                Console.WriteLine("keine .sln angegeben");
                Console.ReadLine();
                return;
            }

            String versionString = args[1];
            Version theVersion = new Version();

            if (!Version.TryParse(versionString, out theVersion))
            {
                Console.WriteLine("Version konnte nicht geparst werden");
                Console.ReadLine();
                return;
            }

            string[] lines = File.ReadAllLines(filename);
            foreach (var line in lines)
            {
                Match m = _projectRegex.Match(line);
                if (!m.Success) continue;
                Group path = m.Groups[1];                
                string assemblyInfoPath = Path.Combine(new FileInfo(filename).DirectoryName, path.Value, "Properties", "AssemblyInfo.cs");
                if (File.Exists(assemblyInfoPath))
                    UpdateAssemblyVersion(assemblyInfoPath, theVersion);
                else
                    Console.WriteLine("Keine AssemblyInfo unter " + assemblyInfoPath + " gefunden!");
            }

            Console.WriteLine("Fertig, Taste drücken.");
            Console.ReadLine();
        }

        private static void UpdateAssemblyVersion(string assemblyInfoPath, Version version)
        {
            string[] lines = File.ReadAllLines(assemblyInfoPath);
            for (int index = 0; index < lines.Length; index++)
            {
                string line = lines[index];
                if (line.StartsWith("[assembly: AssemblyVersion("))
                    lines[index] = "[assembly: AssemblyVersion(\"" + version + "\")]";
                if (line.StartsWith("[assembly: AssemblyFileVersion("))
                    lines[index] = "[assembly: AssemblyFileVersion(\"" + version + "\")]";
            }
            File.WriteAllLines(assemblyInfoPath, lines);
        }
    }
}


Schlagwörter: AssemblyInfo, Version, AssemblyVersion, AssemblyFileVersion

10.08.2011 - 10:06 Uhr

Gleichzeitig senden und empfangen geht meines Wissens nach nur über 2 verschienene Ports (d.h. 2 verschiedene Verbindungen).

Wenn du nur eine Verbindung benutzen möchtest musst du die Zugriffe synchronisieren.

10.08.2011 - 09:31 Uhr

Hallo,

suche nochmal nach dem Stichwort "Normalisierung" in Bezug auf Datenbanken.

Um das Problem mit mehreren Listentypen zu Lösen kannst du zu jedem Listeneintrag den Listentyp in einer separaten Spalte abspeichern (aber nur als Referenz auf eine Listentyp-Tabelle).

Eine Datenbank ist dafür geschaffen, große Mengen an Daten zu verwalten. Um die Performance zu gewährleisten ist jedoch ein sinnvoller Aufbau der Struktur nötig. Über welche Dimensionen sprechen wir hier?

10.08.2011 - 09:21 Uhr

Eine Stadt hat nur eine PLZ und nicht meherere.

Das stimmt so nicht ganz, es gibt Städte mit mehreren Postleitzahlen. München z.B.

05.08.2011 - 10:57 Uhr

und noch ein Tipp fürs nächste mal: Einen OR-Mapper (NHibernate, Entity-Framework, o.ä.) verwenden 😉
Dann ist eine Migration einfacher zu bewerkstelligen.

02.08.2011 - 10:22 Uhr

Subqueries kenne ich schon.
Ich habe aber noch keine gesehen die nicht mit "select" beginnt. Hast du ein Beispiel dafür?

02.08.2011 - 10:12 Uhr

Hallo,

ich würde einfach prüfen, ob das erste Wort der Query ein "select" ist. 🙂

21.07.2011 - 16:27 Uhr

Wir haben für ein Projekt NUnit Forms eingesetzt. Es hat aber ein wenig gedauert bis es funktioniert hat 🙂

21.07.2011 - 13:33 Uhr

Ich glaube du meinst das da: InputDirector

07.07.2011 - 14:20 Uhr

wie wärs mit Castle ActiveRecords?

04.07.2011 - 10:36 Uhr

Danke für den Hinweis. Die Preise sind schon ordentlich, wenn ich ein vergleichbares Paket möchte.

28.06.2011 - 22:13 Uhr

Hallo,

ich habe momentan einen Windows-VPS (Virtual Private Servers) bei HostEurope, allerdings gibt es da ein paar Einschränkungen (hosteurope-FAQ: Welche Software kann ich auf Windows-Server (nicht) installieren?). Soweit ich rausgefunden habe liegt das an Virtuozzo, das als Hostsystem eingesetzt wird. Was ich unter anderem gerne nutzen möchte ist OpenVPN, Truecrypt und die Fileserver-Rolle des Windows-Server.

Jetzt bin ich auf der Suche nach Alternativen, die diese Einschränkungen nicht haben. Gefunden habe ich bisher nur ein Angebot bei Strato (http://www.strato.de/server/virtual-windows-server/). Da kommt der Hyper-V-Server als Hostsystem zum Einsatz. Jedoch habe ich mit Strato in der Vergangenheit schlechte Erfahrungen im Bereich Kundensupport gemacht.

Meine Frage nun, kennt jemand noch einen Anbieter für Windows-VPS auf Basis von Hyper-V?

Gruß mabo

14.04.2011 - 12:00 Uhr

Du musst wohl oder übel jedes einzelne Element vergleichen.
Es gibt dazu in System.Linq die SequenceEquals()-Methode, die aber nur eine Ebene tief vergleicht.

Falls dir das nicht ausreicht, hier eine Implementierung die auch verschachtelte Listen verkraftet:


        private static bool EnumerableEquals(IEnumerable first, IEnumerable second)
        {
            IEnumerator enumFirst = first.GetEnumerator();
            IEnumerator enumSecond = second.GetEnumerator();
            
            while (enumFirst.MoveNext())
            {
                if (!enumSecond.MoveNext()) return false;
                var currentFirst = enumFirst.Current;
                var currentSecond = enumSecond.Current;
                if (currentFirst is IEnumerable && currentSecond is IEnumerable)
                    return EnumerableEquals(currentFirst as IEnumerable, currentSecond as IEnumerable);
                
                return currentFirst.Equals(currentSecond);
            }
            return !enumSecond.MoveNext();
        }

07.04.2011 - 15:58 Uhr

[FAQ] Warum blockiert mein GUI? Abschnitt "Die Falle"

Du machst gerade den Fehler der dort beschrieben wird.

Dafür hatte ich mich entscheiden da die TreeView (und später noch andere Komponenten) sich selber über das eintragen und aktualisieren ihrer Daten kümmern sollen und ich nur noch Notify() triggern brauche.

Abgesehen davon solltest du unbedingt Darstellung und Datenhaltung trennen. Dann hättest du jetzt weniger Probleme.

07.04.2011 - 14:56 Uhr

Ja da fehlt noch was. 😉

Zieh mal mit dem VS-Designer eine Combobox auf ein Form und schau dir die Form.Designer.cs-Datei dazu an.

07.04.2011 - 14:20 Uhr

Das Konfigurationsmodell an sich ist scho zu gebrauchen, wenn man folgenden Weg wählt: [Artikel] Eigene Settings Provider 😁

21.03.2011 - 11:27 Uhr

auf der Wikipedia-Seite werden ein auch paar genannt: http://de.wikipedia.org/wiki/Code-Duplizierung