Laden...

Forenbeiträge von formatter Ingesamt 59 Beiträge

15.09.2009 - 19:07 Uhr

Hi Christoph,

erst einmal vielen Dank für die Antwort. Werde etwas brauchen bis ich mich da durchgebissen habe...

Gruß,
Formatter

15.09.2009 - 14:09 Uhr

Hallo Leute,

wie man DataSet Aktualisierungen in die Datenbank überträgt ist mir bekannt, auch wie man Konflikte vermeiden kann.

Was mir fehlt ist eine Möglichkeit, dass wenn 2 User eine Datenbank bearbeiten und einer seine Änderungen an die Datenbank überträgt, der andere Meldung davon erhält und ggf. die Änderungen in sein DataSet übernehmen kann. Also eine Art Event gesteuerte verbindungslose Kommunikation.

Wie macht man so etwas ?

Gruß,
Formatter

verwendetes Datenbanksystem: MySQL 5.0 / .NET Connector 5.0

28.02.2009 - 19:42 Uhr

Hallo Leute,

ich habe eine .config Konfigurationsdatei wie folgt:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <sources>
      <source name="Asatd.ApiSession" switchName="Asatd.ApiSession" switchType="System.Diagnostics.SourceSwitch">
        <listeners>
          <add name="FileTraceListener" />
          <remove name="Default" />
        </listeners>
      </source>
      <source name="Asatd.Asatd" switchName="Asatd.Asatd" switchType="System.Diagnostics.SourceSwitch">
        <listeners>
          <add name="FileTraceListener" />
          <remove name="Default" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add	name="ConsoleTraceListener"
          type="System.Diagnostics.ConsoleTraceListener"
          traceOutputOptions="Timestamp,DateTime,ProcessId,LogicalOperationStack,Callstack"
          initializeData="false" />
      <add	name="FileTraceListener"
          type="System.Diagnostics.TextWriterTraceListener"
          traceOutputOptions="None"
          initializeData="c:/Test.txt" />
    </sharedListeners>
    <switches>
      <!--
      SourceSwitch Einstellungen:
      SwitchLevel       TraceEventType
      Off               keine
      Critical          Critical
      Error             Critical,Error
      Warning           Critical,Error,Warning
      Information       Critical,Error,Warning,Information          
      Verbose           Critical,Error,Warning,Information,Verbose
      ActivityTracing   Resume,Start,Stop,Suspend,Transfer
      -->
      <add name="Asatd.ApiSession" value="Verbose" />
      <add name="Asatd.Asatd" value="Verbose" />
      <add name="Asatd.DatabaseSession" value="Verbose" />
    </switches>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="ConsoleTraceListener" />
        <add name="FileTraceListener" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

Die einzelnen TraceSources kann ich natürlich z.B. wie folgt setzen:


public class TraceController
    {
        // KONSTRUKTOREN (CONSTRUCTORS)

        public TraceController()
        {
            _ApiSessionTraceSource = new TraceSource("Asatd.ApiSession");
            _AsatdTraceSource = new TraceSource("Asatd.Asatd");
        }

        // FELDER (FIELDS)

        private TraceSource _ApiSessionTraceSource;
        private TraceSource _AsatdTraceSource;
        private TraceSource _DatabaseSessionTraceSource;

        // EIGENSCHAFTEN (PROPERTIES)

        // METHODEN (METHODS)
    }

Was mache ich jedoch wenn ich die TraceSources ohne Kenntnis des Source Names setzen möchte ?
Ich stelle mir irgendwie ein Auslesen der Auflistung aller Sources aus der Datei vor, ähnlich wie man mit dem System.Configuration.ConfigurationManager Sektionen/Elemente aus der Datei lesen kann.

Gibt es da eine einfache Methode ?

03.01.2009 - 14:39 Uhr

Hi ErfinderDesRades,

frohes neues Jahr erst einmal.

Vielen Dank für Deinen Code, funktioniert perfekt. Ich mußte lediglich


Reset.Raise(this);

wegen der Fehlermeldung:
"System.EventHandler" enthält keine Definition für "Raise", und es konnte keine Erweiterungsmethode "Raise" gefunden werden, die ein erstes Argument vom Typ "System.EventHandler" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)

durch


Reset.Invoke(this, new EventArgs());

ersetzen. Den fehlenden Verweis konnte ich bis jetzt nicht finden, Code geht aber auch so sehr gut. Die Anwendung auf mein XML Programm dürfte mit Deinem Ansatz kein großes Problem mehr darstellen.

Deine Ansicht bezügl. des "Forum-Geistes" teile ich voll und ganz. Hatte auch nichts anderes im Sinn mit meiner Anfrage. Als C Sharp Anfänger brauche ich jedoch meist leider "etwas" mehr Code als die Profis.

Vielen Dank nochmals für Deine Mühe und für den klasse Code,
Formatter

29.12.2008 - 22:41 Uhr

Hi ErfinderDesRades,

muß gestehen Deinen Code noch nicht ausprobiert zu haben, jedoch sind mir zwei Dinge aufgefallen:

  1. Die Struktur immer einen Parameter und zwei Thresholds zu haben ist nicht konstant. Einige Indikatoren können mehrere Parameter besitzen und manchmal gibt es nur einen Threshold, z.B. den für Buy. Ein anderer Indikator stellt dann z.B. den Sell Threshold.

  2. Die Permutation erstreckt sich nicht über 3 Variablen pro Indikator sondern über die Gesamtanzahl von Variablen aller Indicatoren. Daher komme ich in meinem Beispiel auf 5832 Kombinationen und nicht auf 54 + 108 = 162 Kombinationen.

