Laden...

Forenbeiträge von Wolf_maYer Ingesamt 286 Beiträge

28.09.2007 - 14:39 Uhr

Wenn man lange genug sucht, findet man auch die richtigen Fehler 🙂
Sicher war/ist es auch ein großes Problem, wenn man die Com-Objekte nicht wieder frei gibt, da man sich nach und nach den Speicher zumüllt aber noch schlimmer ist es, wenn man der Hauptapplikation im Data-Thread sagt, dass sie ihren Bildschirm aktualisieren soll 😉

Leider kam es hier nicht immer zu Abstürzen sondern nur in bestimmten Situationen sonst wäre ich da eher drauf gekommen.

Nun habe ich das korrigiert und es rennt.

Vielen Dank nochmal für die Hilfe.

Gruß, maYer

28.09.2007 - 13:37 Uhr

Ja leider tut sie das auch.

Ich werde jetzt mal einen Bereich redesignen, bei dem wir nicht sicher sind, ob da alles im Lack ist und dann noch einmal schauen.

28.09.2007 - 10:37 Uhr

Hi,
mit dem ComTrace schmiert sich meine Applikaton leider immer weg. Insofern ist es für mich nicht möglich das Tool zu nutzen.

Das kann daran liegen, dass die Applikation für die wir die Integration schreiben zu groß ist 😉

Wir durchforsten jetzt gerade allen Code und geben alles so gut wie möglich frei. Blöde Sisyphus Arbeit aber man kann sich nicht immer alles aussuchen.

Wenn es Neuigkeiten gibt, werde ich den Thread auf dem Laufenden halten.

Gruß, maYer

26.09.2007 - 16:55 Uhr

Hi,
ich bin gerade dabei meine Applikation auf nicht freigegebene COM-Objekte zu durchsuchen und stocher dabei unbefriedigender Weise mit der Gabel im Heuhaufen herum.

Das bedeutet, ich weiß nicht, wo ich die nicht freigegebenen Objekte erstelle und lese mir den Quellcode durch in der Hoffnung eines dieser Objekte zu finden.

Beim ReleaseComObjects bekomme ich aber als Rückgabewert, dass noch x Objekte vorhanden sind. (es werden von Durchlauf zu Durchlauf mehr.)
Einen FinalRelease möchte ich aber erstmal nicht machen, weil ich ja nicht sicher gehen kann, ob die Objekte an dieser Stelle nicht noch irgendwo gebraucht werden.

Jetzt stelle ich mir 2 Fragen.
Gibt es eine Möglichkeit sich die vorhandenen COM-Objekte irgendie anzuschauen, die im Speicher sind?
und
Bezieht sich der Rückgabewert nur auf den Typ von Objekten, den ich dort releasen möchte?

Vielen Dank für Eure Infos und Hilfe,

maYer

25.09.2007 - 15:54 Uhr

Es läuft jetzt sauber durch.

Vielen Dank für Eure Hilfe 😉

Gruß, maYer

25.09.2007 - 14:53 Uhr

Ich versuche es mal mit:


System.Runtime.InteropServices.Marshal.ReleaseComObject()

gruß, maYer

25.09.2007 - 14:36 Uhr

Hi,
wir sind schon einmal so weit, dass wir den Bereich eingrenzen können an dem der Mist passiert.

Es scheint wohl so zu sein, dass ich ein COM-Objekt aus der Fremdapplikation aufrufe und dieses nicht wieder richtig frei gegeben wird.

Ein ähnliches Problem trat im C++ Bereich auch schon auf, dass mit einem "Detach auf dem Pointer sobald der Code mit der Arbeit auf dem Objekt fertig war" gelöst wurde.

In C# arbeite ich jetzt nicht mit einem Pointer auf dem Objekt sondern ich Arbeite auf dem Interop Interface und habe dementsprechend keinen Pointer.

Reicht da ein auf NULL setzen?

Gruß, maYer

25.09.2007 - 10:48 Uhr

Hmm,
also das Programm, welches wir schreiben ist eine Integration in eine CAD-Anwendung. Dementsprechend Speicher benötigt die komplette Anwendung.

Ich selber bin nicht für den kompletten Code zuständig sondern nur für ca. 35% des C# Codes (Datenbank Anbindung und ein paar Funktionalitäten in der BI)

