Laden...
T
tkrasinger myCSharp.de - Member
Softwareentwickler Enzesfeld (Niederösterreich) Dabei seit 26.03.2008 574 Beiträge
Benutzerbeschreibung

Forenbeiträge von tkrasinger Ingesamt 574 Beiträge

04.11.2008 - 06:56 Uhr

Hab heute früh diesen Artikel zugemailt bekommen: (kenn den Absender aber nicht)

http://www.infoq.com/news/2008/11/DLINQ-Future

Siehe dazu auch: Diskussion in MSDN-Forum

03.11.2008 - 14:47 Uhr

Darf ich fragen, wie viel Erfahrung die Kollegen haben und wo und wann sie Programmieren gelernt haben?

Also den den wir gekündigt hatten, der hatte 4 Jahre Erfahrung im .NET Bereich. Wie er das so lange geschafft hat und wo er das (nicht) gelernt hat, keine Ahnung.

Sonst haben wir im Moment ein paar Leute aus der schule und ein paar Umsteiger.

Leider alle mit relativ wenig Erfahrung ... -> Siehe dazu auch: Wien: .NET Entwickler gesucht

03.11.2008 - 13:48 Uhr

ähem, sorry ... was einem doch so ein Fehler doch irreleiten kann und wie blind man nicht ist.

Der Unterschied lag tatsächlich im Config. und zwar hab ich mich wohl irgendwann mal vertippt und hatte in dem anderen einmal nur value=true" stehen statt value="true"

Der Fehler hat mich nur total verwirrt ...

03.11.2008 - 13:28 Uhr

Ich hab ein Problem, dass ich nicht versteh. Ich hab am Exchange 2 Ordner AG und IB, in beiden liegt eine Anwendung die täglich aufgerufen wird. In dem einem Ordner funkts im anderen nicht. Beide werden vom selben User aufgerufen. Ich hab alles (mit ausnahme des Configs, weil da ein anderen Conn-String steht) vom AG-Ordner in den IB-Ordner kopiert, die Anwendungen sind also komplett gleich.

Trotzdem krieg ich im IB folgenden Fehler:

Event Type: Error
Event Source: .NET Runtime 2.0 Error Reporting
Event Category: None
Event ID: 5000
Date: 03.11.2008
Time: 13:16:27
User: N/A
Computer: SRV-EXCH-1
Description:
EventType clr20r3, P1 zeiterfassungsservice.exe, P2 1.0.0.0, P3 4900273b, P4 activecustomexceptionlogging, P5 1.0.0.0, P6 48fc6524, P7 9, P8 1, P9 system.typeinitialization, P10 NIL.

Das ist irgendeine FileLoad - IO-Exception weil er angeblich ein Assembly nicht laden kann. Ich hab aber überhaupt keinen Plan warum. Die .dll ist in der richtigen Version und Sprache und liegt im selben Ordner.
Und wie gesagt, im anderen Ordner funkt das.

03.11.2008 - 13:23 Uhr

Etwas konnte ich meinen Leuten schon abgewöhnen. Also:

if( SomeMoreComplexBool )
   return true;
else
   return false;

schreiben die nicht mehr, da wird brav:

return SomeMoreComplexBool; 

geschrieben, allerdings geht das nur in dem Fall, andersrum leider noch ned ganz ...

return (SomeMoreComplexBool) ? false : true;

das man da den ! Operator nehmen könnte ham die meisten noch ned überrissen ...

03.11.2008 - 08:47 Uhr

Ts, also das ist von einem Ex-Kollegen (hab durchgesetzt ihn zu kündigen):

http://www.krasinger.at/public/nc_6.jpg
http://www.krasinger.at/public/nc_7.jpg

31.10.2008 - 12:35 Uhr

Hab wieder mal ein paar ganz einfache Tests gemacht (Release Mode):