Berücksichtigt Dein Code diese beiden Aspekte ?

Gruß,
Formatter

29.12.2008 - 12:00 Uhr

Hi ErfinderDesRades,

Dein Code liefert das korrekte Ergebnis:


<TradingSystem SimulationSelection='SecuritySelection'>
    <Indicators>
        <Indicator Name='AroonOsc' Library='IndicatorLib'>
            <Parameter Name='AroonPeriod'>10</Parameter>
            <Threshold Type='Value' Action='Buy' Direction='Greater'>5</Threshold>
            <Threshold Type='Value' Action='Sell' Direction='Smaller'>2</Threshold>
        </Indicator>
        <Indicator Name='SMA' Library='IndicatorLib'>
            <Parameter Name='TimeSpan'>16</Parameter>
            <Threshold Type='Value' Action='Buy' Direction='Greater'>10</Threshold>
            <Threshold Type='Value' Action='Sell' Direction='Smaller'>10</Threshold>
        </Indicator>
    </Indicators>
</TradingSystem>

Die nächsten zwei Ergebnisse wären (jeweils der erste Wert ist verändert):


<TradingSystem SimulationSelection='SecuritySelection'>
    <Indicators>
        <Indicator Name='AroonOsc' Library='IndicatorLib'>
            <Parameter Name='AroonPeriod'>12</Parameter>
            <Threshold Type='Value' Action='Buy' Direction='Greater'>5</Threshold>
            <Threshold Type='Value' Action='Sell' Direction='Smaller'>2</Threshold>
        </Indicator>
        <Indicator Name='SMA' Library='IndicatorLib'>
            <Parameter Name='TimeSpan'>16</Parameter>
            <Threshold Type='Value' Action='Buy' Direction='Greater'>10</Threshold>
            <Threshold Type='Value' Action='Sell' Direction='Smaller'>10</Threshold>
        </Indicator>
    </Indicators>
</TradingSystem>


<TradingSystem SimulationSelection='SecuritySelection'>
    <Indicators>
        <Indicator Name='AroonOsc' Library='IndicatorLib'>
            <Parameter Name='AroonPeriod'>14</Parameter>
            <Threshold Type='Value' Action='Buy' Direction='Greater'>5</Threshold>
            <Threshold Type='Value' Action='Sell' Direction='Smaller'>2</Threshold>
        </Indicator>
        <Indicator Name='SMA' Library='IndicatorLib'>
            <Parameter Name='TimeSpan'>16</Parameter>
            <Threshold Type='Value' Action='Buy' Direction='Greater'>10</Threshold>
            <Threshold Type='Value' Action='Sell' Direction='Smaller'>10</Threshold>
        </Indicator>
    </Indicators>
</TradingSystem>

Mit Wertelisten meine ich das Element "Values", mal ist es als Wertebereich dargestellt, wie z.B.


<Values Type='Range'>
       <Start>10</Start>
       <Stop>20</Stop>
       <Step>2</Step>
</Values>

woraus die Werte 10,12,14,16,18,20 folgen (Startwert 10, Endwert 20, Schrittweite 2), mal als Werteauflistung, wie z.B.


<Values Type='Value'>
        <Value>2</Value>
        <Value>3</Value>
        <Value>4</Value>
</Values>

was den Werten 2,3 und 4 entspricht.

Im vohandenen Beispiel gibt es 6 Wertelisten bzw. Values Elemente. Folgende Kombinationen müssten z.B. generiert werden (jeweils die 6 Werte dargestellt):

  1. Kombination: 10-5-2-16-10-10
  2. Kombination: 12-5-2-16-10-10
    ...
  3. Kombination: 20-5-2-16-10-10
  4. Kombination: 10-7-2-16-10-10
  5. Kombination: 12-7-2-16-10-10
    ...
  6. Kombination: 16-9-4-20-20-20
  7. Kombination: 18-9-4-20-20-20
  8. Kombination: 20-9-4-20-20-20

Gruß,
Formatter

28.12.2008 - 15:30 Uhr

Hallo ErfinderDesRades,

danke bereits für Deine Antwort.

Leider würde Dein Code nur den ersten Output liefern, alles in allem sollten zahlreiche Outputs generiert werden:

6 Werte für 1. Werteliste (10,12,14,16,18,20)
3 Werte für 2. Werteliste (5,7,9)
3 Werte für 3. Werteliste (2,3,4)
3 Werte für 4. Werteliste (16,18,20)
6 Werte für 5. Werteliste (10,12,14,16,18,20)
6 Werte für 6. Werteliste (10,12,14,16,18,20)

-> also 5832 verschiedene Outputs

Da die Anzahl der Wertelisten variabel ist, denke ich um eine Rekursion nicht herumzukommen.

Gruß,
Formatter

26.12.2008 - 14:28 Uhr

Hallo Leute,

möchte mit Hilfe von Linq eine Liste von XElementen erstellen, deren Inhalt wiederum durch ein XML vorgegeben wird. Dazu gibt es im Input <Values>, manchmal wird nur der Wertebereich angegeben (Type=Range), manchmal eine Auflistung der Werte (Type=Value). Die Anzahl der Parameter,Indicatoren und Thresholds ist nicht fest.
Es soll nun für jede mögliche Kombination ein Output XML geben (siehe Beispiel unten)

Input XML:


