Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von haarrrgh
Thema: Datenverbindung ConnectionString
Am im Forum: Datentechnologien

Falls Connectionstring, TCP/IP usw. alles stimmt und auch tatsächlich keine Fehlermeldung kommt, dann mal eine ganz blöde Frage:

UPDATE Patienten SET Name = 'Fritz' WHERE Name = 'Jannik'

Gibt es in der Tabelle 'Patienten' auch tatsächlich einen Datensatz mit Name = 'Jannik'...?

Thema: Verteilte Versionsverwaltung ohne Server
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Harry B.
Das ist ein Punkt, den ich bislang zwar schon mehrfach gelesen, aber nicht wirklich verstanden habe: Wozu dient denn überhaupt das zentrale Repository? Vielleicht um die Unterschiede des zentralen gegenüber dem lokalen Repository zu kennen - und diese in der Folge dann anderen zur Verfügung zu stellen?

Genau so ist es. Theoretisch geht es auch ohne zentrales Repository. Wenn ich mit 2 anderen Leuten zusammenarbeite und jeder sein eigenes Repository hat, dann kann ich mir auch aus den Repositories der beiden anderen deren Änderungen pullen.
Das ist aber etwas umständlich, denn je mehr Leute es sind, desto mehr Repositories gibt es, bei denen ich prüfen muß ob neue Änderungen drin sind. Außerdem ist es für Build- und Deploymentzwecke (Stichwort Buildserver, z.B.) sehr hilfreich wenn man nur ein zentrales Repository hat, von dem man genau weiß: da sind alle aktuellen Änderungen drin.
Ohne zentrales Repository muß man nämlich erstmal herausfinden, welcher der 3 Entwickler die aktuellste Version des Codes hat.

Zitat von Harry B.
Woher wissen B und C, welche Änderungen Sie noch nicht an A geliefert haben? Müssen sie sich das z. B. an einem Datum merken, oder "weiß" es das Git? "Pull" würde dann bedeuten, dass A sich die von B und C weitergeleiteten Differenzen(?) in sein lokales(?) Repository holen würde? Macht er sich dabei nichts kaputt?

Pull heißt genau das.
Push wäre, daß B und C ihre Änderungen stattdessen in ein anderes Repository "schieben" würden. Dafür benutzt man normalerweise ein zentrales.
Git & Co sind schlau genug um sich intern zu merken was sie schon alles gepusht/gepullt haben und was nicht. Deshalb werden bei jedem Push/Pull wirklich nur die Daten gesendet/geholt die wirklich neu sind.
Und nein, man macht sich damit nichts kaputt. Jedes Repository hat lokal eine komplette Historie. Wenn man pullt, werden die Änderungen erstmal nur in der Historie gespeichert, sonst nichts.
Wenn man die Änderungen wirklich in den Codedateien in seiner lokalen Version sehen will, muß man sie explizit aktualisieren. Da kann also auf keinen Fall etwas automatisch überschrieben werden.

Zitat von Harry B.
Dann noch zum "Mergen": Sollten A und B dieselben Dateien bearbeitet haben und es zu Konflikten kommen, dann hat der Mergende die Arbeit mit dem fremden Code? Nicht, dass ich davon "Angst" hätte; ich will 's nur wissen und verstehen.

Jawoll, der Mergende hat die Arbeit.
So schlimm ist das aber nicht, bei Git & Mercurial ist das Mergen wesentlich einfacher als z.B. bei Subversion. Sogar wenn zwei Leute die gleiche Datei bearbeitet haben, sind Git & Mercurial clever genug um das von alleine zu lösen. Es gibt nur einen einzigen Fall in dem der User wirklich etwas manuell machen muß, nämlich wenn beide die gleiche Zeile in der gleichen Datei bearbeitet haben.


Zitat von Harry B.
In meiner besonderen Situation ist es aber eben so, dass nur Entwickler A an seinem Standort auf das "Master-Repository" zugreifen kann bzw. soll.

OK, das war bis jetzt noch nicht so deutlich. Du willst also, daß Entwickler A das Master-Repository verwaltet und B und C ihm nur zuarbeiten und ihm ihre Änderungen schicken?
Falls ja: das hört sich nach dem typischen Open Source-Projekt-Workflow an.
Der sieht, auf Dein Beispiel gemünzt, ungefähr so aus:

Entwickler A hat ein Repository bei Github/Bitbucket/wasauchimmer.
Das ist das Master-Repository. Entwickler A hat Schreibzugriff, B und C haben nur Lesezugriff.