using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            TestClass test = new TestClass();
            test.Run();
            Console.Read();
        }
        public class TestClass
        {
            protected List<string> _lst = new List<string>();
            public void Run()
            {

                for (int i = 0; i < 1000000; i++)
                {
                    _lst.Add("Item:" + i.ToString());
                }

                FindItem_ByContains("Item:33");
                FindItem_ByForeach("Item:33");
                FindItem_ByForeachWithEquals("Item:33");
                Console.WriteLine("");
                FindItem_ByContains("Item:3333");
                FindItem_ByForeach("Item:3333");
                FindItem_ByForeachWithEquals("Item:3333");
                Console.WriteLine("");
                FindItem_ByContains("Item:33333333");
                FindItem_ByForeach("Item:33333333");
                FindItem_ByForeachWithEquals("Item:33333333");
                Console.WriteLine("");
                FindItem_ByContains("Item:888888");
                FindItem_ByForeach("Item:888888");
                FindItem_ByForeachWithEquals("Item:888888");
                Console.WriteLine("");
                FindItem_ByContains("Item:2");
                FindItem_ByForeach("Item:2");
                FindItem_ByForeachWithEquals("Item:2");
                Console.WriteLine("");
                FindItem_ByContains("x");
                FindItem_ByForeach("x");
                FindItem_ByForeachWithEquals("x");
            }

            public bool FindItem_ByContains(string item)
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                bool found = _lst.Contains(item);
                sw.Stop();
                Console.WriteLine("FindItem_ByContains: " + item + " " + found + " in " + sw.ElapsedMilliseconds + "ms (" + sw.ElapsedTicks + ")");
                return found;
            }
            public bool FindItem_ByForeach(string item)
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                bool found = false;
                foreach (string x in _lst)
                {
                    if (x == item)
                    {
                        found = true;
                        break;
                    }
                }
                sw.Stop();
                Console.WriteLine("FindItem_ByForeach: " + item + " " + found + " in " + sw.ElapsedMilliseconds + "ms (" + sw.ElapsedTicks + ")");
                return found;
            }

            public bool FindItem_ByForeachWithEquals(string item)
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                bool found = false;
                foreach (string x in _lst)
                {
                    if (item.Equals(x))
                    {
                        found = true;
                        break;
                    }
                }
                sw.Stop();
                Console.WriteLine("FindItem_ByForeachWithEquals: " + item + " " + found + " in " + sw.ElapsedMilliseconds + "ms (" + sw.ElapsedTicks + ")");
                return found;
            }
        }
    }
}

Dabei sind mir ein paar interessante Sachen aufgefallen die bei mir einige Fragen aufgetan haben:

Das das ForEach mit dem == langsamer ist als der Rest war zu erwarten, was mich erstaunt ist, dass das ForEach mit dem Equals() teilweise (nicht immer!) schneller ist als das Contains.
Weiß wer, wie das Contains intern implementiert ist?

Gibt es diesbezüglich Richtlinien oder Empfehlungen was in Fällen dieser Art zu verwenden ist? Kann man sagen Equals() ist generell besser als == ?

31.10.2008 - 10:02 Uhr

Du kannst nicht ein Programm für einen anderen bereits angemeldeten Benutzer starten, das geht nicht und macht keinen Sinn.

Wer redet davon? Ich will eigentlich nur ein Programm unter einem anderen User starten. Keiner sagt was davon dass der angemeldet ist - von dem Thema bin ich schon weg.

Ich hab ein ganz einfaches Anwendungsbeispiel: Eine WebSeite mit einem Admin-Zugang und über den Admin-Zugang kann man ein Programm starten, dass am Server irgendwas startet. Dieses Programm muss aber von einem speziellen User gestartet werden, da nur diese die Rechte hat.

Also muss ich über Process.Start() dieses Programm starten. Warum sollte das nicht gehen? Das muss doch gehen oder?

31.10.2008 - 09:07 Uhr

Die laufende Anwendung ist klar, aber selbst wenn ich jetzt aus der WebSeite heraus eine Anwendung starte, läuft die unter dem ASP.NET User.

Ich mein das muss doch auch irgendwie funktionieren dass ich einen Prozess unter einem anderen User starte.
Ich kann beim Process.Start() ja auch Informationen über einen User mitgeben, allerdings krieg ich dann immer eine Exception.

31.10.2008 - 08:28 Uhr

Hab das ganze jetzt schon anders gelöst ...

Was mich aber nur verwundert ist, dass selbst wenn ich ein impersonate angebe und ich in der Page tatsächlich den User sehe, dass ich wenn ich einen Prozess starte, den unter dem ASPNET User starte.

30.10.2008 - 12:48 Uhr

Ich hab eine Anwendung mit der ich Winamp ansteuere. Eine hilfreiche Klasse dazu hab ich im Netz gefunden.

Das ganze Teil verwendet PInvokes aus der user32.dll - In erster Linie "FindWindow".

Das ganze funktioniert als WinForms-Anwendung tadellos und auch wenn ich das ganze in eine ASP.NET Anwendung reinschieb und über den integrierten VS-IIS laufen lasse, funktioniert es.

Sobald ich aber die Anwendung tatsächlich am lokalen IIS laufen lasse (also nicht über den VS integrierten WebServer), find ich das Window einfach nicht mehr!?

30.10.2008 - 12:06 Uhr

Habs gefunden:
Windows-Firewall-Einstellungen - Erweiter - Unter "Netzwerkverbindungseinstellungen" bei der eingehenden Verbindung (in meinem Fall LAN) auf "Einstellungen" und dort "WebServer HTTP" aktivieren.

30.10.2008 - 11:45 Uhr

Also folgendes hab ich jetzt geschafft:

Ich kann vom Handy den Router pingen, ich kann immer noch ins Internet.
Ich kann auch vom PC das Handy pingen! Aber nicht umgekehrt - anscheinend blockt der Rechner irgendwas.

-> Windows-Firewall am PC, Erweitert, ICMP, Eingehende Echoanforderungen aufgedreht.
So nun geht auch das Pingen vom Handy auf den Rechner, das ändert aber noch nix daran, dass ich die WebSeite ned aufrufen kann. Irgendwer eine Ahnung was jetzt noch fehlt?
(Das Pingen zulassen hab ich wieder abgedreht)

Das hab ich jetzt aus dem Firewall-Log:

2008-10-30 11:59:53 DROP TCP 192.168.0.88 192.168.0.2 1132 80 48 S 130824055 0 32768 - - - RECEIVE

30.10.2008 - 09:32 Uhr

verwendetes Datenbanksystem: <SQLServer 2005, ADO.NET EntityFramework>

Ich hab ein bissl mit dem EF herumgespielt und eine kleine DB eingelesen und daraus das Modell erstellt. Ich finde jetzt jede Menge Artikel, die sich damit beschäftigen wie man Änderungen in der DB ins Modell reinbekommt (Context-Menu: "Update Model from Database).
Wie aber krieg ich eine Änderung in die Datenbank? Ich hab eine Klasse im Designer hinzugefügt und wie erstell ich jetzt daraus die Tabelle?

Ich hab jetzt zum Testen auch ein leeres Modell erstellt, eine Klasse im Designer erzeugt. Nun steh ich vor dem Problem: Wie krieg ich das in die DB? Irgendwie fehlen mir da ein paar Funktionen ...

Bitte um Hilfe.

30.10.2008 - 09:12 Uhr

hab jetzt von unserem SysAdmin noch eine MA311-PCI-Karte bekommen, aber mit der hab ich genau das selbe Problem.

Ich hab jetzt den Kanal auf 3 umgestellt. Im Haus gibts sonst nur mehr ein weiteres Netz das auf 11 läuft.

Was mir der Networkstumbler bringt weiß ich ned genau, viel seh ich da nicht. Bei der Netgear-Software die dabei war beim MA311 hat er mir dann Signal-Strength etwa 90% angezeigt und Quality eigentlich durchwegs 100% - Also am Signal selbst kanns nicht liegen.

28.10.2008 - 11:29 Uhr

es gibt ein paar tools, die wlanverbindungen stabilisieren können. hast du evtl viele störquellen zwischen router und stick? evtl viele stromkabel usw?

Naja, also neben dem Router stehts Telefon - schließlich ist nun mal der Telefon-Anschluss dort. Dazwischen gibts eigentlich nix und Kabelmäßig eigentlich nur das was halt der Router und das Telefon, sowie halt der PC brauchen, also nicht wirklich was arg störendes.

28.10.2008 - 11:10 Uhr

--> Siehe auch: DSL Geschwindigkeit

Ich hab bei mir folgendes Problem festgestellt. Vom ISP hab ich eine 4Mbit Leitung.

Ich hab bei mir einen WLAN Router zwischengeschalten (alter Netgear MR814v2). Und einen WLAN Stick (MA111) dazu. Die sollten eigentlich bis 11Mbit gehen.

Der ISP bietet einen Speedtest an. Wenn ich mich über LAN zum Router connecte komm ich auf die 4Mbit. Übers WLAN schwank ich ganz arg zwischen 0.1und max 1Mbit.
Der Rechner steht grad mal 1.5m vom Router weg, ohne irgendein Hindernis und ich hab auch (lt WinXP) volle Verbindungsqualität.

An was kann das liegen dass ich a) diese Schwankungen hab und b) natürlich viel zu wenig Leistung - schließlich nutz ich von den 11Mbit dann ja fast gar nix.

Ist da jetzt echt der Router im Eimer? Einen neuen wollt ich mir sowieso bald kaufen, weil ich des Teil (WLAN-USB-Stick) im Vista einfach ned zum laufen krieg, aber ist da jetzt wirklich der Router kaputt oder nur falsch konfiguriert?
Hat wer Links auf Tools zum Testen der WLAN-Performance?

28.10.2008 - 10:37 Uhr

Hm, wieder mal ein Grund vielleicht mal in mein Vista daheim anzuwerfen ...

Aber im Büro hab ich XP - aber genau sowas mein ich. Gibts das irgendwie für den XP-Explorer?

28.10.2008 - 10:16 Uhr

In den diversen FileDialogen kann man ja DateiFilter einstellen und der Dialog zeigt dann nur Ordner und eben die Dateien die den Filter matchen.

Weiß jemand, ob es sowas vielleicht für den normalen Explorer als Extension gibt? Wenn ich z.B nach nem Excel in einem Ordner suche muss ich jetzt: a) über die Suche gehen b) nach Typ ordnen und dann erstmal Excel finden ...