<TradingSystem SimulationSelection='SecuritySelection'>
	<Indicators>
		<Indicator Name='AroonOsc' Library='IndicatorLib'>
			<Parameter Name='AroonPeriod'>
				<Values Type='Range'>
					<Start>10</Start>
					<Stop>20</Stop>
					<Step>2</Step>
				</Values>
			</Parameter>
			<Threshold Type='Value' Action='Buy' Direction='Greater'>
				<Values Type='Range'>
					<Start>5</Start>
					<Stop>9</Stop>
					<Step>2</Step>
				</Values>
			</Threshold>
			<Threshold Type='Value' Action='Sell' Direction='Smaller'>
				<Values Type='Value'>
					<Value>2</Value>
					<Value>3</Value>
					<Value>4</Value>
				</Values>
			</Threshold>
		</Indicator>
		<Indicator Name='SMA' Library='IndicatorLib'>
			<Parameter Name='TimeSpan'>
				<Values Type='Range'>
					<Start>16</Start>
					<Stop>20</Stop>
					<Step>2</Step>
				</Values>
			</Parameter>
			<Threshold Type='Value' Action='Buy' Direction='Greater'>
				<Values Type='Range'>
					<Start>10</Start>
					<Stop>20</Stop>
					<Step>2</Step>
				</Values>
			</Threshold>
			<Threshold Type='Value' Action='Sell' Direction='Smaller'>
				<Values Type='Range'>
					<Start>10</Start>
					<Stop>20</Stop>
					<Step>2</Step>
				</Values>
			</Threshold>
		</Indicator>
	</Indicators>
</TradingSystem>

Beispiel Output XML:


<TradingSystem SimulationSelection='SecuritySelection'>
	<Indicators>
		<Indicator Name='AroonOsc' Library='IndicatorLib'>
			<Parameter Name='AroonPeriod'>10</Parameter>
			<Threshold Type='Value' Action='Buy' Direction='Greater'>5</Threshold>
			<Threshold Type='Value' Action='Sell' Direction='Smaller'>2</Threshold>
		</Indicator>
		<Indicator Name='SMA' Library='IndicatorLib'>
			<Parameter Name='TimeSpan'>16</Parameter>
			<Threshold Type='Value' Action='Buy' Direction='Greater'>10</Threshold>
			<Threshold Type='Value' Action='Sell' Direction='Smaller'>10</Threshold>
		</Indicator>
	</Indicators>
</TradingSystem>

Habe mich mit Rekursionen immer sehr schwer getan. Würde mich freuen wenn mir jemand mit etwas Code ein verspätetes Weihnachtsgeschenk machen würde. Ich befürchte anderenfalls wird der Weihnachtsmann noch öfters kommen bis ich es auf die Reihe gebracht habe 😦

Gruß,
Formatter

28.05.2008 - 13:59 Uhr

...das Event inklusive übergebene Event-Argumente (habe einen Typ dafür kreiert) ist prinzipiell immer das gleiche. Dadurch das in meinem Container Objekt schnell ein paar hundert Objekte liegen, die Events auslösen können, dachte ich man sollte die Anzahl der abonnierten Events irgendwie klein halten. Mir schossen Gedanken wie Event Pools o.ä., die ich jedoch noch nie verwendet habe durch den Kopf.

Kann man eine Obergrenze der Anzahl von Events irgendwie bestimmen ?

28.05.2008 - 11:02 Uhr

Genau so mache ich es z.Zt. auch. Leider habe ich wie gesagt eine Baumstruktur der Objekte, so dass im Endeffekt eine "Event Kaskade" über 3 Stufen läuft. Wird das Event ausgelöst gibt es praktisch 3 weitere Events um an den gewünschten Auslöser zu kommen. Habe also 4 Events anstelle von einem.

28.05.2008 - 08:29 Uhr

Hallo Leute,

habe folgendes Problem:

Ich besitze eine Container Klasse in der ich Objekte sammel. Diese einzelnen Objekte haben wieder "Unter-Objekte". Im Endeffekt sieht das ganze aus wie eine Baumstruktur.

Nun können die untersten Objekte ein Event auslösen. Von außen soll jedoch nur ein Event des Container Objektes abonniert und in dessen Argumenten Rückschlüsse auf das Objekt am Ende der Baumstruktur geschlossen werden können. Ich habe da so Referenznummern, die pro Strukturschicht erweitert werden.

Zur Zeit habe ich eine Art Kaskade von Objekten, wo ich allerdings vermute, dass dies besser gehen könnte. Jemand eine Idee ?

Danke,
Formatter

29.03.2008 - 14:12 Uhr

Hi herbivore,

den Ansatz nur über Interfaces zu arbeiten habe ich leider noch nicht ganz verstanden. Kannst Du viellecht ein leichtes Beispiel geben bzw. kennst einen Link der auf ein Beispiel verweist ?

Gruß

29.03.2008 - 13:54 Uhr

Hi herbivore,

würde das dann so aussehen ?

A.dll


using Interface.dll;
using System.Reflections;

public class Indicator
{
private List<double> Wertereihe;
public void StarteBerechnung(List<Typ> Datenreihe)
{
Assembly asm = Assembly.LoadFrom("B.dll");
Type typ = asm.GetType("Algorithmus1");

IAlg1 intf1 = Activator.CreateInstance(typ) as IAlg1;
intf1.Berechne(Datenreihe, Wertereihe);
}
}

Interface.dll


public interface IAlg1
{
public Uint16 Paramter {get;}
public void Berechne(List<Typ> Datenreihe, List<double> Wertereihe);
}

B.dll


using A.dll

public class Algorithmus1 : IAlg1
{
public Uint16 Paramter {get;}
public void Berechne(List<Typ> Datenreihe, List<double> Wertereihe)
{ ... }
}