Der C++ Code wird von einem anderen Entwickler verwaltet, gewartet und erweitert.
C++ ist deswegen noch enthalten, weil die Integration beim Projektstart nur unter C++ realisierbar gewesen ist. Inzwischen gibt es auch ein C# Interface.

Ich werde ihn einmal anhauen, ob er seine Bereich auf diese Vermutung hin untersuchen kann.

25.09.2007 - 10:20 Uhr

Hi Sarabande,
es waren bis jetzt ausschließlich Speicher Fehler.
Heute ist noch ein neuer Fehlertyp dazu gekommen:

Fehler: Error creating window handle.
StackTrace: at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.TextBoxBase.CreateHandle()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
at System.Windows.Forms.Control.OnParentVisibleChanged(EventArgs e)
at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
at System.Windows.Forms.ScrollableControl.OnVisibleChanged(EventArgs e)
at System.Windows.Forms.Form.OnVisibleChanged(EventArgs e)
at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.set_Visible(Boolean value)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()

Wir haben es noch nciht auf einem Cleanen Rechner laufen gelassen sondern auf den üblichen Testrechnern, auf denen das Programm sonst auch immer gelaufen ist.

Bei den C++ Geschichten handelt es sich ausschließlich um DLL´s.

@Svenson:
ich habe eigentlich immer nur einen Thread offen um die Datenoperationen durchzuführen und die GUI nicht zu blockieren. Der Benutzer bekommt einen InfoDialog mit einer Progressbar angezeigt.

Mit dem Profiler werde ich mich heute anfreunden und werde einmal schauen, was er mir so erzählt.

Gruß und vielen Dank für die Denkanstöße,
maYer

24.09.2007 - 17:07 Uhr

Hi,
danke ihr Beiden. Ihr macht mir Mut, dass es mit viel Mühe ja doch noch zu knacken ist.

Es ist so, dass wir mit einem C++ Bereich Arbeiten, der den CSharp Teil aufruft. Es ist leider momentan nicht anders zu handeln.
Kann es sein, dass im C++ Bereich irgendetwas falsch Initialisiert ist o.Ä., was mich dann im C# Teil mit meinem Threadding in die Knie zwingt? Ich weiß leider nicht, wie ich das besser umschreiben soll.

Den Profiler werde ich mir mal gründlich anschauen. Aber ich glaube, dass die eigentlichen Fehler im C++ Teil liegen. Ich hatte vorher eigentlich nie Probleme mit Speicherbereichen obwohl ich MultiThreadding ausgiebig genutzt habe.

Gruß, maYer

24.09.2007 - 16:37 Uhr

Hi,
es tut mir furchtbar leid, dass jetzt warscheinlich eine Glaskugel-Frage stelle. Ich hocke nur schon seit Heute Morgen vor zahlreichen Speicherfehlern, bei denen ich einfach nicht weiter komme.

Eine der Fehlermeldung schaut wie folgt aus:

Fehlermeldung: Exception of type 'System.OutOfMemoryException' was thrown.
StackTrace: at System.Threading.Thread.StartInternal(IPrincipal principal, StackCrawlMark& stackMark)
at System.Threading.Thread.Start()
at System.Threading.Thread.Start(Object parameter)

Die Fehlermeldung sagt ja aus, dass es sich hierbei um einen Fehler handelt, bei dem der Arbeitsspeicher voll ist und dem Betriebssystem keiner mehr zur Verfügung steht. Das kann aber nicht sein, da noch ca. ein GB frei ist.

Ein anderer Fehler an einer ganz anderen Stelle lautet:

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
StackTrace: at System.Reflection.AssemblyName.nInit(Assembly& assembly, Boolean forIntrospection, Boolean raiseResolveEvent)
at System.Reflection.AssemblyName.nInit()
at System.Reflection.AssemblyName..ctor(String assemblyName)
at System.Resources.ResourceManager.CanUseDefaultResourceClasses(String readerTypeName, String resSetTypeName)
at System.Resources.ResourceManager.CreateResourceSet(Stream store, Assembly assembly)
at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream)
at System.Resources.ResourceManager.GetObject(String name)

Jetzt stehe ich leider komplett vor einer Wand, bei der ich icht weiß wo ich anfangen soll zu suchen.

Gibt es vielleicht eine Möglichkeit, mit der man Erfahren kann, ob und womit ein Programm oder ein Teil eines Programms diese Speicherfehler verursacht? Ich glaube, dass die Ursache nicht an der ist, an der der Fehler auftritt sondern an einer ganz anderen, die ich momentan einfach icht auf dem Schirm habe.