Irgendwie wär das nett, wenn's man da gleich irgendwie so wie im File-Dialog filtern könnte.

28.10.2008 - 08:18 Uhr

Ich hab auf meinem lokalen Rechner eine WebSeite laufen. Ich möchte nun über mein Handy (MDA Vario II) auf diese WebSeite meines Rechners zugreifen.

Beide hängen im WLAN und beide können ins Internet - also die Verbindung im WLAN selbst funktioniert.

Ich komm aber nicht vom Handy auf den Rechner.
Wenn ich vom Handy http://192.168.0.4/MyWebSite ansurfen probier bekomme ich jedesmal: "Die Seite kann nicht angezeigt oder gedownloadet werde, da die Verbindung unterbrochen wurde. Überprüfen Sie die Verbindung und versuchen Sie es erneut."

wenn ich angeb: file://\192.168.0.4 bekomm ich: "Der Netzwerkpfad wurde nicht gefunden"

Welche Einstellungen fehlen mir wo (Handy, Router, Rechner?) noch, damit das funktioniert?

24.10.2008 - 08:57 Uhr

also "angefangen" hab ich wie jemand vorher schon auch mit "QBasic for DOS" - aber ich glaub nicht dass man das Programmieren nennen kann. Das waren Tausende Zeilen Code ohne jegliche Struktur die in wirklichkeit praktisch nichts konnten.

Richtig losgegangen ist es dann so:

C,C++, C (Linux), Assembler, HTML/CGI, VB, COBOL, SQL, MVC, XML, ASP ... .NET 1.1/C# + folgende ...

22.10.2008 - 15:45 Uhr

ps: "fileDialog.SafeFileNames" gibt es im FileOpenDialog nciht.....

Je nee is klar. Natürlich gibt es das!!!

wo er recht hat, hat er recht. Zumindest gilt das für .NET 2.0. Da gibts SafeFileName und SafeFilenames.

22.10.2008 - 15:22 Uhr

Mein gott

FileName oder wenn du mehrere Files aussuchen darfst FileNames

aber das ist wirklich zu finden ...

22.10.2008 - 15:20 Uhr

Ich kann zwar nicht sagen was performance-technisch das beste wär, aber ich würd das schreiben:

SELECT * FROM tbl_Kunde WHERE Kunde_ID NOT IN ( SELECT Tel_Kunde_Id FROM tbl_Telefon)

22.10.2008 - 11:04 Uhr

Danke für den Vorschlag, genau diese Einstellung hatte ich auch schon. Wie sieht denn bei dir der Connection String aus?

Nicht viel anders:

<add name="DefaultConnection" connectionString="Database=LeerEgonLive;Server=localhost;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
22.10.2008 - 10:08 Uhr

Ich würd mal - von der SQL Anbindung - abgesehen, testen ob du überhaupt mit dem richtigen Windows-User läufst, oder tatsächlich irgendwie in den anonymen fällst. Also erstell dir mal eine Form und ruf den User ab: [Page].User.Identity.Name. Wenn da schon der falsche User drinnen ist (bzw. gar keiner) hats was an den Einstellungen.

Ich hab bei mir im inetmgr folgendes eingestellt:

[aus] Anonymer Zugriff
[aus] Standardauth...
[aus] Digest ...
[ein] Integrierte Win-Authentifizierung

web.config:

<authentication mode="Windows"/>
<authorization>
	<allow users="*"/>
</authorization>
<identity impersonate="true"/>

Probierst du jetzt eigentlich im Moment direkt vom Service was aufzurufen (also z.b. über das einfache WebService-Frontend vom IIS), oder schon über ein Programm das das WebService benutzt?

22.10.2008 - 08:31 Uhr

Hast du auch die Integrierte Win-Auth eingeschalten und nicht nur den Anonymen aus?
Und hast du im web.config die Authentifizierung auf Windows geschalten?

14.10.2008 - 14:57 Uhr

Also mal ein paar Erklärungen und ein paar Danksagungen:

Danke an Herbivore (und in Folge zommi): Die Abs-Variante hab so nicht bedacht. Dann geht die Variante nämlich gar nicht zu berechnen. (hmpf aber eh besser, die ursprüngliche Variante dürfte sowieso besser sein)

Grundsätzlich hab ich diese Funktion gebraucht um die Differenz zweier so angegebenen Wochen zu ermitteln. Dafür musste ich einfach nur wissen ob die 2 Angaben das selbe Jahr betreffen, also tatsächlich nur der vordere Teil.
Dass ich diese in dieser Darstellung habe, liegt daran, dass ich teilweise am Server (SQL) auch damit arbeite (also vom Server krieg, und raufschick etc.). Und da tu ich mir (@zommi) mit Strukturen schwer.