28.03.2008 - 08:46 Uhr

Hallo herbivore,

der Aufruf der Methode/Eigenschaften mit Hilfe von Reflektionen dürfte aber gleich sein, egal ob man mit oder ohne Interfaces arbeitet, oder ?
Wie Du bereits erwähnt hast, Interface in A.dll definieren und Methode in B.dll implementieren lassen (so wie in meinen Beispiel).

27.03.2008 - 08:55 Uhr

Hi herbivore,

habe mir gestern abend das Thema Reflektion mal angeschaut, ist auf den ersten Blick genau was ich suche. Erste Versuche, in Kombination mit Deinem Vorschlag A.dll und B.dll umzudrehen, sahen ganz vielversprechend aus.

Ich hatte eh nach einer Möglichkeit gesucht, Objekte dynamisch zu erstellen und mir an Delegates bereits ein wenig die Zähne ausgebissen.

In meiner A.dll gibt es eine Klasse Indicator. Dieser Indicator soll berechnet werden. Der Typ des Indicators soll dynamisch sein (gibt ein weiteres Assembly, das das Hauptprogramm darstellt, durch das dies entschieden wird). Wenn das Hauptprogramm sagt, es hätte gerne den Indicator vom Typ "Algorithmus1", sollte dies zugewiesen werden und die "Algorithmus1" spezifischen Member (z.B. nötige Eigenschaften/Parameter zur Berechnung) zur Verfügung stehen.

Eine Sache verstehe ich allerdings noch nicht ganz. Hat die Benutzung des Interfaces in Kombination mit Reflektionen bei Deinem Vorschlag irgendwelche Vorteile gegenüber einer direkten Einbindung via Reflektionen ?

26.03.2008 - 08:05 Uhr

Hi Herbivore,

habe gestern Deinen Vorschlag versucht umzusetzen, bin jedoch bei "A kann über das Interface die Algorithmen von B benutzen" gescheitert.

Sieht bei mir wie folgt aus:

A.dll


public interface IAlg1
{
public Uint16 Paramter {get;}
public void Berechne(List<Typ> Datenreihe, List<double> Wertereihe);
}

public class Test
{
private List<double> Werte;
public void StarteBerechnung(List<Typ> Datenreihe)
{
// hier muesste der Aufruf des Algorithumus kommen
}
}

B.dll


using A.dll

public class Algorithmus1 : IAlg1
{
public Uint16 Paramter {get;}
public void Berechne(List<Typ> Datenreihe, List<double> Wertereihe)
{ ... }
}

Wie müßte der Aufruf des Algorithmus in A.dll aussehen ?

25.03.2008 - 15:15 Uhr

Hallo herbivore,

die Idee ist nicht schlecht. Ich müßte jedoch für jeden neuen Algorithmus (Klasse) ein neues Interface in A anlegen (die verschiedenen Algorithmen benötigen unterschiedliche Parameter zur Berechnung). Oder ich lagere die Interfaces ebenfalls aus.

@WinSharp93: der Ansatz von NeuroCoder klingt auch gut, werde ich auf jeden Fall auch mal ausprobieren.

25.03.2008 - 11:58 Uhr

Im Prinzip möchte ich zwei DLL´s haben, in der einen (nennen wir sie A.dll) existieren die Klassen für die List<T> und die Listenelements, in der zweiten (B.dll) sollen verschiedene Algorithmen zur Berechnung von Werten sein. In A.dll ist B.dll bekannt, anders herum nicht.

Zur Berechnung der Werte müßte ich also die gesamte List<T> übergeben, was jedoch nicht geht (Ringabhängigkeit), oder den Teil aus List<T> extrahieren (List<double>), so daß die Berechnng möglich wird.

Beides in eine DLL kopieren möchte ich auch nicht, da sich B.dll in Zukunft sukzessive erweitern soll und A.dll gleich bleibt.

25.03.2008 - 08:57 Uhr

Hi Leute,

ich habe eine List<T> mit Objekten, die wiederum Eigenschaften haben. Nun möchte ich nur den Inhalt gewisser, genau genommen einer, Eigenschaft (Typ: double) an eine Methode übergeben. Leider kann ich aufgrund einer Ringabhängigkeit nicht die ganze List<T> übergeben. Im Endeffekt möchte ich aus der List<T> einen Teil in eine List<double> kopieren.

Wie mache ich das geschickt ?

08.01.2008 - 23:19 Uhr

Hallo Leute,

ja das Problem besteht immer noch. Leider fehlt mir jeder Ansatz. Ist auf jeden Fall ein lokales Problem, da ich früher dieses Problem nicht hatte (gleiches Betriebssystem, etc.).
Ich glaube ich habe das Problem seitdem ich ein Backup meines Systems eingespielt habe. Dieses Einspielen hatte leider nicht so gut geklappt, daher konnte ich nur durch überschreiben aller Datei eines Rohsystems meinen Ausgangszustand wieder herstellen. Jedoch weiß ich, daß meine Registry einen Haufen Fehler hat und daher mein System auch nicht besonders schnell läuft. Sonst ist es eigentlich aber okay. Bis jetzt fehlte mir die Lust alles nochmals frisch aufzusetzen.
Meine Idee, auf Euch mit der Bitte um Hilfe bei der Problembehebung zuzukommen, ist, daß ich nur mit der MyCSharp Seite Probleme habe. Alle anderen Seiten (surfe wenn ich Zeit habe nicht wenig) funktionieren ohne Probleme. Daher stellte sich mir die Frage, warum das mit mycsharp.de anders ist.