Wie Ihr merkt, greife ich gerade nach dem letzten Strohhalm und freue mich auf irgendeinen noch so kleinen Tip.

Viele Grüße, maYer

21.09.2007 - 14:26 Uhr

Ich trinke hauptsächlich Kaffe, wenn ich mir eine Rauchen möchte!
Bei uns ist das Rauchen nämlich nur in der Küche erlaubt.

Seit dem ist mein Kaffee-Durchsatz auch erhelblich gestiegen. Dafür rauche ich weniger 😉 Es gibt also immer 2 Seiten der Medallie.

Wenn es geht trinke ich frische Röstung (Jakobs) aber manchmal auch Kaffe aus der normalen Maschine. der scmeckt aber wesentlich schlechter.

Gruß, maYer

19.09.2007 - 14:02 Uhr

Ahh,
dann waren das die doppelten '[' in Zeile 7 und 8 ...
Danke. Ich habe es einfach komplett übersehen 🙂

Gruß, maYer

19.09.2007 - 13:33 Uhr

Hmm, dann muss ich das Schema hinterher noch anpassen.
Das ist möglich aber nicht so schön wie in einer Anweisung ...

19.09.2007 - 13:21 Uhr

verwendetes Datenbanksystem: MSSQL 2005

Hi,
ich versuche gerade eine Tabelle anzulegen und scheitere ohne den Fheler zu finden.
Je länger ich darauf schaue desto sicherer bin ich mir eigentlich, dass es klappen müßte.

vielleicht findet jemand etwas, was ich inzwischen übersehe:

CREATE TABLE [isap].[TDM_ERP]
( 
	[JOBID] [int] NOT NULL, 
	[OBJECT_ID] [int] NOT NULL, 
	[CLASS_ID] [smallint] NOT NULL, 
	[PARENT_ID] [int] NOT NULL, 
	[CN_BEMERKUNG] [[varchar](max)] NULL, 
	[CN_KURZBEZEICHNUNG_1] [[varchar](max)] NULL, 
	
	CONSTRAINT [PK_TDM_ERP] PRIMARY KEY CLUSTERED 
	(
		[JOBID] ASC,
		[OBJECT_ID] ASC,
		[CLASS_ID] ASC,
		[PARENT_ID] ASC 
	)
	WITH 
	(IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) 
ON [PRIMARY]

Danke für das drüber schauen.

Die Fehlermeldung, die mir der Server rausschmeißt lautet:

Falsche Syntax in der Nähe von ']'.
Falsche Syntax in der Nähe des WITH-Schlüsselwortes. Falls diese Anweisung ein allgemeiner Tabellenausdruck oder eine XMLNAMESPACES-Klausel ist, muss die vorherige Anweisung mit einem Semikolon abgeschlossen werden.

Gruß, maYer

19.09.2007 - 09:43 Uhr

Hi,
in xml gibt es bestimmte Regeln, die du hier findest: Regeln 😉

Eventuell würde ich das Design der XML-Datei anpassen. und nicht so viel mit Attributen arbeiten.

Gruß, maYer

18.09.2007 - 16:08 Uhr

Danke herbivore ...
ist ja fast schon peinlich, dass ich 3 Tage später das selbe Problem poste ...

Gruß, maYer

18.09.2007 - 15:02 Uhr

hmm, jetzt wo du es sagst ...
Ich habe mir extra nochmal durchgelesen, ob ich alles richtig geschrieben habe und plausiebel erklärt habe.
Das ich dabei die Frage vergessen habe ist mir nicht aufgefallen 😉

Danke für deine Antwort. Ich werde es mal mit einem anderen Timer versuchen. Ich glaube in der Threaddingklassse einen gesehen zu haben.

Gruß, maYer

18.09.2007 - 14:52 Uhr

Hi,
ich habe einen Service geschrieben, der in regelmäßigen Abständen in der Datenbank schauen soll, ob dort Aufgaben für ihn bereit liegen die er abarbeiten soll.

Um dieses zu erledigen habe ich in den Service einen Timer implementiert, der alle x Sekunden sein Tick-Event abfeuert. Innerhalb des Events wird der Timer gestoppt und ein Thread zur Abarbeitung wird gestartet.

Am Ende des Threads soll der Timer wieder gestartet werden.

Es wird also auch nicht alle x Sekunden nachgeschaut sondern es sind x Sekunden Pause zwischen den Abarbeitungen. Das ist auch in Ordnung und gewollt so.

Hier einmal der Code, der den Timer beeinflusst:


//Im Klassenkopf:
System.Windows.Forms.Timer t;

//im Konstruktor:
//Timer aufbauen und starten.
t = new Timer();
t.Interval = 600;
t.Tick += new System.EventHandler(DoWork);
t.Enabled = true;
t.Start();

//irgendwo in der Klasse:
private void DoWork(object sender, EventArgs e)
{
      //in eine TextDatei schreiben.
}

Der Konstruktor wird auf jeden Fall ausgeführt aber ich schaffe es leider nicht in die Textdatei zu schreiben und das kann nicht das Problem sein 😉

Danke für eure Hilfe,

maYer

13.09.2007 - 16:57 Uhr

Dann schau mal hier: Link

Gruß, maYer

13.09.2007 - 16:54 Uhr

Du kannst das TextChangedEvent abfangen und selbst an dem Inhalt manipullieren oder dich in die in der Textbox integrierte Vallidierung einarbeiten.

Gruß, maYer

13.09.2007 - 16:48 Uhr

Über den Objectbrowser in Visual Studio kannst du dir alles anschauen.

13.09.2007 - 15:08 Uhr

Hi Arthuro,
ich würde Dir empfehlen nicht das DataGridView zu nehmen sondern die ListView. Sie ist schlanker und besser zu handeln.

Für eine Tabellenansicht musst du nur das View-Propertie anpassen um mehrere Spalten anzeigen zu können und die Spaltenköpfe benennen.

Anschließend kannst du die ListViewItems mit einem ListViewSubItem als 2. Spalte hinzufügen und kommst zu dem gewünschten Anzeigeergebnis.

Gruß, maYer

13.09.2007 - 13:26 Uhr

Gerade bei größeren Projekten mit großen Tabellen und vielen Daten (am besten noch Varchar) würde ich die Referentielle Integrität nutzen, weil es für den Kunden günstiger ist einen dicken Server zu kaufen als alle Clients hochzupimpen.

Also für mich würde in diesem Fall die Performance wichtiger sein als dass ein Entwickler vergisst, dass die Daten über RI mitentfernt werden.

Anders sieht es bei SP´s aus. Die kommen mir nur in die DB, wenn eine Schnittstelle zu einem Fremdprodukt aufgebaut werden muss.

Gruß, maYer

13.09.2007 - 11:20 Uhr

Ich würde Differenzieren.
Wenn du das der DB mit boardeigenen Mitteln wie Referenzielle Integrität beibringen kannst, dann würde ich es in die DB packen.
Wenn du das nicht machen kannst und das via SP´s integrieren müßtest, dann würde ich es in die BL packen.
Damit hast du den Source Code zentralisiert und kannst bei einer Portierung nicht vergessen ihn mit zu portieren.

Gruß, maYer

12.09.2007 - 16:58 Uhr

Ihr seid meine Helden 😉

In der MSDN ist beim Socket ein wunderbares Beispiel erklärt um die Daten zu senden.

Many Thanx for Help!!

Jetzt kommt die Arbeit um das ganze schön zu machen und zu standardisieren 🙂

Gruß, maYer

12.09.2007 - 15:47 Uhr

Hi,
danke für das Beispiel.

Ich melde mich wieder, wenn ich es geschafft habe oder wenn ich doch noch Probleme habe 😉

Gruß, maYer

12.09.2007 - 14:31 Uhr

Hi,
auf den Windowsdienst kann ich jetzt zugreifen. Das ist schonmal eine schöne Sache 🙂

Aber auch leider nur die halbe Miete ...

Ich beschreibe mal mein zu lösendes Problem und meine angedachte Vorgehensweise:

Problem:
Ich möchte eine allgemeine Ressourcenaufwendige Datenbankoperation auslagern. Diese Operation kann nebenher ausgeführt werden und beeinflußt nicht das weitere Arbeiten der Clients.

Lösung:
Ich habe einen Netzwerkdienst, der darauf wartet, dass er von einem Client über eine noch nicht definierte Methode zwei String Parameter bekommt. Diese Parameter werden in die Datenbank geschrieben.

Anschließend geht ein Thread im Windowsdienst ( der die Tabelle beobachtet ) her und führt die ebend genannte große Operation durch.

Es sind bei mir noch folgende Fragen offen:
Wie komme ich jetzt an den Netzwerkdienst?
Ich habe ihn glaube ich gestartet (Muss mal ein Logging einbauen 😉 ) und der Port ist auch festgelegt und bekannt.

Wie muss der Aufbau des Netzwerkdienstes sein, dass ich ihm die zwei erwähnten Werte übergeben kann?

Tjoa, es ist schon schwer, wenn man sich als Neuling in Bereichen einarbeiten möchte... Für alle beteiligten 😉

Gruß, maYer

12.09.2007 - 13:15 Uhr

Super, danke!!

Werde mich gleich mal ins Getümmel wühlen und schlau machen 😉

Gruß, maYer

12.09.2007 - 12:59 Uhr

Hi,
ich habe auf der Basis des Artikels einen Windows Service eingerichtet, der einen Netzwerk Dienst beinhaltet.

Es ist für mich das erste mal, dass ich mit Diensten arbeite und ich habe leider keine Ahnung, wie ich auf diesen Dienst zugreife. Auch habe ich mir schon das Kapitel im Galileo durchgelesen und habe leider keine entsprechenden Infos gefunden.

Kann mir jemand vll. einen Tip oder Link geben? Oder habe ich etwas überlesen?

Ich werde mal weiter schauen, ob ich doch noch fündig werde...

Gruß, maYer

12.09.2007 - 12:29 Uhr

Hi, versuch mal:


try
            {
                XmlDocument myXmlTextReader = new XmlDocument();
                myXmlTextReader.Load(@"\serverlist.xml");
                XmlElement elemente = myXmlTextReader.DocumentElement;

                foreach (XmlNode inhalt in elemente.ChildNodes)
                {
                    MessageBox.Show(inhalt.Name + ": " + inhalt.InnerText);
                }
            }
            catch (Exception message)
            {
                MessageBox.Show(message.ToString());
            }

Gruß, maYer

10.09.2007 - 19:50 Uhr

Doch doch, das geht.
Lies dir das: Isolation Level
das: Insert (äquivalent zu Update etc.)
und das: Tabellenhinnweis
mal durch 😉

Achte bei dem Insert auf den WITH Parameter.

Gruß, maYer

07.09.2007 - 15:50 Uhr

Hi yetibrain,

nach ein bisschen Suchen bin ich auf ERWin gestoßen aber ERDWIN habe ich leider nicht gefunden. Mit guten 7.000€ ist mir das auch ein bisschen zu teuer.
Auch fehlt die Unterstützung von ORACLE, die bei mir dann doch recht wichtig ist.

Ich habe mir aber auch eine Alternative angeschaut.
Von Altova gibt es das Produkt DatabaseSpy. Das schaut auf den ersten Blick gar nicht einmal schlecht aus. Leider war es mir bis lang nicht möglich dort auch Rellationen anzulegen. Auch werden in meiner Trial - Version keine Primary Keys angezeigt 🙁

Ich weiß jetzt nicht, ob es daran liegt, dass ich mit auf einen MSSQL 2005 zugreife oder ob es daran liegt, dass es eine Trial ist. Evtl. liegt es auch an etwas anderem aber das werde ich noch herausbekommen.

Falls jemand noch eine Alternative kennt, wäre ich ihm sehr dankbar, da ich bevor ich Geld ausgebe gerne viele Möglichkeiten ausprobiere.

Gruß, maYer

07.09.2007 - 11:26 Uhr

verwendetes Datenbanksystem: MSSQL und ORACLE

Hi,
ich möchte meine momentane Datenbank gerne Redesignen.
Ich habe die Datenbank für eine zügige Entwicklung von meinem Vorgänger übernommen und trage nun eine Menge Altlasten mit mir herum. Zum Beispiel war es so designed, dass ich DB - Management Systeme wie Interbase etc. unterstützt habe.
Inzwischen habe ich einen Cut gemacht und unterstütze nur noch MSSQL und Oracle.
Um die vorteile der großen DBMS zu nutzen möchte ich Dinge wie z.B. RI, Views etc. integrieren
Kann mir jemand ein Tool (nach Möglichkeiten Kostenlos) empfehlen, mit dem ich ein altes DB Modell einlesen und verändern kann?

Es würde auch gehen, dass ich das DB - Modell neu aufbaue. Dann wäre aber dafür auch ein Tool ganz nett, mit dem ich ähnlich verfahren könnte wie mit dem Model Designer aus MSSQL.

Gruß, maYer

06.09.2007 - 10:58 Uhr

Hi Der Tim,
ich habe leider nicht genau verstanden, wo du hin möchtest. Das wären meine beiden Wege.

Ausgangssituation


<asdf>ddddd</asdf>
<jkl>qwer</jkl>
<asdf>sdeikci</asdf>

Ergebnis 1:


ddddd
<jkl>qwer</jkl>
sdeikci

Hier würde ich einfach die Datei als Textstream einlesen und die ungewünschten Zeichenketten entfernen.

Ergebnis 2:


<jkl>qwer</jkl>

Hier würde ich die XML-Datei mit der XML-Klasse aus dem .Net-Framework öffnen und via xPath nach den Knoten suchen um sie zu entfernen.

Ich muss aber auch sagen, dass ich Regex.Replace nicht kenne und nicht weiß, was man damit machen kann.

Gruß, maYer

04.09.2007 - 17:12 Uhr

Wenn ich es richtig verstehe, sollte das ausreichen:


for(..)
{
if(this.label[i] == null)
{
   this.label[i] = new Label();
}
this.label[i].Location = new Point(10, yLabel);
this.label[i].Size = new Size(200, 20);
this.label[i].Parent = this.panelFilter;
}

gruß, maYer

04.09.2007 - 15:15 Uhr

Ich weiß nicht, was ich sagen soll ...
Ich bin begeistert, dass es wahrlich so trivial ist!!!

Vor allem bin ich davon angetan, dass BasisListe und BasisListe<T> im selben Namespace existieren können!

Gruß, viel Erfolg und vielen Dank an Alle,

maYer

04.09.2007 - 14:50 Uhr

Soweit habei ch es auch verstanden.

Ich habe glaube ich auch mehr das Problem bei der Scnittstelle IEnumerable.
Bis lang habe ich immer diese Methode für einen eigenen IEnumerable implementiert ohne das Interface eingebunden zu haben:


public IEnumerator<T> GetEnumerator()
        {
            for (long i = 0; i < Count; i++)
            {
                yield return (T)this[i];
            }
        }

Jetzt sagt die Basisklasse aber, wenn ich die Schnittstelle IEnumerable einbinde, dass ich noch den Member:


        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            
        }