B und C können sich jederzeit eine Kopie vom Master-Repository machen.
Da gibt es 2 Varianten:
"Clone" --> Kopie auf den lokalen Rechner
"Fork" --> sie müssen auch einen Account beim gleichen Hoster haben. Dann haben sie eine Kopie online, und die können sie wiederum auf ihren lokalen Rechner klonen und dort bearbeiten. Wozu das gut ist, kommt gleich noch.

Dann können sie lokal ihre Änderungen machen.
Wenn sie die fertig haben, committen sie sie. Dann sind die Änderungen in ihren lokalen Repositories.
Jetzt müssen die Änderungen irgendwie in das zentrale Master-Repository. Schreibzugriff darauf hat nur A. Also müssen B und C ihre Änderungen irgendwie an A schicken.

Dafür gibt es 2 Möglichkeiten:
Wenn sie das Repository nur lokal geklont haben, können sie aus ihren Änderungen einen Patch erzeugen. Das ist eine Textdatei die die geänderten Stellen mit Änderungskommentar usw. enthält.
Die schicken sie per Mail an A, und der kann sie in sein Repository importieren.
Oder, wenn B und C einen Fork auf Github/Bitbucket haben: dann pushen sie ihre Änderungen einfach dahin und sagen A, daß er sich ihre Änderungen von dort holen soll.
A kann sich die Änderungen direkt aus den Repositories von B und C pullen (Lesezugriff muß er natürlich haben) und angucken, in seinem lokalen Repository committen und dann ins Master-Repository pushen.

Und dann machen B und C wieder einen Pull vom Master-Repository, und beide haben die jetzt aktuelle Version.


Das ist der typische Ablauf bei den meisten Open Source-Projekten.
Nur wenige Leute haben tatsächlich Schreibzugriff, aber jeder kann sich den Code holen, Änderungen machen und diese an einen von den Leuten mit Schreibzugriff schicken.

Dafür mußt Du Dich allerdings mit dem Gedanken anfreunden, Dein Repository in der Cloud zu speichern.
Wenn Du das nicht möchtest, kannst Du den gleichen Workflow auch nachbauen indem Du Daten per Mail/FTP austauschst, es ist halt nur viel umständlicher als Push/Pull.

Thema: Verteilte Versionsverwaltung ohne Server
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Harry B.
Ach ja, "die Cloud" scheidet als Speicherort für die Daten aus. Da ist das Vertrauen noch nicht so weit ...
Zitat von Harry B.
Die beteiligten Entwickler werden Daten nur per E-Mail, FTP oder USB-Stick austauschen können.

Auch wenn herbivore auch schon etwas dazu gesagt hat, ich formuliere es nochmal etwas deutlicher:

"Die Cloud" ist ein Rechenzentrum bei einem externen Anbieter, irgendwo im Internet.
Beim Datenaustausch per E-Mail oder FTP liegt Dein Code zwangsläufig auf dem Server Deines Providers...und der steht auch in einem Rechenzentrum bei einem externen Anbieter, irgendwo im Internet

Was ich damit eigentlich sagen will: wenn Du Deinem Email- oder Webspaceprovider soweit vertraust daß Du Deinen Code per Mail oder FTP austauschst, dann kannst Du auch einem der großen Repository-Hoster wie Bitbucket oder GitHub vertrauen.

Und das Handling ist darüber wirklich wesentlich einfacher als über FTP/Mail.

Thema: Verteilte Versionsverwaltung ohne Server
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

in einer verteilten Versionsverwaltung gibt es kein "zentrales" Repository in dem Sinne. Alle Repositories enthalten den kompletten Code UND die komplette Historie, und alle sind identisch.

In den meisten Fällen wird man ein Repository auf einen zentralen Server legen und sich mündlich darauf einigen daß das das "zentrale" ist, weil es einfach leichter zu handeln ist als E-Mail/FTP/USB-Stick.

Man kann natürlich auch ohne zentralen Server arbeiten, aber der Austausch über E-Mail/FTP/USB-Stick ist halt etwas umständlicher. Um bei Deinem Beispiel zu bleiben, würde Entwickler A am Anfang 1x das zentrale Repository weitergeben, Entwickler B und C würden ihm dann irgendwann ihre veränderten Versionen zurückschicken, und er würde ihre Änderungen per Pull in sein Repository holen und dort ggf. mergen.


