Laden...

Forenbeiträge von lordbauer Ingesamt 33 Beiträge

12.11.2010 - 09:35 Uhr

Hallo,

also mit STRG-Leertaste geht es dann.

Warum aber nicht ohne?

12.11.2010 - 08:50 Uhr

Guten morgen,

seit dem Umstieg auf VS 2010 vermisse ich die Möglichkeit im Watch-Fenster die Intellisensen Unterstützung.

Kann man die irgendwo einschalten?

Verhalten VS2008:

Während des Debuggens eine Variable in das Watch-Fenster ziehen
Danach ging nach dem ich an die Variable (Beispiel: exception.) einen Punkt hinzugefügt habe die Intellisense Liste auf.

Danke schon mal im Voraus

02.09.2010 - 11:58 Uhr

Hallo zusammen,

in meinem aktuellen Projekt muss ich mit einem übergeordneten System (ERP/PPS) über XML kommunizieren.

Am Beginn der Produktion (Auftragsdatei) bekomme ich eine XML-Datei die ich zerlegen und in meine relationale Welt (SQL Server 2008 R2) überführen muss.

Während der Produktions wird alle 2 Sekunden ein Teil fertig. In diesem Takt müssen alle Produktionsrelevanten Daten in eine XML-Datei (Produktionsdatei) exportiert und dem übergeordneten Sysetm zu Verfügung gestellt werden.

Datenvolumen:

Auftragsdatei ca. 20kb
Produktionsdatei ca. 30kb ==> alle 2 Sekunden!