Naja, habe ja noch einen anderen Computer...

Gruß,
Formatter

01.01.2008 - 17:40 Uhr

Frohes neues Jahr,

benutze XP 64-bit. Cache habe ich in meinen Browsern immer auf 0 MB stehen, zusätzlich lasse ich den CCleaner regelmäßig laufen.

Mit meinem anderen PC (diesem hier) habe ich das Problem nicht, daher glaube ich auch ein lokales Thema zu haben. In welcher Richtung könnte ich suchen ?

Gruß,
Formatter

31.12.2007 - 17:51 Uhr

...noch was vergessen:

Wenn ich auf Einstellungen klicke, bleibt der Hauptframe komplett leer.

31.12.2007 - 17:49 Uhr

Hallo Leute,

ich habe mit einem meiner PCs (64-bit Betriebssystem) Probleme mit der Bedienung des Forums. Die Seiten werden nicht vollständig aufgebaut, speziell Buttons fehlen oft.

Hier einige Beispiele:

  • beim Einloggen fehlen die Buttons, lediglich Benutzername- und Passwortfelder vorhanden (nur Einlogfelder unterhalb der Forumsübersicht möglich, jedoch Weiterleitung geht nicht, workaround Reload Seite)

  • Seiten werden mittendrin unterbrochen, teilweise mehrfaches Reloaden der Seite nötig um die Endzeile "© Copyright 2003-2007 myCSharp.de-Team. Alle Rechte vorbehalten." zu bekommen

  • beim Erstellen von Antwort/Themen keine Buttons "Thema erstellen",etc. vorhanden. Bildschirm endet mit Block "Nachricht", die Blöcke "Optionen" und "Dateianhang" fehlen. Auch wiederholtes Reloaden hilft hier nicht.

Was könnte das sein ?? Habe gleiches Verhalten sowohl mit Firefox und IE, jeweils aktuelle Versionen. Konnte dieses Problem bis jetzt nur auf MyCSharp beobachten.

Gruß und guten Rutsch,
Formatter

31.12.2007 - 17:30 Uhr

Hallo Leute,

ich möchte die einzelnen Elemente einer List<short> wild durcheinanderwürfeln. Dabei sollen die Elemente, bei mir Zahlenwerte, erhalten bleiben, lediglich die Reihenfolge beim Durchlaufen der List soll per Zufallsgenerator willkürlich verändert sein. Im Prinzip das Gegenteil von Sortieren.

Wie kann man so etwas elegant lösen ?

Gruß und guten Rutsch,
Formatter

25.06.2007 - 19:21 Uhr

...wie gesagt, Wald vor lauter Bäumen nicht...

Danke und sorry nochmal wegen meiner Themaform.

25.06.2007 - 19:00 Uhr

In der letzten Programmzeile würde ich gerne etwas wie:

Console.WriteLine(_Market.Name);
oder
Console.WriteLine(_Market.InstanceIdentifier);

machen, jedoch bekomme ich immer:

"Market" enthält keine Definition für "Name".

Wenn ich im Forum, etc. suche finde ich einiges an Code. Sehe bloß meinen Fehler nicht.

25.06.2007 - 18:34 Uhr

Hallo Leute,

sehe den Wald vor lauter Bäumen nicht. Habe in einer DLL folgende Klasse:


public class Market
    {
        // KONSTRUKTOREN (CONSTRUCTORS)

        public Market(UInt16 InstanceIdentifier, string Name)
        {
            _InstanceIdentifier = InstanceIdentifier;
            _Name = Name;
        }

        // FELDER (FIELDS)

        private UInt16 _InstanceIdentifier = 0;
        private string _Name = "";

        // EIGENSCHAFTEN (PROPERTIES)

        public UInt16 InstanceIdentifier
        {
            get
            {
                return _InstanceIdentifier;
            }
            set
            {
                _InstanceIdentifier = value;
            }
        }
        public string Name
        {
            get
            {
                return _Name;
            }
            set
            {
                _Name = value;
            }
        }

        // METHODEN (METHODS)

        public void PrintMarket()
        {
            Console.WriteLine("InstanceIdentifier:{0} , Name:{1}", this._InstanceIdentifier, this._Name);
        }
    }

sealed public class MarketCollection<Market>
    {
        // KONSTRUKTOREN (CONSTRUCTORS)

        public MarketCollection()
        {
            _MarketCollection = new List<Market>();
        }

        // Indexdeklaration (Indexes)
      
        public Market this[int MarketIndex]
        {
            get
            {
                if (MarketIndex < 0 || MarketIndex >= _MarketCollection.Count)
                {
                    throw new Exception("Index bound violation");
                }
                else
                {
                    return _MarketCollection[MarketIndex];
                }
            }
        }

        // FELDER (FIELDS)

        private List<Market> _MarketCollection;
        
        // EIGENSCHAFTEN (PROPERTIES)

        public List<Market> ItemCollection
        {
            get
            {
                return _MarketCollection;
            }
        }
        public int ItemCount
        {
            get
            {
                return _MarketCollection.Count;
            }
        }
        
        // METHODEN (METHODS)

        public void Add(Market NewMarket)
        {
            _MarketCollection.Add(NewMarket);
        }
        public void PrintCollection()
        {
            foreach (Market _Market in _MarketCollection)
            {
               Console.WriteLine(_Market);
            }
        }
    }

Warum kann ich in PrintCollection() nicht auf die Member von Market zugreifen ??