Grundsätzlich geh ich also davon aus (Methode ist in Wirklichkeit private und eben nur bei der Diff-Berechnung eingesetzt), dass die Zahlen stimmen, also nur von yyyy01 bis yyyy52 gehen. Ich hab auch keine Woche 53 weil wir firmenintern alle Einstellungen so getroffen haben, dass es nur bis 52 geht (auch im Outlook, Zeiterfassung etc.). Die Einstellung ist so, dass die erste KW immer mit dem 1. Jan beginnt. Egal wann/wie/wo/wieviele Tage in welchem Jahr schon/noch liegen.
(Bitte um Beispiel, wenn jemand trotzdem noch eine 53er erzeugen kann)

Zur Zeile von zommi "die Ergebnisse deines Test sind garnicht so verwunderlich. Sowas könnte man auch am Code direkt sehen." - Klar.
Ich weiß es ja. Ich hab das (die Methode zu entwickeln) einem unserer Neulige als Beispielaufgabe zur Skillverbesserung gestellt. Dieser ist dann (wie geahnt) über die String-Variante gegangen. Mit dem Performance-Vergleich hab ich ihm gezeigt, was an dem Code "schlecht" (falsch is er ja ned) ist. Und dabei haben wir dann probiert ob es eine noch schnellere Viarante gibt, dabei bin ich dann auf die Abs-Variante gestoßen (das des jetzt ned geht is natürlich blöd). Wobei ich mir eigentlich anfangs dachte, dass die Abs Variante aufgrund des Overheads zum Aufrufen der Abs-Methode langsamer sein müsste. (Was sie im Release offensichtlich doch ist).

Im Release hab ich jetzt nämlich ca. 10-7200-50.
Also doch ein anderes Ergebnis als im Debug. Danke übrigens auch für die Info. Hab natürlich nicht daran gedacht, dass das im Release anders ausschauen kann.

Was ist daher die daraus resultierende Feststellung?
Strings sind langsam! (mal abgesehen von den ToString() die aufgerufen werden) Was man also mit Berechnungen machen kann ohne etwas umzuwandeln und OHNE eine Methode aufzurufen, sollte man auch so tun.

Daher ist für diese absolut dumme Methode die ich baue, die Variante über das durchdividieren die beste und schnellste. Auch wenn es auf den ersten Blick nicht ganz durchsichtig erscheint.

PS:
wieder @zommi, der zusätzliche Int-Cast dürfte wegoptimiert werden. Mit/Ohne ist die selbe Zeit.

14.10.2008 - 08:56 Uhr
[TestMethod(false)]
public bool PerformanceTest_1(TestContext testContext)
{
    StringBuilder sb = new StringBuilder();
    int weekVal1 = 200801;
    int weekVal2 = 200802;
    bool result = false;
    Stopwatch sw = new Stopwatch();
    sw.Start();
    for (int i = 0; i < 10000000; i++)
    {
        result = ((int)(weekVal1 / 100) == (int)(weekVal2 / 100));
    }
    sw.Stop();
    sb.AppendLine("With numbers:" + sw.ElapsedMilliseconds.ToString());
    sw.Reset();
    sw.Start();
    for (int i = 0; i < 10000000; i++)
    {
        result = weekVal1.ToString().Substring(0, 4) == weekVal2.ToString().Substring(0, 4);
    }
    sw.Stop();
    sb.AppendLine("With strings:" + sw.ElapsedMilliseconds.ToString());
    sw.Reset();
    sw.Start();
    for (int i = 0; i < 10000000; i++)
    {
        result = Math.Abs(weekVal1 - weekVal2) < 52;
    }
    sw.Stop();
    sb.AppendLine("With abs:" + sw.ElapsedMilliseconds.ToString());

    testContext.WriteLine(sb.ToString());
    return true;
}

Das Math.Abs ist etwa 7 mal schneller als die Rechen-Variante, die wiederum etwa 19mal so schnell ist wie die String-Variante.
Gibt es tatsächlich noch eine schnellere Variante?

(Hier gehts einfach drum zu lernen, welche Programmierungen besser, welche schlechter sind.)

09.10.2008 - 13:35 Uhr

Also beim coden meist nix, lenkt zuviel ab. Wenn dabei Musi dann irgendwas, was nebenbei plätschert. Also in meinem Fall wär das etwa Mystera, Enigma, Moby, überhaupt was Klassisches.

Sonst, also auf den Wegen von und zu Arbeit, alles quer Beet aus allen Richtungen + lokale Bands. Mein USB-Stick enthält zur Zeit etwa folgendes:

Amy Winehouse, Demian, Die Ärzte, Eminem, Enigma, Fall Out Boy, Linkin Park, Panic! at the Disco, The Incredible Fake, Justin Timberlake, Letzte Instanz, Lupe Fiasco, Moby, Mystera, Rihanna, R&B Clubmix 2007, Spooks, Sylver, Tatu, Texta, Timbaland, Timbaland & Magoo, Wir sind Helden (unplugged), + Jede Menge einzelner Tracks

09.10.2008 - 06:47 Uhr

Also bei uns in der Firma ist "DU" eigentlich üblich, es gibt ein paar wenige Ausnahmen (Vorstand, etc.)
Ich finde das auch gut so und für das Betriebsklima wichtig.

In meiner Tätigkeit als Consultant komm ich aber auch viel rum und hab schon so manches gesehen. Gut, in Österreich ist dieses Thema ja noch viel schlimmer, da redet man gewisse Leute ja auch nicht namentlich an, sondern mit Titel. Furchtbar ...

Habs mal erlebt, dass in einer IT-Abteilung, selbst die Leute die im selben Raum saßen, ich sprech von 5 Leuten, sich gesiezt haben.

Ich denke bis zu einer Größe von 100 Leuten sollte Du kein Problem sein, ab dann sieht man manche Leute so wenig, dass man sie gar nicht kennt, oft gibts dann auch klare Abteilungsgrenzen, da wird dann einfach Sie benutzt.

09.10.2008 - 06:40 Uhr

*Kopfschüttel*

Ich kann mir leider gar nicht erklären, wie man überhaupt auf solche Fragen kommt. Wenn ich was mit einem DateTime machen will, dann ist doch das erste was ich mir anschau, welche Methoden und Eigenschaften das DateTime zur Verfügung stellt, und dann muss mir doch gleich mal "AddDays" auffallen ... versteh ich ned.

08.10.2008 - 11:23 Uhr

Was heißt "du brauchst Rows"? Sicher hat die DataView Rows. Der Enumerator von DataView liefert eine DataViewRowCollection.

08.10.2008 - 10:59 Uhr

Also ausm Bauch heraus würd ich meinen, dass die Zuweisung der DataSource nicht stimmt.
Hast du schon mal probiert, dem DataGrid einfach nur die DataView zuzuweisen, und nicht die DataTable?

Wenn du die View sortierst, und der DataSource dann .Table zuweist, was soweit ich weiß die original-Tabelle ist, weil die View ja intern sortiert, bringt das irgendwie mal gar nix.

08.10.2008 - 10:54 Uhr
if (comboBox1.SelectedItem.ToString() != null)

sollte sein:

if (comboBox1.SelectedItem != null && comboBox1.SelectedItem.ToString() != null)
06.10.2008 - 09:29 Uhr

Wie soll ich das finden?

Die genannte Assembly kommt nicht von mir. Die wird anscheinend (oder eben halt nicht) irgendwo/irgendwie bei der Web-Service-Verbindung erstellt.
Wie kann ich rausfinden, wer dieses Assembly braucht?
(Brauchen tuts meine PresentationLayer wohl, sonst würd die ja ned den Fehler schmeißen ...)

04.10.2008 - 14:20 Uhr

Siehe zB:

if Abfrage auf mehrere Werte gleichzeitig prüfen?

oder ein Beispiel aus meinem Code:

if (Active.Utility.IsIn<string>(_currentPerson.Aktuell.BEARBKZ, "E", "N", "W"))
{
    _currentPerson.Aktuell.STATUS = "H";
}

Ich denke, dass man nicht immer alles in Listen hat, v.a. bei Prüfungen auf nur 2-3 Werte. Außerdem kannst du eine Liste übergeben:

List<short> lst = new List<short>();
lst.Add(50);
lst.Add(10);
lst.Add(20);
Assert.AreEqual(Active.Utility.IsIn<short>(50,lst.ToArray()), true);
04.10.2008 - 13:11 Uhr

Ich selbst halte mich (aufgrund der Vergleiche die ich bisher machen konnte) für einen sehr guten Programmierer, zumindest im .NET-Bereich - und ich hab unzählige Ideen für irgendwelche Programme. Leider hab ich absolut keine Zeit irgendwas von den privaten Ideen umzusetzten weil ich beruflich total eingespannt bin und in den spärlichen privaten Stunden gern was anderes machen würde.

Mein Problem bei den Ideen ist immer nur: In welcher Technologie mach ich das? Weil ich meist über die privaten Dinge probier - so wie du - irgendwas zu lernen.

D.h du solltest dich zuerst fragen, was du lernen willst und testen, welche deiner Ideen sich mit der gewählten Technologie umsetzen lässt oder ob du eine andere Technologie, oder eine andere Idee brauchst.
Wenn du dann was hast, besteht für mich der erste Schritt in Informationsbeschaffung. D.h. welche Möglichkeiten bietet die Technlogie, wie sehen Programme aus. Da muss man wohl das Geld für ein gscheites Buch löhnen.