implementieren muss.

Was kommt da rein?

Ich hoffe ich weiche nicht zu weit vom Thema ab.

Gruß, maYer

04.09.2007 - 14:30 Uhr

Hmm, ich fnde das Thema Generics einfach an Sich verwirrend und habe ins Geheim gehofft, dass mir jemand sagt, dass es nicht möglich ist.

Ich lese mir glaube ich erstmal den MSDN Beitrag durch und stelle dann noch einmal konkrete Fragen.

Danke schonmal für die erste Info!

Gruß, maYer

04.09.2007 - 14:21 Uhr

Hi,
ich hoffe ich drücke mich verständlich aus, und jemand hat eine Idee.

Ich habe in meinem Projekt mehrere Listen implementiert.
für diese Listen habe ich eine Basisklasse erstellt, da ich nicht alle Funktionalitäten von der Klasse List<T> unterstützen möchte.

Da ich vor ein paar Monaten noch nicht soweit gewesen bin, dass ich mir eine generische BasisListe bauen konnte, wollte oder wie auch immer, habe ich in die BasisListe eine Liste List<object> zum verwalten eingebaut und caste in jeder abgeleiteten Klasse fröglich um. Was ja eigentlich nicht Sinn der Sache ist 😉

Auch habe ich in jeder abgeleiteten Klasse das Interface IEnumerable neu implementiert, was ich zwar schon immer unschön fand aber es hat ja funktioniert.