Würde auch gerne den Indexer überladen und den Inhalt von _MarketCollection auswerten, klappt aus gleichem Grund nicht.

Wer kann mir wieder zu einen etwas freundlicheren Gesichtsausdruck verhelfen ?

20.03.2007 - 13:04 Uhr

Hi Hulkstar,

danke für die Gute-Nacht-Lektüre. Werde sicherlich etwas brauchen bis ich da durch bin...

Gruß

20.03.2007 - 09:38 Uhr

Hallo Hulkstar,

habe leider keine Vorkenntnisse, eigne mir aber gerne welche an. Wie setze ich am besten an??

Gruß

17.03.2007 - 20:52 Uhr

Hallo Leute,

würde gerne eine SMS an mein Handy via ISDN Karte meiner Computers verschicken. Das Thema scheint im Forum nicht neu zu sein, habe aber wenig Code zur Realisierung gefunden. Hat jemand etwas parat??

Gruß

07.03.2007 - 16:05 Uhr

...an die 2000 Threads werde ich wohl nicht ranreichen, zumindest nicht geplanterweise!

Wie ich es implementieren möchte weiß ich selbst noch nicht. Im Groben:

Berechne irgendwelche Dinge und wenn ein spezielles Ergebnis kommt soll etwas passieren. Die Berechnung soll aber unabhängig davon weitergehen. Diese automatische Auslösung kann auch sofort ein weiteres Mal passieren. Neben der automatischen möchte ich aber auch noch manuell auslösen dürfen. Die Auslösungen müssen auf jeden Fall nacheinander bearbeitet werden und können etwas dauern, greifen dabei auch auf eine Datenbank zwecks lesen/schreiben zu.

Daher dachte ich an einen eigenen Thread der zu Beginn gestartet wird und auf die Auslösungen wartet. Diese sollte er dann der Reihenfolge nach bearbeiten. Wenn die Bearbeitung abgeschlossen ist wäre eine Rückmeldung an den Aufrufen noch schön.

07.03.2007 - 15:36 Uhr

Hallo Leute,

gibt es eine Obergrenze wie viele Threads das eigene Programm aufmachen darf (mal von evtl. Synchronisationsaufwand abgesehen) ??
Bei den hunderten Dingen, die unser geliebtes Windows so im Hintergrund durchführt, dürfte es doch nicht weh tun, wenn man ein knappes Duzend Threads aufmacht, oder??

Wenn ein Thread gestartet ist und auf ein Event warten soll könnte man ihn ja immer ein paar Millisekunden zwischendurch schlafen lassen. Kann er dann das Event evtl. verpennen oder wird das automatisch irgendwo gepuffert??

01.03.2007 - 12:31 Uhr

...habe nochmals über das Diagramm nachgedacht (schwer sich auf den Sinn des Diagramms zu beschränken und nicht gleich konkrete Umsetzungvorschläge darin zu erarbeiten !!). Meine o.g. Probleme habe ich auf jeden Fall nicht mehr.

Kennt jemand eine schöne Dokumentation zum Thema UML, so Tips & Tricks. Sollte möglichst praxisnah sein, theoretisches Material mit seinen einfachsten Beispielen habe ich genug.

27.02.2007 - 16:35 Uhr

...ich denke der Datenbankserver ist auch ein Akteur, hat daher ebenfalls UseCases

Beziehe mich dabei auf folgendes Beispiel
Beispiel

Da ich UML Neuling bin kann mein Verständnis auch falsch sein

27.02.2007 - 15:41 Uhr

... mehrere UseCases zu haben ist klar, jedoch habe ich so viele das die Übersichtlichkeit meines Diagramms leidet. Beschreiben möchte ich allerdings nur ein System bzw. eine Software die ich basteln möchte.

Problem mit den Verweisen ist folgendes:

Habe z.B. einen UseCase des SW Users "Daten eingeben" der mit einem UseCase einer Datenbank "Daten in Datenbank übernehmen" assoziiert (include) ist. Nun gibt es allerdings andere UseCases des Benutzers die ebenfalls irgendwelche Daten in die Datenbank eintragen/löschen/updaten sollen.
Wenn ich nun die UseCases auf verschiedene Diagramme aufteile müßte ich die Assoziation über die Diagrammgranzen hinweg zeichnen oder den UseCase "Daten in Datenbank übernehmen" in beide Diagramme einzeichnen.

Der Übersichtlichkeit, und darum mache ich ja UML, würde es helfen, jedoch möchte ich auch nicht UML falsches machen.

Gruß

27.02.2007 - 14:52 Uhr

Hallo Leute,

hat jemand praktische Erfahrung mit UML ????

Ist es üblich mehrere UseCase Diagramme eines Systems zu haben???

Meines wird leider etwas unübersichtlich, jedoch verweisen die UseCases teilweise aufeinander. Mit anderen Worten müßten gleiche UseCases dann in mehreren Diagrammen auftauchen, sind also doppelt. Ist das UML 2.* konform ??

Gruß,
Formatter

29.01.2007 - 15:47 Uhr

sollte es demnach ungefähr so aussehen??


class MainClass
{
	public static void Main(string[] args)
	{
		Container myContainer = new Container();
		myContainer.Collections.Add();
	}
}
internal class Container
{
	private string myContainerName;
	private Collection<System> myCollection;

	public Collection<System> Collections
	{
		get
		{
			return myCollection;
		}
	}
	public Container() : this("")
	{
	}
	public Container(string ContainerName)
	{
		this.myContainerName = ContainerName;
		Collection<System> myCollection = new Collection<System>();
	}	
}
internal class Collection<T>
{
	private T[] myArray = new T[100];
		