Nun mache ich mir Gedanken über die Umsetzung und wollte mal bei den Profis nach fragen welche Vorgehensweise am sinnvollsten/performantesten ist.

  1. Ein extra Tool (C#) welches sich um die Erzeugung/Lesen der XML-Dateien kümmert und die Werte in bzw. aus der Datenbank liest. Hier wäre dann natürlich nocht die Technologie zu klären. ADO.Net, Linq To Sql, EntityFramework usw.
  2. Alles in T-SQL über sp_xml_Preparedocument und OpenXML usw.
  3. Eine Mischung von 1 und 2
  4. Standardfunktionalität im SQL Server? Wenn ja welche gibt es da?

Das Einlesen der Auftragsdatei ist zeitlich unkritisch. Das Schreiben der Produktionsdateien muss relativ schnell erfolgen (2s Takt).

Hoffe Ihr könnt mir helfen wie man da am Besten umsetzt.

Vielen Dank!

13.08.2010 - 08:22 Uhr
  1. Beide Exceptions dienen dem leichteren Auffinden von Programmierfehlern. Beides Exceptions sind entsprechend normalerweise nicht dazu gedacht, um zur Laufzeit behandelt zu werden.

Sehe ich auch so.

Wenn man sich mal ne weile mit dem Exceptionhandling beschäftigt, stellt man fest, daß die Sache (scheinbar) oft extrem vernachlässigt wird. Man findet zwar überall Beispiele wie es prinizipiell funktioniert aber sehr wenig darüber wie man ein gutes Exceptionhandling-(Design) erstellt.

Danke für Eure Untersützung! 👍

13.08.2010 - 07:49 Uhr

Hallo,

danke für die vielen Antworten.

Ich fasse mal zusammen.

  1. ArgumentNullExcpetion macht sinn für Parameter (die null sind) um Aufrufer klar mitzuteilen was passiert ist.
  2. Beim Aufruf von anderen (außerhalb liegenden) Methoden, wie zum Beispiel in der Factory sollt die Factory einen Fehler schmeissen.

Gruß

12.08.2010 - 14:31 Uhr

Ah ich verstehe!

Und was für eine Exception werft Ihr dann bei folgendem code


public void DoSomething()
{
      Object test = Factory.CreateObject()
      if (test == null)
      {
              throw new ????Exception()
      }
}

ArgumentNulLExcpetion passt hier ja nicht mehr wirklich oder?

12.08.2010 - 13:53 Uhr

Hallo,

ich hab mal ne Frage zum Exceptionhandling


public void Test(object param)         
{            
      //some checks             
      if (param == null)             
      {                 
                   throw new ArgumentNullException("param");            
      }              

      // do something            
      Console.WriteLine(param.ToString());         
}

Macht das überprüfen des Pramaters auf null überhaupt sinn?

Würde in der Zeile

Console.WriteLine(param.ToString());  

nicht sowiese so eine NullReferenceExcpetion geworfen werden?

Welchen Vorteil hat die ArgumentNullException zur NullReferenceExcpetion?

Danke

25.09.2009 - 08:15 Uhr

Hallo,

ich kann leider nicht bei beiden Controls die selbe Quelle nehmen, da ich in der Combobox alle zu Verfügung stehenden Werte anzeige.

Erklärung

ListView:
_
Spalte A : SpalteB

Int16 : 2
Int32 : 4
Int64 : 8_

ComboBox (besitzt alle Werte die für Spalte A möglich wären):
_
Int16
Int32
Int64
String
Byte
..._

Die Datenquelle für die ListView und die Datenquelle für die ComboBox sind unterschiedlich!
Bei Auswahl einer Row in der ListBox wird der entsprechende Wert in der ComboBox ausgewählt.

Was mir zu meinem Glück jetzt noch fehlt, ist daß wenn ich in der ComboBox einen neuen Wert auswähle diesen dann an das selektierte Item in der ListBox übergeben wird.

Gruß

24.09.2009 - 10:13 Uhr

Hallo Experten,

habe nun endlich etwas Zeit gefunden mich mit der WPF zu beschäftigen und komme an einer Stelle nicht weiter.

Habe eine ListView an die habe ich eine Abfrage gebunden (listView.ItemsSource). Bei Auswahl einer Row in der ListView wird unter anderem ein Eintrag in einer ComboBox ausgewählt. Diese Comobobox wurde ebenfalls über ItemSource gefüllt (andere Datenquelle als die ListView).
Damit in der Combobox der richtige Eintrag ausgewählt wird habe ich der Property DataContext der Combobox die ListView übergeben.
Das ganze funktioniert soweit auch.

Nun möchte ich aber, daß bei Auswahl eines anderen Wertes in der Combobox dieser Wert auch in der Listview geändert wird. Die ListView hat mehrere Spalten. Und genau eine Spalte finden sich auch in der ComboBox wieder.

Ich stelle mir das quasi so vor:

BindingOperations.SetBinding(this.listView1, ListView.SelectedItemProperty.Spalte, binding[counter]);

Nur lässt sich das so nicht übergeben.

Geht dies auch über Datenbindung? Wenn ja wie? Oder muss ich das über Events machen?

Danke

19.08.2009 - 08:37 Uhr

Hallo,

ich arbeite mich gerade durch das Buch "Microsoft .Net 2.0 Anwendungen debuggen". Der Autor John Robbins hat da meiner Meinung nach eine sehr interresante FxCop regel vorgestellt: "AvoidBoxingAndUnboxingInLoops".

Diese FxCop-Regel findet Boxing/Unboxing Operationen in Schleifen welche aus Perofrmancegründen unbedingt vermieden werden sollen.

Hier ist der Download:

http://www.wintellect.com/Downloads/Debugging.zip

Gruß LordBauer

14.08.2009 - 13:31 Uhr

@herbivore

ich habe mich jetzt weiter eingelesen (Microsoft.Net Framework-Programmierung in C# von Jeffrey Richter).

Da steht, daß es nichts dagegen einzuwenden gibt System.Exception abzufangen und innerhalb des catch-Blcoks geeigneten Code auszuführen, solange Sie die Ausnahme am Ende dieses Blocks erneut auslösen und zwar am Besten mit throw ohne Parameter, da dadruch der Stacktrace nicht verändert wird.

13.08.2009 - 14:38 Uhr

Ok die Argumente leuchten mir ein.

Nachteil: Unmengen an catch-Blöcken und unübersichtlier Code. Richtig?

13.08.2009 - 14:10 Uhr

Hallo,

mir ist das immer noch nich ganz klar.

Gehen wir mal davon aus ich habe eine Methode die irgendetwas tut. In der Methode können ca. 20 verschiedene Exceptions auftreten. Bei allen Exceptions möchte ich das selbe tun. Warum kann ich da dann nicht die General-Exception fangen und einmal die Aktion definieren?

Gruß

13.08.2009 - 13:43 Uhr

Hallo,

gehen wir mal davon aus ich habe zwei Programmteile (Assemblies) A und B.

A ist der Einstiegspunkt. B ist einfach ein Programmteil welcher über ein Interfaces (Contract First Design) angesprochen wird.

Passiert jetzt in B ein unerwarteter Fehler und A würde die Excpetion fangen sind unter Umständen ja wichtige Informationen nicht mehr vorhanden die ich eventuell loggen möchte. Beispiel:

Fange ich die General Exception in B kann ich mir noch alle Informationen(auch private) in ein Log-File schreiben. Selbst wenn ich den Fehler selbst nicht behandle bzw. behandeln kann.

Fange ich die General Exception in A habe ich nicht mehr alle Informationen sondern nur diese die über den Contract verfügbar sind.

Gruß

13.08.2009 - 13:29 Uhr

Hallo,

ich stolpere immer wieder über die MS-Regel (This rule is similar to FxCop rule 'Do not catch general exception types', CheckId CA1031), daß keine General-Exceptions gefangen werden sollen. Warum ist mir leider nicht ganz klar.

Ich programmiere meistens folgendes:

try
             {

             }
             catch (System.IO.FileNotFoundException exception)
             {
                 //do something
                 ...

                 
                 throw new SenderException(exception.Message, exception);
             }
             catch (Irgendeine exception)
             {
                 //do something
                 ...

                 throw new SenderException(exception.Message, exception);
             }
             catch (Exception exception)
             {
                 //do something
                 ...

                 throw new SenderException("unerwarteter Fehler", exception);
             }

Fxcop meckert dann immer ich soll keine General Exception fangen.

SenderException ist dabei eine eigene Exceptionklasse.

Alternative wäre folgendes:

  try
             {

             }
             catch (System.IO.FileNotFoundException exception)
             {
                 //do something
                 ...

                 
                 throw new SenderException(exception.Message, exception);
             }
             catch (Irgendeine exception)
             {
                 //do something
                 ...

                 throw new SenderException(exception.Message, exception);
             }
             catch 
             {
                 //do something
                 ...

                 throw new SenderException("unerwarteter Fehler");
             }

Aber dann fehlt mir die Information der InnerExcpetion.

Wie macht Ihr das?

27.03.2009 - 09:20 Uhr

Hallo,

danke für die Antworten. Werde es dann "händisch" lösen.

Gruß

27.03.2009 - 08:57 Uhr

Hallo,

der SQL-Server hat für solche Probleme einige Tools zur Hand.

  1. Wie meine Vorredner schon sagten nicht simmulieren sonder provozieren
  2. Daten aufzeichnen und analysieren mit SQL Server Profiler und Performance Monitor.

Damit solltest Du auf die meisten Deadlocks identifizieren können.

27.03.2009 - 08:47 Uhr

Hallo,

ich kann Dir nicht gezielt weiter helfen, aber ein Bekannter von mir hat vor kurzem eine Software (C#) geschrieben welche Log-Dateien analysiert. Diese hat er über den Windows Indezierung-Dienst aufbereiten lassen. Man kann da aus .net drauf zugreifen. Der Weg ist also richtig. Wie es ganau funktioniert kann ich Dir leider aber nicht sagen.

27.03.2009 - 08:41 Uhr

Guten Morgen,

folgende Situation:

Wir haben einen Leitrechner der die Produktion an einer Anlage begeleitet. Dieser Leitrechner erhält von der Anlage verschiedene Daten die in der MS SQL SERVER (2005,2008) Datenbank gespeichert werden.
Für Statistiken usw. können diese Daten ausgewertet werden.

Nun möchten wir gerne Daten die nicht mehr zur aktuellen Produktion gehören in eine andere Datenbank "replizieren" und auf der eigentlichen Datenbank löschen.

Letzt endlich so etwas wie eine Replikation wobei das Löschen von Datensätzen nicht repliziert werden darf. Die neue Datenbank soll im Prinzip die History sein und in der aktuellen nur noch die Daten von der aktuellen Produktion oder den letzen paar Tagen, eben eine Teilmenge der Replizierten.

Geht sowas mit dem SQL Server?

LordBauer

20.03.2009 - 15:24 Uhr

Hallo,

so damit alle anderen die die CCR nutzen wollen nicht länger suchen müssen.

Einfach MSRobotics herunterladen und dann die Assembly Microsoft.CCR.Core referenzieren.

Gruß

LordBauer

12.02.2009 - 10:32 Uhr

Hallo,

warum dauert der Disconnect so lange (1 Minute oder mehr). Vieleicht kann mir ja jemand auf die schnelle helfen.


public void DoConnect(String ipAdress, Int32 port)
        {
             
            try
            {
                if (client.Client.Connected == true)
                {
                    client.Client.Shutdown(SocketShutdown.Receive);
                    client.Client.BeginDisconnect(true, new AsyncCallback(DisconnectCallback), client.Client);
                    disconnectDone.WaitOne();
                    
                }
                client.BeginConnect(ipAdress, port, new AsyncCallback(ConnectCallback), client);
                
            }
            catch(SocketException excpetion)
            {
                form.AddMessage(excpetion.Message);
            }
 
        }

        public void DisconnectCallback(IAsyncResult ar)
        {
            Socket socket = (Socket)ar.AsyncState;
            socket.EndDisconnect(ar);

            disconnectDone.Set();
        }

30.01.2009 - 16:46 Uhr

Hallo,

war letztes Jahr auf der Prio und da wurde das CCR & DDS Toolkit angekündigt.
http://www.microsoft.com/ccrdss/

Leider kann man unter dem Link nicht mal eine Testversion runterladen. Und 400$ ohne es testen zu können ist ja nicht gerade der Knaller. Klar könnte ich jetzt MsRobotics installieren aber das will ich nicht.

Nicht mal unter meinem MSDN Account kann ich eine Testversion runterladen.

Weiß jemand ob es eine Testversion gibt?

Danke.

LordBauer

31.07.2008 - 09:42 Uhr

Hallo,

das Problem ist, daß diese Applikation gekauft wurde und ich somit keinen Einfluss auf deren Code habe.

Gruss

31.07.2008 - 09:05 Uhr

Hallo,

ich rufe aus einer Applikation (Zenon, Copadata) meine Applikation auf. In der Main Methode starte ich dann meine Form wobei die Applikation (Zenon) als Vater aübergeben wird.

Die Form wird mit ShowDialog gestartet.

Nun habe ich den Effekt, daß die Applikation (Zenon) sich hin und wieder den Fokus nimmt. Dabei kommt diese Applikation (Zenon) aber nicht in den Vordergrund sondern mein Programm bleibt weiterhin sichtbar.

Dies hat zur Folge, daß wenn ich mich zum Beispiel in einer Combobox befinde und ich etwas auswählen möchte, die Combobox einfach zu geht, da der Fokus Weg geht.

Wie kann ich es erzwingen, daß mein Prgramm den Fokus behält?

Meine Idee war es auf LostFocus zu reagieren, aber dies hilft dem Benutzer denke ich wenig, da seine bereits getätigte Auswahl in der Comobox trotzdem verloren geht oder?

Vielen Dank vorab!

LordBauer

17.07.2008 - 18:19 Uhr

Hallo,

mit System.Enviroment.Exist funktioniert es. Vielen Dank für den Tip

Gruss

LordBauer

17.07.2008 - 08:51 Uhr

Hallo,

ok damit werde ich es mal ausprobieren. Melde mich dann wieder.

17.07.2008 - 08:43 Uhr

Hallo,

im daran denken und zwar so lange bis man es nicht mehr vergisst.

Ein STRING ist unveränderlich.

Soll heißen String-Operationen egal welcher Art sind sehr langsam. Drum wie oben bereits beschrieben diese Aufgaben immer das System erledigen lassen oder auf andere Klassen wie StringBuilder ausweichen.

Gruss

LordBauer

17.07.2008 - 08:30 Uhr

Morgen herbivore,

das war auch mein erster Ansatzpunkt! Nur leider hat der nicht weiter geholfen. Mein Dienst wartet jetzt bis der SQLSERVER gestartet wurde doch die Datenbankanfrage führt trotzdem zur einer Exception, da die Verbindung zu der speziellen Datenbank noch nicht hergestellt wurde.

Prinzipiell hast Du recht und ich sollte dort nach dem Problem suchen (aber dafür ist mal wieder keine Zeit).

Dadurch kam ich erst auf die Idee mit dem Neustarten des Dienstes.

Danke für Deine Antwort

LordBauer

17.07.2008 - 08:27 Uhr

Hallo,

@norman_timo

Ich glaube die Application Klasse habe ich nur bei einer Forms (bzw. GUI)-Anwendung. Beim meinem Dienst gibt es das nicht.

Ich habe schon versucht bei der Main Methode einen Rückgabewert zu setzten, doch dieser wird auch nicht ausgewertet.

Gruss LordBauer

17.07.2008 - 08:21 Uhr

Hallo,

vielen Dank für Deine Antwort.

Ich werde es dann wohl um ganz sicher zu gehen zur Laufzwit überprüfen. Kostet zwar etwas Performance (Reflection) aber egal.

Gruss

LordBauer

17.07.2008 - 00:08 Uhr

Hallo,

ich habe einen Dienst unter .Net 1.1 aufgesetzt. Diese Dienst startet automatisch mit dem Systemkonto beim Rechner Neustart. Unter Umständen kann es passieren, daß dieser Dienst noch nicht richtig mit der Datenbank kommunizieren kann.

Im Dienst Manager kann man zwar definieren, was beim Fehler eines Dienstes passieren soll (Neustart des Dienstes) nur leider scheint das mit .NET 1.1 Diensten nicht zu funktionieren, da zwar der Dienst mit einem Fehler beendet wurde aber der Service Manager hat das fehlerhafte beenden (Exception) nicht als Fehler in dem Sinne interpretiert, daß er den Fehlerzähler hoch gesetzt hätte.

Seit .Net 2.0 gibt es eine ExitCode Property die man auf ungleich 0 setzen muss, damit der Service Manager seinen Fehlerzähler für diesen Dienst hoch setzt.

Kennt jemand eine Möglichkeit für .Net 1.1?

Gruss

LordBauer

16.07.2008 - 23:55 Uhr

Hallo,

ich habe ein kleines Problem. Ich möchte gerne, dass Nutzer meines Interfaces dazu gezwungen werden, die im Interface angegeben Attribute zu verwenden.
Beispiel:
Ich möchte zum Beispiel, dass ich im Interface angeben kann, dass alle die mein Interface nutzen das Attribut [Serializable] verwenden.

Bisher habe ich mir mit abstrakten Klassen geholfen. Zufrieden bin ich damit aber nicht.

Vielen Dank

LordBauer

16.07.2008 - 23:45 Uhr

Hallo,

ein Dienst kann weder einer Console noch eine Form oder ähnliches darstellen, bzw. das wird vom System nicht ermöglicht (ich habe es zumindest noch nicht geschafft bei einem Dienst eine Consolenfenster zu öffnen.).

Um Deine gewünschte Funktionalität zu erreichen brauchst Du zum einen, den Dienst mit der Logik und zum anderen eine weitere Applikation (Form) die mit dem Dienst kommuniziert, bzw. Ausgaben vom Dienst empfängt.

Der Weg der Kommunikation steht Dir dabei natürlich offen (Files, TCP, UDP, WCF usw).

Gruss

LordBauer