Aber mal eine ganz andere Idee: warum suchst Du überhaupt eine Versionsverwaltung ohne Zugriff auf einen gemeinsamen Server?
Ist es zwingende Voraussetzung daß es keinen geben darf, oder hast Du einfach nur keinen zur Verfügung?

Wenn Du nur keinen zur Verfügung hast...es gibt genügend Anbieter bei denen man Repositories hosten kann.
Siehe Online Quellcodeverwaltung für private Projekte?.

Allerdings sind die meisten nur für Open Source-Projekte kostenlos (sprich, die Repositories sind öffentlich).
Wenn Dein Projekt nicht Open Source ist, würde ich Bitbucket empfehlen. Da bekommt man private Repositories für bis zu 5 User kostenlos.
Die benutzen als Versionsverwaltung allerdings nicht Git, sondern Mercurial.

Thema: Problem beim Builden unter Verwendung von TeamCity
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Du könntest einfach ein zweites Buildscript extra für die Verwendung in TeamCity erstellen, das nichts weiter macht als zuerst Dein Script für die Libs und danach Dein eigentliches Buildscript auszuführen.

Thema: Insert-Statement wird nicht in Accessdatenbank geschrieben
Am im Forum: Datentechnologien

Zitat von cSharpJunior
@haarrrgh: Dein Tipp wars leider auch nicht. Ich hab die DB zwar im Projektverzeichnis, aber dort wo die Files *.sln und *.suo liegen.

Hm...ich finde, das klingt sehr wohl nach meinem Tipp.

Mach erstmal das was FZelle geschrieben hat (vor allem Punkt 2 ).

Wenn Du das gemacht hast und dann genau den Fall hast den ich in meinem letzten Beitrag beschrieben habe (Programm wird ohne Fehlermeldungen/Exceptions ausgeführt, aber die Daten sind nicht in der Datenbank), lies Dir nochmal den Link durch den ich gepostet hatte.

Thema: Gedanken zur optimalen Datenbankstruktur
Am im Forum: Datentechnologien

Zitat von mohnstrudel
... die Anzahl der Einträge kann und wird vermutlich in die Tausender gehen.

[...]

Habe leider keine Erfahrungswerte was die Zugriffszeit von großen Datenmengen angeht.

Für einen SQL Server (und jede andere halbwegs vernünftige Datenbank) sind Tausende von Datensätzen nichts.
"Einigermaßen große" Datenmengen fangen bei ein paar Millionen Datensätzen an 8)

Thema: Insert-Statement wird nicht in Accessdatenbank geschrieben
Am im Forum: Datentechnologien

Von mir noch ein anderer Schuß ins Blaue:
Ich lese nirgendwo etwas davon daß die "fehlgeschlagenen" Inserts und Updates irgendwelche Fehlermeldungen oder Exceptions auslösen.
D.h. es sieht so aus als ob alles funktioniert hat, die Daten sind danach nur nicht in der Datenbank zu finden.
Richtig?

Falls ja, könnte es sein daß das hier Dein Problem ist?
Datenbank wird nicht befüllt

Thema: Aktuellen Namespace-, Class- und Methode-Namen ermitteln
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Naja...wenn man es erst einmal verstanden hat ist es wirklich einfach, aber ggf. dauert es ein bißchen bis man es wirklich verstanden hat... Siehe DI/IoC in der Praxis (und korrekter Aufbau der zugehörigen Klassen)

Mich würde aber sehr interessieren wie Du Logging in Verbindung mit IoC benutzt.
Klar, ich kann mir den Logger injecten lassen, aber dann habe ich ja in jeder Klasse die irgendwas loggen muß den ILogger im Konstruktor.

Thema: Versionsverwaltung: benutzt ihr verteilte Systeme wie Git, Mercurial, Bazaar?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Direkte Erfahrung nicht.
Ich weiß aber, daß das unter der Haube für die eigenliche Versionsverwaltung Mercurial benutzt.
Das ganze Paket Kiln kann natürlich noch mehr, aber der Versionsverwaltungs-Teil ist 1:1 Mercurial.

Thema: c# und mysql: tablename mit sonderzeichen € (lässt mich nicht selecten)
Am im Forum: Datentechnologien

Ich benutze in Tabellen- und Spaltennamen niemals irgendwelche Sonderzeichen, um genau solche Probleme wie Deins zu vermeiden.