	public T this[int mySystemIndex]
	{
		get
		{
			return myArray[mySystemIndex];
		}
	}
	public Collection()
	{
	}
	public void Add()
	{
		System mySystem = new System();
		int myLastIndex = myArray.GetLength(0);
		myArray.SetValue(mySystem, myLastIndex);
	}
}

bekomme auch immer:

Exception System.NullReferenceException was thrown in debuggee:
Object reference not set to an instance of an object.

Verstehe nicht, wie ich eine Methode innerhalb einer Klasse Collection zum Hinzufügen von Objekten in die Collection aufrufen soll und dann noch über einen Indexer erreiche.

29.01.2007 - 14:42 Uhr

Hallo Leute,

ich möchte nach dem Vorbild von DataSet/DataTable eine eigene Collection Struktur erstellen.
Beim DataSet habe ich eine Eigenschaft "Tables" vom Typ DataTableCollection um auf einzelne Tablellen zuzugreifen.
Wenn ich es recht verstehe hat die Klasse DataTableCollection dann die Methoden Add und Remove.
Nur wie läuft das mit dem Indexer??

30.11.2006 - 15:45 Uhr

...perfekt.

Danke Dir Herbivore.

Gruß

30.11.2006 - 12:57 Uhr

Dann habe ich aber nicht alle Kombinationen. Bei Deinem Vorschlag wird erst der erste Parameter hochgezählt (von MIN bis MAX), dann der zweite und so weiter. Die Kombination erster Parameter auf z.B. MIN und der zweite auf MAX gibt es nicht.

Ich muß, wenn ein Parameter hochgesetzt wird, alle vorhergehenden wieder von Anfang an starten lassen.

30.11.2006 - 12:31 Uhr

Hallo Herbivore,

müssen doch mehrere ineinandergeschachtelte Schleifen sein. Wenn ich z.B. für jeden Parameter eine Schleife nehme, kann ich, da die Anzahl der Parameter variabel ist, nicht im Vorfeld sagen wieviele Schleifen ich schachteln muß.

Oder meintest Du das irgendwie anders??

30.11.2006 - 11:04 Uhr

Hallo Leute,

ich habe folgendes Problem wo mir ein schöner Ansatz fehlt:

Ich möchte alle Wertekombinationen verschiedener Parameter durchlaufen. Im Vorfeld ist die Anzahl der Parameter leider nicht bekannt (soll individuell eingestellt werden können). Jeder Parameter soll einen Maximal- und Minimalwert haben zwischen denen der momentane Wert liegen kann. Außerdem soll eine Schrittweite (StepSize) angegeben werden können, um wieviel jeder Wert angehoben werden kann (natürlich innerhalb von Minimal-/Maximalwert).

Wie geht man so was am besten an??

Ich dachte daran die Parameter mit Min-/Max- Werten und StepSize in einem zweidimensionalen Array abzulegen. Wie ich die Werte dann möglichst effizient hochlaufen lassen weiß ich allerdings noch nicht.

Gruß

03.11.2006 - 15:09 Uhr

Hallo Leute,

möchte eine Art Serverdienst basteln der folgendes leisten muß:

  • verschiedene Funktionen müssen unabhängig voneinander, evtl. zeitgleich ablaufen können (verschiedene Threads)
  • die einzelnen Funktionen sollen zeitgesteuert loslaufen und evtl. beendet (bei Endlosfunktionen) werden (Timer)
  • unabhängig von der zeitlichen Steuerung soll von einer anderen Applikation (Client) aus jede Funktion manuell gestartet bzw. gestoppt werden können (Remoting + Events)

Hat jemand etwas dergleichen schon mal designed??

Einzelne Threads starten ist kein Problem, die Funktionen gibt es teilweise auch schon. Die Remote Verbindung klappt auch.
Ich habe nur beim Bau des/der Timers (einer oder mehrere), der auf Events von außen reagieren muß Verständnisschwierigkeiten. So eine Art Kontrollzentrum im Server stelle ich mir vor. Schön wäre auch den Status der Funktion irgendwo nachhalten zu können und vom Client abfragen zu können.

Kreative vor...

31.10.2006 - 15:31 Uhr

...habe in SharpDevelop leider nichts zu Automatischer Codegenerierung für meinen Fall gefunden.

Nichts desto trotz verstehe ich diese Fehlermeldung nicht bzw. warum ich sie bekomme.Wenn ich meinen Code mit MySql bzw. C# Beispielcode vergleiche sollte es eigentlich klappen. Das Ausgeben des veränderten DataSets klappt ja auch noch einwandfrei. Warum das UPDATE nicht ??

30.10.2006 - 15:09 Uhr

...bis jetzt habe ich nur custom data adapter probiert. Benutze SharpDevelop und habe noch nicht nach einem Code Generator gesucht...werde ich mal versuchen.

Ich verstehe nur nicht warum bei meinem Code ständig die Fehlermeldung:

Ausnahme System.ArgumentOutOfRangeException wurde im ausgeführten Programm ausgelöst:
Index and length must refer to a location within the string.

kommt. Ist den an


DataRow newRow = myDt.NewRow();
newRow["id"] = 2;
newRow["wert"] = 10;
myDt.Rows.Add(newRow);

was falsch??? Wenn ich mir den DataSet- Inhalt vor dem Update ausgeben lassen meckert er nicht.

29.10.2006 - 16:13 Uhr

Wenn ich nach dem Hinzufügen der neuen Zeile "AcceptChanges" aufrufe wechselt der Zeilenstatus von "Added" auf "Unchanged". Beim Update Kommande passiert daher nichts...