Soweit zum IST-Zustand.

Im SOLL-Zustand möchte ich gerne im Moment des ableiten sagen können, von welchem Typ die Member der Liste sind. Etwa in der Art:


public class Notes : Base.Objects.BasisListe<Note>
{
}

In der Basisklasse ist dann auch das IEnumerable Interface implementiert und ich muss nicht mehr Casten etc.
Ist das möglich?

Danke für Eure Hilfe.

Gruß, maYer

04.09.2007 - 12:05 Uhr

Hi,
um es einfach zu halten habe ich meinen Logger statisch gemacht.
Dadurch ist es mir möglich ihn überall aufzurufen, wo ich es möchte ohne eine Instanz zu erstellen.
Zusätzlich würde ich den Inhalt immer über die System.IO.File Klasse schreiben und keinen StreamWriter nutzen. Dadurch musst du auch kein öffnen oder schließen aufrufen.

Gruß, maYer

31.08.2007 - 14:51 Uhr

Deswegen meinte ich das mit der Methode und den Übergabe Parametern oder wenigstens der Variablen Zuweisung:


string sourcePath = @"\\Computer\1$\";
string destPath = @"\\" + this.Servername + @"\c$\Temp\";
string fileName = "dll.bat";

File.Copy(sourcePath + fileName, destPath + fileName, true);