Sicher, man kann in fast allen Systemen mit Tricksereien à la "finanzen__(" + char$(XXX) + "uro)" trotzdem mit solchen Tabellennamen arbeiten, aber es ist einfach lästig wenn man dauernd so ein Kauderwelsch hinschreiben muß.

Ich würde die Tabelle umbenennen, wenn ich Du wäre.
(Das ganze Softwarezeugs ist so schon kompliziert genug, man muß es sich nicht selbst noch schwerer machen :D)


Außerdem habe ich den Verdacht daß Deine Datenbank nicht gut designt ist.
Aus dem Tabellennamen könnte man schließen daß es auch noch weitere identisch aufgebaute Tabellen namens "finanzen_dollar", "finanzen_taler" usw. gibt.
Wenn dem so ist, dann sollten die Daten alle in EINE Tabelle, mit einer zusätzlichen Spalte für die Währung.

Thema: Volltextsuche MS SQL
Am im Forum: Datentechnologien

Wenn die Anzahl der Tabellen überschaubar ist, könntest Du für jede Tabelle eine View anlegen, in der Du alle Spalten zu einer zusammenfaßt:

create view BroschuerenSuche as
select
  ID, 
  isnull(Name, '') + cast(Preis as varchar(50)) + isnull(Pnr, '') as Suchfeld
from
  tbl_broschueren_broschuere


Und dann einfach auf die View selektieren:

select ID from BroschuerenSuche where Suchfeld like '%ce%' and Suchfeld like '%4235%'

Die Where-Bedingung mußt Du zwar immer noch selbst zusammenbauen, aber sie ist weniger aufwendig als die im Beispiel von Jack30lena, egal wieviele Spalten die Tabelle hat.

Allerdings hat meine Methode den Nachteil daß sie auch "spaltenübergreifende" Ergebnisse findet.
Z.B. den Suchbegriff "cel5" ("cel" von "Excel" und die 5 aus der Spalte danach).

Thema: Model First Approach mit embedded DB
Am im Forum: Datentechnologien

Mit Entity Framework, SQLite und MSSQL Compact kenne ich mich leider nicht genug aus um hier irgendeine qualifizierte Antwort beisteuern zu können, aber zu MSSQL Express kann ich was sagen, insbesondere hierzu:

Zitat von 7.e.Q
Jetzt bin ich inzwischen soweit, dass ich für den Database First Approach sogar MSSQL Express akzeptieren würde. Doch da stellt sich mir das selbe Problem in den Weg, wie bei MSSQL Compact Edition: kein brauchbares Management Tool.

MSSQL Express hat sogar ein sehr brauchbares Management-Tool, nämlich das gleiche SQL Server Management Studio das auch bei den "großen" Editionen vom SQL Server dabei ist.

Allerdings gibt es drei verschiedene Versionen vom SQL Server Express mit unterschiedlichem Funktionsumfang, und das Management Studio ist nicht bei allen dabei. Ich vermute mal, Du hast die Version ohne Management Studio erwischt.

Hier ist die Downloadseite bei Microsoft, inkl. Auswahl zwischen den 3 verschiedenen Versionen. Bei der linken fehlt das Management Studio, bei den beiden rechten ist es dabei.

Thema: [Microsoft SQL Compact 3.5 und Entity Framework] Beziehungen und Datentypen
Am im Forum: Datentechnologien

Wenn es pro Person mehrere Bilder geben soll, dann ist es schon richtig, das Ganze in 2 Tabellen aufzuteilen.
Du schreibst auch daß Du irgendwo eine "Primärschlüsselspalte = ID" hast, aber aus Deinem Text geht nicht hervor in welcher Tabelle die ist.

Es sollte eigentlich so aussehen: Deine Personentabelle braucht einen eindeutigen Schlüssel, auf den in der Bildertabelle verwiesen wird.

PersonId (Primärschlüssel)
Vorname
Nachname
BildId (Primärschlüssel)
PersonId (Fremdschlüssel)
Bild

Thema: Online Quellcodeverwaltung für private Projekte?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Anakin Skywalker
bei http://www.bitbucket.org kan man ein privates oder öffentliches Repository anlegen. Hier wird Mercurial genutzt. Ich meine gelesen zu haben, dass auch mittlwerweile SVN möglich ist.

Es ist auf jeden Fall ein Mercurial-Repository, aber man kann von außen per Subversion darauf zugreifen (Quelle).