Und dann einfach mal einen Aufbau überlegen, drauflos tippen. Meist 2 Wochen später alles refactoren, nochmal 100 Seiten nachlesen und irgendwann einmal das Gefühl kriegen - das ist cool, das Programm kann was.

(PS: Gar nicht viel nachdenken, ein halbes Jahr später ist die Technologie sowieso überholt, 10 andere Leute haben das gleiche geschrieben und in Wirklichkeit brauchst du's nicht mehr, aber: Du hast einiges gelernt!)

04.10.2008 - 12:37 Uhr

Beschreibung:

Prüft ob ein Wert in einer Liste von Werten enthalten ist. (Bekannt aus SqlServer).
Die tatsächliche Namensgebung In, IsIn, IsInList oder sonstwas überlass ich jedem selbst 😉


/// <summary>
/// Returns true if a given value is contained in a list of values
/// </summary>
public static bool IsIn<T>(T value, params T[] values) where T : IComparable
{
    if (values == null || values.Length == 0)
        return false;
    List<T> lst = new List<T>(values);
    return lst.Contains(value);
}

Tests dazu:

[TestMethod(true)]
public bool IsInTest(TestContext testContext)
{
    Assert.AreEqual(Active.Utility.IsIn<short>(50, 10, 20, 30, 40), false);
    Assert.AreEqual(Active.Utility.IsIn<short>(50, 10, 20, 30, 40,50), true);
    Assert.AreEqual(Active.Utility.IsIn<string>("B", "A", "B", "C"), true);
    Assert.AreEqual(Active.Utility.IsIn<string>("D", "A", "B", "C"), false);
    Assert.AreEqual(Active.Utility.IsIn<DateTime>(
        new DateTime(2008,1,1), new DateTime(2007,1,1), 
        new DateTime(2008,1,1), new DateTime(2009,1,1)), true);
    Assert.AreEqual(Active.Utility.IsIn<DateTime>(
        new DateTime(2006, 1, 1), new DateTime(2007, 1, 1),
        new DateTime(2008, 1, 1), new DateTime(2009, 1, 1)), false);
    Assert.AreEqual(Active.Utility.IsIn<short>(50), false);
    return true;
}

Schlagwörter: <In, In in C#, Wert in Liste>

PS: Als Extension Methode sollte es das sein: (kann ich leider nicht prüfen):

/// <summary>
/// Returns true if a given value is contained in a list of values
/// </summary>
public static bool IsIn<T>(this T value, params T[] values) where T : IComparable
{
    if (values == null || values.Length == 0)
        return false;
    List<T> lst = new List<T>(values);
    return lst.Contains(value);
}
03.10.2008 - 06:39 Uhr

also das gezeigte Beispiel halte ich für Schwachsinn.

Das geht einfacher über:

List<string> lst = new List<string>();
lst.ToArray();

für alles andere würd ich etwa sowas machen:

public class MyList<T> : List<T>
{
    public string[] ToStringArray()
    {
        string[] lst = new string[this.Count];
        for(int i = 0; i < this.Count; i++)
        {
            lst[i] = this[i].ToString();
        }
        return lst;
    }
}

wobei da natürlich noch Null-Wert-Behandlung etc. fehlt

02.10.2008 - 18:30 Uhr

Beim ersten Instanzieren meines WebService dass ich über die WebVerweise einfach reingehängt habe, kommt jedesmal und für jedes Service folgende Exception:

Die Datei oder Assembly KIOnline.XmlSerializers, Version=2.0.0.31192, Culture=neutral, PublicKeyToken=null oder
eine Abhängigkeit davon wurde nicht gefunden.
Das System kann die angegebene Datei nicht finden.

und zwar bei z.B:
in Reference.cs

/// <remarks/>
public KIUserService() {
    this.Url = KIOnline.Properties.Settings.Default.KIOnline_KIUserService_KIUserService;
    if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
        this.UseDefaultCredentials = true;
        this.useDefaultCredentialsSetExplicitly = false;
    }
    else {
        this.useDefaultCredentialsSetExplicitly = true;
    }
}

Die exception tritt dabei schon ein bevor überhaupt der wirkliche Konstruktor aufgerufen wird. Anscheinend muss da um diesen Typen ganz zu laden noch irgendwo ein Assembly geholt werden, dass nicht gefunden wird. Glaube dass es da irgendwas mit den Attributen oder sonst was hat, die Exception geht zwar irgendwo unter und führt zu keinen Fehler, allerdings rennen andauernd die FileNotFoundExceptions durch die Ausgabe und da hab ich mal nachgesehen was es da hat.

Hat da irgendwer von euch eine Idee was das sein könnte?

01.10.2008 - 09:30 Uhr