Gruß, maYer

31.08.2007 - 14:31 Uhr

ich habe mich verlesen ...
grmml ... sry.

Was ist denn, wenn du das versuchst:


File.Copy(@"\\Computer\1$\dll.bat", @"\\" + this.Servername + @"\c$\Temp\dll.bat", true);

31.08.2007 - 14:20 Uhr

ersetze mal:

Original von BFreakout

  
File.Copy(@"\\Computer\1$\dll.bat", @"\\" + this.Servername + @"\c$\Temp\", true);  
  

gegen


File.Copy(@"\\Computer\1$\dll.bat", @"\\", this.Servername + @"\c$\Temp\", true);

Als Tip um solche Fehler in Zukunft nicht mehr zu machen:
Mache eine eigene Kopieren Methode, in der du die Prüfungen und das Error-Handling einbaust. Diese kannst du dann mit den Parametern aufrufen und der Fehler kann nie wieder auftreten.

Gruß, maYer

31.08.2007 - 14:17 Uhr

Ich muss mich auch entschuldigen, ich kopiere immer mit:


System.IO.FileInfo fi = new System.IO.FileInfo(filePath);
fi.CopyTo(destName);

Ich kann mir aber nicht vorstellen, dass darin die Lösung liegt.

31.08.2007 - 13:50 Uhr

Hi Domeeeeeee,

ich weiß nicht, ob ich deinen Weg richtig verstanden habe.
öffnest du jedesmal den Standard Browser, der dann das Google Ergebnis anzeigt?

Wenn dem so ist, dann ist das glaube ich der falsche Weg.
Es gibt im Framework Klassen, mittels denen man eine Webseite aufrufen kann. Als Ergebnis erhält man dann einen Textstream, denn man beliebig (auch nach Links) durchsuchen kann.

Vielleicht beschreibst du dein Vorgehen mal ein bisschen von der technischen herangehensweise, damit man sich ein besseres Bild von deinen Problemen machen kann.

Have Fun,

maYer

31.08.2007 - 13:32 Uhr

Bei mir funktioniert es auch.
Ich kopiere fröhlich mit der selben Standard Methode vom Server und auf den Server.
Allerdings kopiere ich nie von oder auf C$ sondern ich benutze nur explizite Freigaben.

Deswegen meine Bitte von oben.

31.08.2007 - 12:58 Uhr

Ich habe leider keine Lösung sondern nur ein Testscenario, was das Problem eingrenzen könnte:

Funktioniert es auch nicht, wenn du in ein explizit freigebenes Verzeichniss auf dem Server kopierst?

Gruß, maYer

30.08.2007 - 15:12 Uhr

Wenn dabei kein Fehler auftritt, ist das schonmal gut.

Jetzt such mal nach "mdb auslesen" und schau dir an, wie andere weiter verfahren.

Außerdem lies mal nach worin der Unterschied bei lokalen und globalen Variablen liegt.

Gruß und viel Erfolg,

maYer

30.08.2007 - 14:55 Uhr

Hmm, du scheinst noch nicht sooo lange zu Programmieren.

Hier ein kleiner Tip:
Teile dein Projekt in kleine Unterprojekte auf.
Bei dir z.B. Verbindung aufbauen - Daten lesen - Daten verändern - Daten einfügen.

Wenn du das getan hast, versuchst du Schritt für Schritt dein Projekt durch zu ziehen. Bei konkreten Problemen kannst du dann die Suche oder die MSDN benutzen und auch hier Fragen.

Aber so eine Frage wie: "Ich möchte ein Haus bauen, kann mir bitte jemand eins zuschicken?" wird dir keiner beantworten weil du dadurch nichts lernst.

Vielen Grüße,

maYer