Thema: Online Quellcodeverwaltung für private Projekte?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ansonsten halt die üblichen Verdächtigen, sofern es um Open Source geht:

  • CodePlex (Mercurial, Subversion, Team Foundation Server)
  • Google Code (Mercurial, Subversion)
  • GitHub (Git) Open Source kostenlos, private Repositories gegen Aufpreis

Thema: Versionsnummer für mehrere Projekte in einer Solution automatisch vergeben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wenn ich mir die Frage so durchlese, bin ich mir nicht ganz sicher, was genau Dein eigentliches Problem ist.
Geht es darum...

a) daß die Versionsnummer bei jedem Build automatisch erhöht wird?
b) daß die Versionsnummer nur an einer einzigen Stelle in Deiner Solution liegt, so daß Du nur diese eine Stelle ändern mußt und die Änderung sich auf alle 20 Projekte auswirkt?

Falls es b) ist:
Du kannst irgendwo in Deine Solution eine zentrale .cs-Datei einfügen und die in allen Projekten verlinken.
In diese zentrale Datei kannst Du dann beliebig viele der Attribute schreiben die normalerweise in jedem Projekt in der AssemblyInfo.cs stehen würden.
Du mußt die Attribute die Du in die zentrale Datei schreibst bloß einmalig aus den ganzen AssemblyInfo.cs in den Projekten löschen.
Die Arbeit muß man sich einmalig machen, aber dafür braucht man ab sofort nur noch diese eine zentrale Datei ändern und alle Projekte ziehen sich die Daten aus dieer Datei.


Hier ist ein Link wo das alles inkl. genauer Vorgehensweise nochmal beschrieben wird:
Sharing a common AssemblyInfo between projects in a solution

Thema: Datenbank wird nicht befüllt
Am im Forum: Datentechnologien

Nein, FZelle meint bestimmt was anderes:

Wir glauben Dir daß Du nur eine Datenbank hast, aber Du hast die bestimmt in Deiner Projektmappe eingebunden und so eingestellt, daß sie beim Kompilieren & Debuggen in den Ausgabeordner kopiert wird.
Richtig?

Wenn ja, dann hast Du nämlich folgendes Verständnisproblem:

  1. Du startest den Debugger mit F5, und Dein Programm wird kompiliert und zusammen mit der Datenbank in den Ordner bin/debug (Ausgabeordner!) kopiert.
  2. Dein Programm läuft in diesem Ordner und fügt den Datensatz ordnungsgemäß ein, aber natürlich in die Kopie der Datenbank, die dort liegt, und nicht in die originale in der Projektmappe.
  3. Nachdem das Programm gelaufen ist, schaust Du in die originale DB in Deiner Projektmappe und findest den Datensatz dort nicht - aber der ist ja auch nicht dort eingefügt worden, sondern in die Kopie der DB im Ordner bin/debug!

Thema: DI/IoC in der Praxis (und korrekter Aufbau der zugehörigen Klassen)
Am im Forum: Rund um die Programmierung

Jetzt wo Du es geschrieben hast leuchtet es mir ein und ich verstehe es.
Es ist auch nicht so schwer zu verstehen...es muß einem einfach nur mal einer sagen.