29.10.2006 - 15:45 Uhr

Möchte mein Problem nochmal unter anderem Thema aufgreifen...wie bekommen ich das geänderte DataSet wieder in meine Datenbank??

28.10.2006 - 15:00 Uhr

leider beisse ich mir immer noch die zähne an der aktualisierung meiner datenbank aus. immer der oben genannte fehler:

Ausnahme System.ArgumentOutOfRangeException wurde im ausgeführten Programm ausgelöst:

Index and length must refer to a location within the string.

UpdatedRowStatusErrors()
UpdatedRowStatus()
Update()
UpdateFromDataTable()
Update()
Main() - c:\Dokumente und Einstellungen\noname\Eigene Dateien\SharpDevelop Projects\TestDb\Main.cs:41,4

hier mal der gesamte code:


using System;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;


namespace TestDb
{
	public class MainClass
	{
	
		public static void Main(string[] args)
		{
			string myConnectionString = "SERVER=localhost;UID=root;PWD=;DATABASE=test;Allow Zero Datetime=True;";
			
			DatabaseClient myClientDb = new DatabaseClient(myConnectionString);			
			myClientDb.ConnectDatabase();
			
			MySqlDataAdapter myDataAdapter = myClientDb.CreateCustomerAdapter();
			
			DataSet myDs = new DataSet();
			myDataAdapter.Fill(myDs, "Test");
			
			DataTable myDt = myDs.Tables[0];														
			
			DataRow newRow = myDt.NewRow();
			newRow["id"] = 2;
			newRow["wert"] = 10;
			myDt.Rows.Add(newRow);
			
			myDataAdapter.Update(myDs, "Test");
			
			myClientDb.DisconnectDatabase();
			Console.WriteLine("Zum Beenden [Enter] drücken...");
			Console.ReadLine();

		}
	}
	public class DatabaseClient
	{
		private MySql.Data.MySqlClient.MySqlConnection myConnection;
			
		private bool LoggedInDatabase = false;
		
		private string myConnectionString;					
		public string ConnectionString		
		{
			get
			{
				return myConnectionString;
			}
			set
			{
				myConnectionString = value;
			}
		}
		public DatabaseClient() : this("")						
		{
		}
		public DatabaseClient (string ConnectionString)			
		{
			this.myConnectionString = ConnectionString;
		}
		public void ConnectDatabase()
		{
			Console.WriteLine("Verbindungsaufbau mit MySQL Server...");
			try	{
				myConnection = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
				myConnection.Open();
				LoggedInDatabase = true;
				Console.WriteLine("Verbindungsaufbau mit MySQL Server erfolgreich.");
			}
			catch (MySql.Data.MySqlClient.MySqlException ex)	{
				switch (ex.Number)	{
					case 0:
						Console.WriteLine("Fehler beim Verbindungsaufbau mit MySQL Server. Administrator kontaktieren.");
						break;
					case 1045:
						Console.WriteLine("Fehler beim Verbindungsaufbau mit MySQL Server. User/Passwort falsch.");
						break;
				}
			}
		}
		public void DisconnectDatabase()
		{
			if ( LoggedInDatabase)	{
				try {
					
					try	{
						myConnection.Close();					
						Console.WriteLine("Trennen der MySQL Server Verbindung.");
					}
					catch (Exception ex) {
						Console.WriteLine("Fehler beim Trennen der MySql Server Verbindung. Ausnahme:");
						Console.WriteLine(ex.Message);
					}
					myConnection = null;
				}
				catch (Exception ex) {
					Console.WriteLine("Fehler beim Ablauf von Methode DisconnectDatabase. Ausnahme:");
					Console.WriteLine(ex.Message);
				}
			}
			else	{
				Console.WriteLine("Keine MySQL Server Verbindung vorhanden.");
			}
		}
		public MySqlDataAdapter CreateCustomerAdapter()
		{
			MySqlDataAdapter da = new MySqlDataAdapter();
			da.MissingMappingAction = MissingMappingAction.Passthrough;
			da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
			MySqlCommand cmd;
 		
  			cmd = new MySqlCommand("SELECT * FROM test", myConnection);
 			da.SelectCommand = cmd;
  			
  			cmd = new MySqlCommand("INSERT INTO test (id, wert) VALUES (?id, ?wert)", myConnection);
 			cmd.Parameters.Add("?id", MySqlDbType.VarChar, 12, "id" );
  			cmd.Parameters.Add("?wert", MySqlDbType.VarChar, 12, "wert" );
 			da.InsertCommand = cmd;  
 			
			return da;
		}
	}
}

die datenbank


mysql> describe test;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   | PRI |         |       |
| wert  | int(11) | NO   |     |         |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql>

ich habe aufgegeben, wenn keiner von euch helfen kann kommt "ExecuteNonQuery" zum einsatz. möchte ich allerdings vermeiden...

27.10.2006 - 20:25 Uhr

was bedeutet:

Ausnahme System.ArgumentOutOfRangeException wurde im ausgeführten Programm ausgelöst:
Index and length must refer to a location within the string.

und wie kann ich es vermeiden????

24.10.2006 - 18:25 Uhr

Hallo Leute,

bekommen immer die Fehlermeldung:

Type of value has a mismatch with column typeCouldn't store <16.08.2006 00:00:00> in Date Column. Expected type is MySqlDateTime.

Wie kann ich den Typ System.DateTime in MySqlDateTime konvertieren? Falls möglich kleinen Code.

Danke,
Formatter