@Golo:

  1. Danke

  2. Wär möglich, das kommt halt von der Anlehnung an SQL ...

  3. a) hab dzt. kein VS2008 bzw. .NET 3.0 (oder wo die Extensions halt immer drinnen sein mögen) in Verwendung aber viel wichtiger: b) wie würdest du das machen? Soweit ich verstanden hab kann ich einen Typ damit erweitern, aber wie würdest du das machen, dass die Methode dann tatsächlich bei jedem (vergleichbarem) Typ verfügbar ist?
    Müsste man da die Methode an das ICompareable<> Interface hängen?

01.10.2008 - 09:22 Uhr

Naja, also der Name von SQL, aber ich wüsst auch ned wie ich so eine Methode sonst benennen würde 😉

01.10.2008 - 08:11 Uhr

Beschreibung:

Die bekannte Funktion between in C# umgesetzt


/// <summary>
/// Returns true if a given value is between to other values, false if it is not
/// </summary>
public static bool Between<T>(T value, T low, T high) where T : IComparable
{
    return (Comparer<T>.Default.Compare(low, value) <= 0
        && Comparer<T>.Default.Compare(high, value) >= 0);
}

Schlagwörter: Between, Between in C#

Hier noch die Tests dazu:

[TestMethod(true)]
public bool BetweenTest(TestContext testContext)
{
    Assert.AreEqual(Active.Utility.Between<short>(50, 20, 100), true);
    Assert.AreEqual(Active.Utility.Between<short>(50, 50, 100), true);
    Assert.AreEqual(Active.Utility.Between<short>(50, 60, 100), false);
    Assert.AreEqual(Active.Utility.Between<short>(200, 20, 100), false);
    Assert.AreEqual(Active.Utility.Between<short>(200, 20, 200), true);
    Assert.AreEqual(Active.Utility.Between<string>("E", "A", "F"), true);
    Assert.AreEqual(Active.Utility.Between<string>("H", "A", "F"), false);
    Assert.AreEqual(Active.Utility.Between<string>("A", "A", "F"), true);
    Assert.AreEqual(Active.Utility.Between<DateTime>(
        new DateTime(2008, 1, 1), new DateTime(2009, 1, 1), new DateTime(2010, 1, 1)), false);
    Assert.AreEqual(Active.Utility.Between<DateTime>(
        new DateTime(2008, 1, 1), new DateTime(2007, 1, 1), new DateTime(2010, 1, 1)), true);
    Assert.AreEqual(Active.Utility.Between<DateTime>(
        new DateTime(2012, 1, 1), new DateTime(2009, 1, 1), new DateTime(2010, 1, 1)), false);
    return true;
}

Eigentlich hätte ich gern gewusst, ob man das auch anders machen kann. Ich halte die Implementierung nämlich für total überzogen, für das was es machen soll. Hab aber spontan nix im .NET-Framework gefunden, und mich sehr gewundert, dass der Math-Namespace das gar nicht zur Verfügung stellt.

01.10.2008 - 06:26 Uhr

off Topic:

... einen Applikationsserver zwischengeschaltet, der mit der DB redet

und wie macht der das? Das mit der DB "reden"?

30.09.2008 - 15:59 Uhr

Das Problem hätt ich gar ned, weil das bei uns als SOA läuft. Der Client dazu verteilt sich auf ca. 200 Rechner. Durch die Abkapselung ist es mir jetzt möglich gewisse Sachen einfach in der DB zu fixen ohne die Clients (oder auch den Server selbst) zu zwingen, eine neue Version zu laden.

Begründete Alternativen oder Gründe warum das schlecht ist würden mich sehr interessieren. Für das Projekt kann ichs jetzt nicht mehr ändern, aber für zukünftige würde ich dann drüber nachdenken.

Was ich auf keinen Fall mache ist mit DataSets umherwerken. Die verwend ich genau um Daten reinzuladen und dann in einem Grid anzuzeigen. Für den Rest sind mir die DataSets viel zu langsam und viel zu unkontrollierbar.

30.09.2008 - 15:28 Uhr

Was spricht gegen CRUD? (wobei bei uns sogar noch ein Buchstabe dazukommt)

Ich hab aber neben denen auch noch knapp 200 andere.

30.09.2008 - 06:44 Uhr

Könnte man nicht einfach die event-behandelnde Methode an den Konstruktor übergeben und die übergebene Methode im Konstruktor invoken?

29.09.2008 - 16:47 Uhr

Meine Vermutung liegt auch darin, dass du im Update einfach keinen Satz triffst. Nachdem du den "oldNickName" nicht übergibst, bin ich davon ausgegangen, dass du genau den updaten willst und das halt nur als Test drinnen hast ...

Schätze aber mal, dass genau dort eben wie haarrrgh vermutet das Problem liegt.