Also:


    public class WinFormFactory : IWinFormFactory
    {
        private readonly IContainer container;

        public WinFormFactory(IContainer container)
        {
            this.container = container;
        }

        public T GetForm<T>()
        {
            return (T)container.Resolve<T>();
        }
    }


    public partial class MainForm : Form
    {
        private readonly IWinFormFactory factory;

        public MainForm(IWinFormFactory factory)
        {
            this.factory = factory;
            InitializeComponent();
        }
    }


    static class Program
    {
        static void Main()
        {
            var container = new Container();
            container.Register<MainForm>();

            Application.Run(container.Resolve<MainForm>());
        }


Dann kann ich hinterher irgendwo im MainForm folgendes machen:

        private void Button1_Click(object sender, EventArgs e)
        {
            var form = this.factory.GetForm<PopupForm>();
            form.Show();
        }

So habt ihr das gemeint, oder?

Zusätzliche Frage:
Ich habe in dem Code oben jetzt keine Interfaces für die WinForms benutzt, sondern benutze direkt die Forms selber.

Also nicht:

container.Register<IMainForm, MainForm>();
container.Resolve<IMainForm>();

sondern:

container.Register<MainForm>();
container.Resolve<MainForm>();

Macht es Sinn für die Forms auch Interfaces zu benutzen? Bei anderen Sachen (Repositories usw.) ist der Sinn klar, aber bei Forms habe ich es weggelassen weil ich den Sinn nicht sehe.
Ich möchte ja nicht zur Laufzeit das MainForm austauschen können o.ä., sondern ich benutze den Container nur damit das Form automatisch seine Abhängigkeiten bekommt.

Thema: DI/IoC in der Praxis (und korrekter Aufbau der zugehörigen Klassen)
Am im Forum: Rund um die Programmierung

Ich fürchte, ich habe es immer noch nicht verstanden.

Wenn ich die Forms mit container.Resolve<Mainform>() öffne, dann brauche ich doch an JEDER Stelle, wo ich ein Form öffne, einen Service-Locator-Aufruf.

Peter schreibt, es können "ggf. ein paar Service Locator-Aufrufe" sein.
Bei dem Beispiel mit den WinForms klingt mir das in einer größeren Anwendung aber eher nach hunderten Service Locator-Aufrufen.

Und die sind auch noch kreuz und quer über die ganze Anwendung verteilt (vom Startform öffne ich ein Form mit einer Auftragsliste, von dort aus ein neues mit Details zu einem bestimmten Auftrag, von dort ein neues mit Details zu einer einzelnen Position...)


Jetzt könnte ich natürlich den Container irgendwie kapseln damit ich nur noch ein einer einzigen Stelle wirklich direkt den Container benutze.
Aber ob jetzt an 100 Stellen im Code container.Resolve<IForm>() steht, oder GlobaleWinFormFactory.Create<IForm>(), das macht auch keinen großen Unterschied.
Ich habe dadurch eigentlich nur eine fest verdrahtete Abhängigkeit durch eine andere ersetzt.

Das kann doch nicht der ganze Trick sein, oder?

Thema: Query mit langer WHERE-Clause wie verkürzen
Am im Forum: Datentechnologien

Manchmal hilft auch folgendes:

Temporäre Tabelle erstellen, nur mit einer Spalte für die ID-Werte:

create table #tmp
(
    ID int
)

Alle IDs nach denen gesucht werden soll dort einfügen:
insert into #tmp values (1)
insert into #tmp values (2)
usw.

Und dann bei der eigentlichen Abfrage die Temptabelle auf die richtige joinen:
select tbOrders.Spalte1, tbOrders.Spalte2, ...
from tbOrders
inner join #tmp on tbOrders.ID = #tmp.ID

So werden nur die Datensätze mit den IDs gefunden die in der Temptabelle stehen.
Ob's was für die Performance bringt kann man so pauschal nicht sagen...ist aber einen Versuch wert.

Thema: Continuous Integration / Continuous Deployment: Welches Produkt verwenden?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wir benutzen Mercurial als Versionsverwaltung und TeamCity (die kostenlose Edition) als CI-Server.

Wir haben gar keinen anderen CI-Server ausprobiert - am meisten liest man über TeamCity und CruiseControl.net, und als ich gelesen habe daß CC.net per XML konfiguriert wird und TeamCity eine richtige UI hat, habe ich mich dafür entschlossen TeamCity als erstes auszuprobieren. Und dann bin ich direkt dabei geblieben

Thema: Project Hosting für Closed-Source Projekte
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von haarrrgh
Wenn Du Mercurial statt Git benutzt, kriegst Du bei BitBucket ein privates Repository plus 1 GB Platz umsonst.

Ich sehe gerade daß meine Aussage nicht mehr ganz stimmt - in der Zwischenzeit ist BitBucket von Atlassian übernommen worden, und die Tarife haben sich geändert.

Ab sofort gibt es grundsätzlich unbeschränkten Speicherplatz, sowie unbeschränkt viele private UND öffentliche Repositories.
Der einzige Unterschied ist die Anzahl der User die auf private Repositories zugreifen kann: bis 5 User sind kostenlos, bei mehr kostet es je nach Userzahl zwischen 10$ und 80$ pro Monat.

http://bitbucket.org/plans

Thema: Report Builder 3.0 + Kopf und Fußzeilen
Am im Forum: Datentechnologien

Meintest Du mich?
Nein, ComponentOne hatte ich vorher noch nie gehört - hatte ich mir vor einem halben Jahr demzufolge auch nicht angesehen
Jetzt ist es aber auch nicht mehr wichtig...wir haben ja schon Stimulsoft gekauft.

Thema: Report Builder 3.0 + Kopf und Fußzeilen
Am im Forum: Datentechnologien

Hallo Hampy,

wir haben Stimulsoft Reports gekauft.
Hatte ich vorher nie gehört, aber ich hatte mir diverse Reportgeneratoren runtergeladen und ausprobiert und der konnte am meisten (das war zumindest mein Eindruck).
Wir haben ihn jetzt ca. ein halbes Jahr (haben wg. Zeitproblemen aber noch nicht soviel damit gemacht), aber bis jetzt sind wir sehr zufrieden damit.

Dazu muß man aber auch noch sagen was unser Auswahlkriterium war:
Wir haben hier eine sehr umfangreiche Access 2003-Inhousesoftware die wir Schrittchen für Schrittchen nach .net migrieren, deshalb müssen wir die (vielen) vorhandenen Access-Berichte erstmal 1:1 in .net nachbauen.
Der in Access eingebaute Reportgenerator ist sehr mächtig und bietet ziemlich viele Möglichkeiten - WIE mächtig er tatsächlich ist, das ist mir erst so richtig klargeworden als ich einen Reportgenerator für .net gesucht und mir erstmal MS und Crystal angesehen habe - mit denen habe ich nämlich viele Sachen nicht hingekriegt, die in Access problemlos gingen.

Ich zähle einfach mal ein paar auf, die mir aus dem Stegreif einfallen.
Da es ein halbes Jahr her ist habe ich teilweise nicht mehr im Kopf welche dieser Features bei welchem Berichtsgenerator nicht gingen.
In Stimulsoft ging das auf jeden Fall alles problemlos, das ist der springende Punkt

  • das Seitenkopf-/Seitenfußproblem das Du auch hattest
  • Textfelder mit u.U. SEHR langen Hinweistexten, die sich zur Laufzeit so vergrößern daß der ganze Text reinpaßt UND dabei noch korrekte Seitenumbrüche über mehrere Seiten machen
  • Endlosberichte mit "endlosen" Grafiken, deren Pfade aus der Berichts-Datenquelle kommen
  • Controls auf dem Bericht zur Laufzeit per Code verändern (Größe ändern, sichtbar/unsichtbar, verschieben)...auch in Endlosberichten


Hier ist noch ein Link zu einer Liste mit Features von Stimulsoft (insgesamt 5 oder 6 Seiten).

Ach ja, und den Support fand ich auch sehr gut. Die haben ein Forum, und auch als Benutzer der Demoversion haben die mir da immer geholfen wenn ich Fragen hatte.

Thema: Report Builder 3.0 + Kopf und Fußzeilen
Am im Forum: Datentechnologien

Hallo Campy,

das gleiche Problem hatten wir mit den Reporting Services auch, und wir haben dafür auch keine Lösung gefunden (war allerdings noch die Version von SQL Server 2005...2008 haben wir gar nicht erst ausprobiert).

Deshalb haben wir uns dafür entschieden, einen anderen Berichtsgenerator zu nutzen.

Thema: SQL Server 2005 (Testserver) blockiert System
Am im Forum: Datentechnologien

Im SQL Server Management Studio ein Abfragefenster öffnen und dann oben im Menü:
"Abfrage" --> "Tatsächlichen Ausführungsplan einschließen"
(oder Strg + M drücken)

Dann führst Du die Abfrage aus, und dann ist unten wo das Abfrageergebnis zu sehen ist noch ein Tab namens "Ausführungsplan", siehe Screenshot.

Das Beispiel auf meinem Screenshot ist natürlich ganz simpel weil ich nur aus einer Tabelle selektiere, aber bei einer JOIN-Abfrage siehst Du da alle Tabellen, inkl. Informationen welche Tabelle wieviel % des Aufwands verursacht hat.

"Table Scan" wie auf meinem Screenshot ist z.B. schlecht...das bedeutet daß es keinen Index auf dem entsprechenden Feld gibt und der Server deshalb die ganze Tabelle durchsuchen muß.

Thema: Software-Entwickler/in zur Festanstellung in Köln
Am im Forum: Jobbörse

Wir sind ein dynamisches, modern geführtes mittelständisches Unternehmen in Köln mit ca. 200 Mitarbeitern und erstellen in Einzelfertigung textilen Sonnenschutz/Wintergartensysteme des gehobenen Bedarfs für den Endnutzer.

Auf der Grundlage unseres soliden wirtschaftlichen Erfolgs und vor dem Hintergrund von Kundenorientierung, Marktgespür und Flexibiltität expandieren wir weiter und suchen zur Verstärkung unserer Abteilung IT den/die versierte(n) Software-Entwickler(in).

Wir erwarten Erfahrungen/Kenntnisse :

  • In objektorientierter Programmierung
  • des .NET-Framework (VB.NET, C#, ASP.NET) sowie Visual Studio
  • mit Standards und Technologien der Internet-Programmierung (HTML, JavaScript, AJAX, XML, idealerweise Kenntnisse in jQuery)
  • von T-SQL auf Basis von SQL Server 2005 oder SQL im Umfeld relationaler Datenbanken
  • der Implementierung serviceorientierter Architekturen (insbesondere auf Basis der Microsoft-Technologien)
  • Kenntnisse in NHibernate, ASP.NET MVC, Test Driven Development sind von Vorteil

sowie persönliche Fähigkeiten/Vorraussetzungen:
  • Idealerweise eine entsprechende Microsoft Zertifizierung
  • die Fähigkeit, sich schnell in komplexe Zusammenhänge einzuarbeiten
  • in Ihrem Vorgehen sind Sie analytisch und strukturiert
  • Teamarbeit macht Ihnen Spaß, und Sie gehen offen mit anderen Menschen um
  • Gute Englischkenntnisse (fließend in Wort und Schrift)

Das bieten wir:
  • flexible Arbeitszeiten/Arbeitszeitmodelle
  • regelmäßige Weiterbildungen
  • 35 Stunden-Woche
  • 30 Urlaubstage
  • diverse soziale Leistungen
  • einen sicheren Arbeitsplatz in einem dynamischen, solide wachsenden Unternehmen
  • kurze Entscheidungswege in einem inhabergeführten Familienunternehmen
  • eine offene Führungskultur

Wenn Sie an dieser vielseitigen Tätigkeit in einem zukunftsorientierten Unternehmen interessiert sind, senden Sie Ihre vollständigen Bewerbungsunterlagen bitte an:

weinor GmbH & Co. KG
Andreas Fricke
Mathias-Brüggen-Straße 110
50829 Köln
andreas.fricke@weinor.de

Thema: DI/IoC in der Praxis (und korrekter Aufbau der zugehörigen Klassen)
Am im Forum: Rund um die Programmierung

Aaaahh...JETZT hat es bei mir "Klick" gemacht.
Vielen Dank an euch alle!

Mir war einfach nicht klar daß die pauschale Aussage "Service Locator sind böse" sich nicht auf den grundsätzlichen Gebrauch von Container.Resolve bezieht, sondern nur darauf, Container.Resolve direkt in allen Klassen zu benutzen anstatt die Abhängigkeiten über den Konstruktor zu übergeben.


Eine Frage habe ich in dem Zusammenhang aber trotzdem noch:

Zitat von Peter Bucher
Bei der impliziten Anwendung geht es darum, das du an einem Ort ein container.Resolve<IFoo>() drin hast. Das kannst du dir als Resolution-Root vorstellen, also die Wurzel, wo die Auflösung beginnt.

Gibt es im Normalfall immer nur EINEN Resolution Root, oder viele?

Peter hat als Beispiel den Controller einer ASP.NET MVC-Anwendung genannt, aber mit ASP.NET MVC kenne ich mich nicht wirklich aus. Kommt man da wirklich mit einer einzigen Stelle in der ganzen Anwendung aus wo Container.Resolve benutzt wird?

Meine ersten Gehversuche mit DI/IoC mache ich gerade in Winforms-Anwendungen, und wenn ich da z.B. in mehreren verschiedenen Forms einen AuftragService brauche, wie komme ich an den?

In jedem Form Container.Resolve?

Für die Forms Interfaces schreiben, IAuftragService als Konstruktorparameter übergeben und das Winform an sich per Resolve erzeugen? (aber dann habe ich auch wieder an jeder Stelle wo ich ein Form lade Container.Resolve stehen)

Oder schreibe ich eine AuftragServiceFactory die intern Container.Resolve<IAuftragService> ausführt und benutze die überall?

Oder ist es gar nicht so schlimm wenn ich an X Stellen in der Anwendung direkt Container.Resolve aufrufe, solange es nur in der Infrastruktur und UI passiert und nicht in den eigentlichen Domain-Objekten?

Thema: Project Hosting für Closed-Source Projekte
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wenn Du Mercurial statt Git benutzt, kriegst Du bei BitBucket ein privates Repository plus 1 GB Platz umsonst.

http://bitbucket.org/plans