Laden...
S
Sclot myCSharp.de - Member
IT-Fachinformatiker richtung Anwendungsentwicklung Bremen Dabei seit 02.05.2007 324 Beiträge
Benutzerbeschreibung

Forenbeiträge von Sclot Ingesamt 324 Beiträge

30.08.2010 - 16:16 Uhr

verwendetes Datenbanksystem: <MySQL> / Linq2Mysql (dbLinq2007)

Ich habe folgenden SQL-Query:


SELECT 
    s.zustaendiger_mitarbeiter_id AS id, 
    Concat(ma.vorname,ma.nachname)AS name,
    SUM(s.primaer_id!=0) AS gesamt,
    SUM(s.gelesen=1) AS gelesen, 
    SUM(s.gelesen=0) AS ungelesen 
FROM 
    supportfaelle AS s, 
    mitarbeiter AS ma
WHERE 
    s.zustaendiger_mitarbeiter_id = ma.primaer_id
GROUP BY 
    s.zustaendiger_mitarbeiter_id

Das funktioniert so recht gut.
Erstellt dann eine Tabelle mit einer übersicht wie diese:


|id |name |gesamt|gelesen|ungelesen|
+---+-----+------+-------+---------+
|1  |mi1  |215   |0      |215      |
|2  |mi2  |84    |3      |81       |
|3  |mi3  |138   |0      |138      |
|4  |mi4  |109   |0      |109      |
|5  |mi6  |179   |0      |179      |
|6  |mi6  |66    |0      |66       |

Nur... wie macht man sowas tolles jetz in Linq? 😕

17.08.2010 - 15:46 Uhr

Ja, das tut er.

Was bringt mir diese Erkenntnis jetzt?

17.08.2010 - 14:55 Uhr

Das ist... hm...
Dann müsste ich also das was der Thread wirklich macht, alles im DoWork() machen.
Aber dann bekomm ich diesen Speicherzugriffsfehler da.

Äzend 😦

17.08.2010 - 13:47 Uhr

Ich habe jetzt ein Programm, welches mit Emails als EML Dateien aus David Tobit Exportiert.

Der Export funktioniert über die API als eingebundene DLL Funktion:


[DllImport("dvapi32.dll", CallingConvention = CallingConvention.StdCall, EntryPoint = "DVEmlFromMailItem")]
public extern static long DVEmlFromMailItem(MailItem oMailItem, StringBuilder Path);

Diese Methode ist in einer Klasse "Tobitfunktionen" untergebracht.
Ebenfalls darin steckt eine methode, welche ein Archiv Rekursiv durchläuft und dann für die Mails, die gefunden wurden einen Export mit oben genannter Funktion macht.
Nach jeder Mail wird ein Event aufgerufen, welches mir Meldungen an die GUI zurück gibt (Welche Mail da gerade exportiert wurde).

Auf meiner Form hab ich einen BackgroundWorker.
Dieser bgw ruft im DoWork() die Rekursive Methode aus der Tobitfunktionen auf.

So..
Wenn ich das direkt so mache, bekomme ich beim Export einen Fehler:

Fehler: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.

So...
kurz nachgedacht (vermutlich zu kurz) und heraus kam:
Ich erzeuge mein Objekt der Tobitfunktionen Klasse in der GUI, versuche aber mit dem DoWork() den bgw darauf zuzugreifen.
Da der DoWork() rein technisch wohl ein eigener Thread ist, könnte man hier ein Delegaten bauen und dann die eigentliche Methode aus der Klasse Invoken.

Also hab ich das umgebaut:


		# region Das hier gehört alles zum DoWork()
		// Hier wird ein Delegat definiert.
		// Den Delegaten brauchen wir, weil wir aus einen fremden Thread (BGW) auf ein Objekt zugreifen wollen, welches im GUI-Thread erzeugt wurde.
		delegate void tobitfnk_eMail2eml(string Pfad);
		
		// Eine Methode, die im GUI-Thread ausgeführt wird, soll über den Delegaten aufgerufen (Invoked) werden.
		private void eMail2eml(string Pfad)
		{
			tobitfnk.worker = backgroundWorker1;
			tobitfnk.eMail2eml(Pfad);
		}

		//#####################################################
		// !!! Achtung !!! DAS GANZE DoWork() ist ein eigener Thread!!!
		void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
		{
			// In diesem Thread wollen wir die eMail2eml Methode aus dem GUI-Thread über den tobitfnk_eMail2eml Delegaten Invoken
			Invoke(new tobitfnk_eMail2eml(eMail2eml), new object[] { e.Argument.ToString() });
		}
		//#####################################################
		#endregion 

Und was passiert nun?
Ja... Der Export funktioniert. Emails werden auch angelegt - alles toll.
ABER - die GUI Blockiert jetzt komplett.
Aber nicht dieses typische "keine Rückmeldung" mehr, sondern einfach nur stumpfes blockieren, kein verschieben, kein klicken, nixx geht.
Aber ich sehe mein Änderndes Label, das über den Event aus der Rekursiven Funktion geändert wird.

So...
Weiter geforscht...
Ich melde meinen Fortschritt aus der Rekursiven Funktion wie oben geschrieben über Events, welche dann die Labels meiner Form setzen.
Dachte damit könnte es vielleicht zu tun haben.
Jetzt hat der BackgroundWorker an sich schon einen Event "ReportProgress" welchem man auch schön ein Objekt als Userstate Parameter übergeben kann.
Also Alle Events raus gebaut und die Meldung über das ReportProgress gemacht.
Ja.. nun blockiert die GUI noch mehr, weil ich nicht mal mehr eine Veränderung im label sehe, das geändert werden sollte.

Irgenwie übersteigt das jetzt alles meinen Horizont.

Kann mich da mal jmd aufklären warum das so ist?

15.08.2010 - 00:27 Uhr

Gehts vielelicht etwas genauer?
Um welche Datenbank geht es?
Was wollt ihr am Ende damit erreichen?

05.08.2010 - 13:17 Uhr

Ui...
Da geht man seinen Azubi mal was erklären und dann so viele Antworten 😃

Gut, Dann arbeite ich mich da mal durch und Berichte...

Danke!

Edit:

Ich hab dort http://code.google.com/p/modelshredder/ auch ein lustiges Projekt gefunden, welches eine ExtensionMethod zur verfügung stellt um aus einer List<> eine DataTable zu machen, welche man dann im DGV auch sortieren kann 😃

05.08.2010 - 11:13 Uhr

Naja.. Wenn ICH das mache, dann wird das nicht grad das Performance-Technische Wunderwerk werden 😉

Und ja, nach meinem Minimalen Wissensstand gibt NHibernate das mit der .List() Methode so vor.

05.08.2010 - 10:39 Uhr

Guten Morgen,
Ich bin immer noch dabei mit NHibernate rum zu spielen.
Jetzt ist mir folgendes aufgefallen:

Wenn ich eine Liste von Objekten aus der DB hole...


System.Collections.IList bsp = _Session.CreateCriteria(typeof(tA.DBModels.SYSTEM_PLUS)).List();

Dann liegen sie in einer ArrayList vor.
Diese kann ich als DataSource an ein DataGridView zuweisen.
Leider kann ich die Spalten in dem DGV nicht sortieren (Über klick im Header).

Bei Google findet man einige Menschen die auch solch ein Probleme haben, aber nie wirklich eine Lösung dafür.
Letzendlich scheint so ein GDV echt nur Sinnvoll mit DataTables umgehen zu können.

Ich brauche eine Visuelle Darstellung meiner Objekte in einer Liste mit Sortierungs-Möglichkeit.

Irgendjemand eine Idee wie man das anstellen könnte?

30.07.2010 - 22:13 Uhr

Guten Abend 😃

Ich habe mich die letzten tage etwas in nHibernate eingelsen.
Habe es jetzt auch schon so weit das ich ein Objekt mit Verschachtelten Unterobjekten (z.b. Rechnung mit Positionsdaten) lasen und speichern kann.

Jetzt würde ich dieses Objekt gern nehmen und an List&Label (14) übergeben.
Bis jetzt habe ich nur DataSet´s übergeben, wollte mir jetzt aber nicht die mühe machen und das Objekt in ein DataSet umschreiben.

Wenn ich das Objekt selbst übergebe, mekcern L&L, das es kein IEnumerable enthält.
Ja.. Schade....

Hat das schon mal jmd gemacht und hätte eine Idee für mich, wie ich das anpacken kann?

Danke!

24.07.2010 - 11:59 Uhr

Mhm...
Man könnte das dataset auch als klasse im code zur laufzeit erzeugen und aus dieser klasse ein singleton machen.
Dies könnte man dann auch von jeder anderen stelle aufrufen.

Ein anderer weg, kommt drauf an wie oft man dieses dataset braucht, wäre es mit writexml zu speichern und mit readxml an der stelle wieder einzulesen an der man es dann wieder benötigt.

20.07.2010 - 16:59 Uhr

Kann ich mir den typ der Form im Tag der form weg speichern und dann in der Schleife wieder casten?

ist das Frickelig? 😕

20.07.2010 - 16:50 Uhr

Hallo 😃

Ich habe in einer Anwendung mehrere Forms.
Diese Forms leiten alle von einer Klasse NormForm ab.

NormForm leitet von Form ab.
In der Normform sind Methoden definiert wie z.b.:

  • datenladen()
  • datenspeichern()

Die Forms, welche von der NormForm ableiten, können z.B. sein:

  • AdressForm:NormForm
  • AuftragsForm:NormForm
  • RechnungsForm:NormForm

Diese Forms liegen in einem Panel auf einer "Hauptform", ist einfach nur eine weitere Form über welche die methoden der "unterforms" aufgerufen werden sollen.
Jetzt kommt das Problem an der Sache.

Wenn ich die Unterforms in einer Schleife durch gehe:
foreach(Normform form in this.Controls)

und in dieser schleife dann die methode aufrufe:


foreach(NormForm form in this.Controls)
{
  // irgendwie rausfinden, welche meine aktive form ist
  // und dann die Methode der Form aufrufen
  form.datenspeichern();
}

Dann wird die Methode aufgerufen, die in der NormForm programmiert ist.
Ok, da durch, dass ich diese Form jetzt auf NormForm gecastet habe, denke ich kann ich da nur die Methode in der NormForm aufrufen.
Aber... wie kann ich jetzt die spezifisch in den einzelnen Forms Programmierten Methoden aufrufen, wenn ich den genauen Typ in der Schleife nicht kenne?

17.07.2010 - 12:53 Uhr

Passiert der zugriff über LAN oder Internet (verbindungsprobleme)?
Machst du übermäßig viele Abfragen (Problem mit gleichzeitig offenen Connections) ?

Hast du schön Using-Blöcke und try/catch verwendet?
Man sieht leider nichts von deinem Code für den zugriff 😕

14.07.2010 - 20:08 Uhr

Viel kann man damit nicht machen...
Entweder er programmiert ne Stoppuhr für seine Swatch-Uhr...
oder er hackt nen digitalen Bilderrahmen 😉

14.07.2010 - 18:34 Uhr

Ja - den Grund, dass ich ausschließen wollte das es eben daran liegt das zu viel obfuskiert wird 😉

Aber ich kann auch generell keine Events, Methoden, Eigenschaften obfuskieren, weil die exe, die auf die public events/methoden/eigenschaften zugreift diese sonst nicht finden würde.

Also..
Ich schau mal eben nach...

ich hab jetzt eingestellt:

virtualfunctions="true"
obfuscatetypes="false"
obfuscateevents="false"
obfuscatemethods="false"
obfuscateproperties="false"
obfuscatefields="false"
unicodenormalization="true"
flattennamespaces="false"
stringencryption="true"
controlflowobfuscation="true"
iliterations="5"
emitinvalidopcodes="enhanced"
suppressildasm="true"

Gibt es eigentlich irgendwo eine Doku, was diese ganzen hübschen Schalter alle machen?
Ich hab mir damals nur den NAnt Task runter geladen - und ich glaube mich erinnern zu können, dass es dazu keine Doku gab außer ein Beispiel, wie man es einbindet.

14.07.2010 - 17:26 Uhr

hm.. auf so eine Idee muss man erstmal kommen...
Ich teste mal 😃

hahahahahaha...
Wie geil is das denn wieder?
ja, das wars dann wohl...
Ich weiss auch nicht warum ich da nicht drauf komme.
Zu viel Sonne... Dringender Urlaub nötig...

Aber.. DANKE! 😃

14.07.2010 - 17:15 Uhr

Babel Free als NANT-Task

Keine Signierung

Der Task sieht bei mir so aus:


	<target name="Babel_Obfuscator_Free">
		<babel inputfile="C:\Projekte\Exporter\DLL\bin\Debug\ExporterDLL.dll"
					 outputfile="C:\Projekte\Exporter\DLL\bin\Debug\ExporterDLL_babbel.dll"
					 virtualfunctions="false"
					 obfuscatetypes="false"
					 obfuscateevents="false"
					 obfuscatemethods="false"
					 obfuscateproperties="false"
					 obfuscatefields="false"
					 unicodenormalization="true"
					 flattennamespaces="false"
					 stringencryption="true"
					 controlflowobfuscation="true"
					 >		
					 <!-- 
					 iliterations="5"
					 emitinvalidopcodes="enhanced"
					 suppressildasm="true"
					 -->
			<rulesfiles refid="rules" />		
		</babel>
		
	</target>

Wird dann danach mit einem Move-Task zum alten Datei-Namen umbenannt.

14.07.2010 - 17:00 Uhr

Wenn er wegen der öffentlichen methoden meckern würde, dann denke ich, würd eine andere Fehlermeldung kommen wie z.B.: "Der Typ BlahBlubb konnte nicht gefunden werden".

Oder?

14.07.2010 - 15:16 Uhr

.NET Micro Framework Roadmap

^^ mit dem 4.1 soll es wohl möglich sein

14.07.2010 - 15:13 Uhr

Hm...
Was siehst du denn in deiner IDE?
Mach doch mal nen Screenshot 😃

Hast du die richtige Projektvorlage ausgewählt?

14.07.2010 - 15:00 Uhr

Ein WinForm Projekt benutzt ein weiteres Projekt als Klassenbibliothek.
Das DLL-Projekt ist als verweis in dem WinForm Projekt hinzugefügt.

Die Build-Ausgabe aus dem projekt wird anschlißend Obfusciert (Gibts da ein Deutsches wort für?)

Habe ich nun Winform.exe und Obfuscierte DLL in einem verzeichnis und versuche die exe aufzurufen, kommt die Fehlermeldeung:

System.IO.FileLoadException: Die Datei oder Assembly "ExporterDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)
Dateiname: "ExporterDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
bei Exporter.Form1.Form1_Load(Object sender, EventArgs e)

Das würde jetzt bedeuten, das ich mein Winfom Projekt immer gegen die Obfucierte DLL kompilieren müsste um dieses Problem nicht zu bekommen.

Das ist aber nicht grad sehr benuterfreundlich 😕

Irgendwelche Ideen?

14.07.2010 - 14:33 Uhr

auf http://blog.programmerslog.com/?p=4 ist beschreiben wie man eine SVN-Toolbar in das VS Express rein zaubern kann.

Ob das noch mit dem VS2010 funktioniert, weiss ich allerdings nicht.

09.07.2010 - 00:04 Uhr

Ich hab mit mal mit hilfe von http://frickelblog.de/?p=168 und http://frickelblog.de/?p=175 eine mini doku geschrieben.
List die XML Datei aus die das VS erstellt und dann kannst du mit der DataTable alles machen 😃

04.07.2010 - 14:47 Uhr

SQLite kann auch Blobs... 😉

Ich hab nie mit Firebird gearbeitet - aber wenn ich wie wahl zwischen SQl Compact und SQLite hätte, würd ich SQLite benutzen wollen.

03.07.2010 - 13:34 Uhr

MSI Pakete kannst du übrigens auch mit Wix (http://wix.sourceforge.net) erstellen.
Ist der Microsoft Installer, den MS auch selbst benutzt.

Die einarbeitung dauert etwas - aber wenn man es mal verstanden hat, dann kann man ziemlich viele tolle sachen damit machen 😃

30.06.2010 - 16:20 Uhr

Öhm...
Dann muss ich für jede Spezialprogrammierung, welche von der Standard-Programmierung abweicht so ein eigenes Decoration-Ding basteln?

...oder mir grundlegend Gedanken über meine Architektur machen?

30.06.2010 - 15:50 Uhr

Was ich machen möchte ist.... ich möchte das, was der Button in der abgeleiteten Klasse macht überschreiben.

Das machen wir hier jeden Tag und gehört zur ganz normalen vorgehensweise dazu.
Manchmal hat man eben den Fall, dass man nicht das möchte, was der Button normalerweise macht, sondern etwas anderes.

Dann müsste ich erst wie oben beschreiben diesen Button noch mal ableiten und in diesem Abgeleiteten Button die Methode überschreiben, die es betrifft.

Sprich... ich hab jetzt einen Abgeleiteten Button BasisButton:


class BasisButton:Button {}

In dem ist irgednwo eine Methode "lock()" definiert, die einen bool entgegen nimmt, und dann entscheidet ob enabled=true oder false, je nach übergeben bool.
Die eigene lock() methode deshalb, weil es diese auch in einer Textbox gibt.
Dort möchte man aber z.b. kein Enabled=true/false haben, sondern ein Readonly, weil sich die textbox anders verhält.

Möchte ich jetzt also für einen Bestimmten Button nicht, das dieser die standard-Programmierung ausführt, weil dieser z.b. IMMER enabled sein soll, muss ich diesen Button noch mal ableiten:


class SpezialButton:BasisButton
{
    public override void lock(bool sperren)
    {
        // Auskommentiert, weil soll immer Enabled sein
        //base.lock(sperren);
    }
}

Und diesen Button müsste ich dann auf meiner Form benutzen.

Ich würde mich wirklich sehr gern von allem loslösen - aber dazu brauch ich ein wenig geistige Hilfe, wie man es "normal" machen würde 😃

Wo sind meine lieben Ex-VFP´ler hin? 😉

30.06.2010 - 15:03 Uhr

So...
Wieder einmal eine Frage, welche sich durch den Umstieg von VFP auf C# ergibt.

Diesmal geht es um das Überschreiben von Methoden.

Ich habe z.B. eine Buttonklasse "BasisButton".
In dieser Klasse gibt es eine Methode lock().
Diese Methode wird aufgerufen wenn sich deiser Button auf einer Form befindet und dann z.B. beim Ändern durch eine schleife aufgerufen wird,,welche alle Bottons durch geht, die die lock()-Methode haben.

Jetzt soll EIN bestimmter Button aber nicht die Standard-Programmierung aus dieser Klasse machen, sondern etwas anderes, z.b. genau das entgegengesetzte.

Der Objektorientierte ansatz wäre jetzt vermutlich folgender:


class SpezialButton 
{
    public override void lock(bool sperren)
    {
        base.lock(!sperren);
    }
}

Ich muss mit also einen neuen knopf Ableiten, in welchen ich die Methode so überschreibe, wie ich sie brauche.
Wenn ich das jetzt für 5 Bottons, bei 3 verschiedenen Methoden habe, bedeutet das, das ich locker mal bis zu 9 abgeleitete Buttons haben kann, weil alle was anderes machen.

In VFP war dies anders.
Da konnte man einfach in den Eigenschaften auf den Reiter "Events/Methoden" gehen und die Spezielle Methode dieses speziellen Buttons umschreiben.

So einen Reiter "Events" gibt es im Eigenschaften Fenster zwar immer noch, aber dort sind keine Methoden gelistet, nur Events.

Bedeutet dies jetzt, das mein BasisButton zwingend einen Event braucht, damit ich diesen dort umschreiben kann, wo ich das umgeschriebene Event brauche?

24.06.2010 - 16:14 Uhr

OKay - das mit dem interface funktioniert 😃

Jetzt stellt sich mir noch mal ne andere frage (ich bekomm jetzt bestimmt wieder ärger weil ich dafür keinen neuen thread auf mache).

Ist es Performace- und Ressourcen-Technisch sinnvoller alle Controls in einer schleife durch zu gehen, oder sollte man versuchen in den controls ein event zu registrieren, so dass die Controls von sich aus ihren Zustand ändern können ohne das ich sie in einer Schleife durchgehen muss?

24.06.2010 - 13:55 Uhr

Gute frage..
Dann müsste ich das enabled abfangen und umschreiben, so das in dem enabled dann geprüft wird ob das Control enabled sein soll oder nicht und es dann letztendlich setzen.

Hm.. müsste rein theoretisch funktionieren.

Trotzdem stellt sich mir die Frage noch, wie man eine Methode in seinen ganzen Controls aufrufen kann 😃

24.06.2010 - 13:48 Uhr

Hallo 😃

Ich bin grad dabei ein VFP konstrukt auf C# um zu schrieben.
Es geht darum alle Controls einer Form je nach zustand entweder zu disablen oder zu enablen.

in VFP sieht das ganze bei uns so aus:


local element
for each element IN  thisform.controls
	if pemstatus(element,"lock",5)
		element.lock(plwie)
	endif
next

^^ VFP... quickly und dirtyer 😃

Das ganze würde in etwa in C# wie folgt aussehen:


foreach (Control control in this.Controls)
{
    if (control.GetType().GetMethod("controls_lock") != null)
    {
        object[] parameter = new object[1]; 
        parameter[0] = sperren;
        control.GetType().GetMethod("controls_lock").Invoke(control, parameter);
    }
} 

Dies würde die Eigens definierte Methode "controls_lock" innerhalb der Controls aufrufen - falls vorhanden, welche sie dann je nach zustand disablen oder enablen würde.

Das problem ist, das dies mit Reflection gelöst ist.
Wenn ich mit jetzt einen Obfuscator nehme und die Assemby, welche daraus resultiert obfuskiere und sie dann ausführe, funktioniert das ganze Konstrukt nicht mehr, weil die Strings und methoden-namen auch mit unkenntlich gemacht werden.

Also muss irgendwie eine Möglichkeit her, die nicht mit Reflection arbeitet.
Meine Controls sind alle von den Basis-Controls abgeleitet, welche wiederum von "Controls" erben.
Ich hatte schon eine Idee über ExtensionMethods das "Controls" aufzubohren, aber das ist wohl nicht der elegante weg.

Ich steh mal wieder voll auf dem Schlauch.
Wie komme ich in der Schleife an die Methoden meiner Controls ohne die Schreibe für jedes Control neu bauen und aufrufen zu müssen? 😕

21.06.2010 - 13:12 Uhr

mhm...
Ich denke, wenn du die DBC (also den Datebank-Container) der Tabellen öffnest, statt die DFB´s selbst zu öffnen, dann sollte es auch mit längeren Namen funktionieren.

Das selbe Problem solltest du dann auch mit den Spalten-Namen der tabellen haben, dir sind normalerweise auch begrenzt wenn du nur eine einzelne DBF ohne Container benutzt.

14.06.2010 - 17:44 Uhr

Unter dem Link http://www.west-wind.com/weblog/posts/104449.aspx hat der gute Rick Strahl mal C++ Code geschrieben mit dem man eine DLL bauen kann, die dann wiederum .NET DLL´s laden kann.

Das ganze benutze ich in VFP, damit ist es dann möglich .NET DLL´s in VFP zu benutzen ohne sie auf dem Rechner registrieren zu müssen.

Nachteile daran sind das man z.b. keine Usercontrols bauen kann, die man auf einer VFP Form benutzen kann, oder auch das diese C++ DLL nicht mehr mit dem .NET 4.0 FW zusammen arbeitet.
Aber ich denke das könnte man durch Änderung im Code lösen.

Auf jeden Fall ist VFP eine unmanaged Sprache und kann somit managed Code einbinden.
Und wen das mit VFP funktioniert, geht das sicherlich auch mit anderen unmanaged Sprachen 😃

10.06.2010 - 10:12 Uhr

Das ist mir irgendwie schon klar 😃

Ich meine mit Datenbank wechseln auch wirklich nur die Datenbank wechseln im sinne von Mehr-Mandanten-Fähigkeit - nicht im Sinne von Datenbank-Server wechseln.

Sry, wenn das so missverständlich rüber kam.

10.06.2010 - 09:34 Uhr

OK...

Der Ursprüngliche Sinn des ganzen war, in allen Instanziierten Klassen von einem Bestimmten Objekt (DB-Backend) einen String ändern zu können (den Connectionstring).

Jetzt hab ichs über einen Static String gelöst, der wie beschrieben in allen Objekten immer der selbe ist - praktisch das.

Jetzt stellt sich mir nur die Frage ob was Wechseln der Datenbank im laufenden Betrieb durch das Ändern des Conenctionstrings im DB-Backend Objekt wirklich so eine gute Idee ist oder nicht.

Ein "use DBNAME" vor jedem Query finde ich unschön...
Und ein "SELECT [feld1],[feldx] FROM DBNAME.tabelle" überall einzubauen find ich auch irgednwann unübersichtlich.
Im ConnectionString kann man praktischerweise gleich die Standard-Datenbank angeben, auf welcher man arbeiten möchte, so fallen die beiden oben beschriebenen lösungen weg.

Eure Meinung?

09.06.2010 - 21:07 Uhr

Ich brauch das aber als Referenz, also was tun? 😕

09.06.2010 - 20:56 Uhr

Nabend,

ich bezieh mich mal auf diesen Text:
http://www.guidetocsharp.de/Old/home/index.html?http%3A//www.guidetocsharp.de/Old/guide/guide9.html

Wenn ich jetzt aber folgendes mache:


string a = "db=db1";
string b = a;

a = "db=db2";
Console.WriteLine("a: "+a);
Console.WriteLine("b: "+b);

Dann bekomme ich:


a: db=db2
b: db=db1

Laut dem vielen geschriebenen Worten im oben geposteten Link, sollte doch jetzt in der Variable b auch der Inhalt von a stehen - oder nicht?

Jetzt bräuchte ich zum ersten mal sinnvoll den Inhalt von a auch in b und bin am verzweifeln, weil ichs nicht hin bekomm 😦

07.06.2010 - 13:13 Uhr

mhm....
Wenn dem so ist, wäre das nett 😃

Ja, früher gab es den TFS mal in der Workgroup Edition, aber nur beim MSDN Ultimate, nicht beim Professional.

Aber früher hat der TFS auch mal mehr als 500 Euro gekostet.
So ändern sich die Dinge 😃

07.06.2010 - 11:43 Uhr

Hallo,

Ich werd wohl früher oder später nicht drumherum kommen doch mal einen Lizenzberater in meiner nähe zu suchen (kennt einer einen netten im Raum Bremen? 😃 ), aber vll kann ja vorab jmd was dazu sagen.

Wir haben einst damals ein VS2005 Prof + MSDN Prof gekauft.
Hatten dann ein Upgrade-Recht auf Vs2008 sobald es raus kam.

Nun haben wir unser MSDN Abo verlängert und es ist VS2010 erschienen.
Ich habe nirgends eine Anmerkung dazu gefunden, ob ich nun auch dazu berechtigt bin das VS2010 aus dem MSDN Paket produktiv zu benutzen.
Ich weiss auch nicht ob die Verlängerung des MSDN Abos sich wirklich nur auf das MSDN Paket selbst bezieht oder ob es eben auch das VS betrifft.
Alles Kompliziert...

So das nächste.
In unserem neuen, verlängerten MSDN Paket haben wir nun auch einen TFS2010 drin.
Wie kann man den nun benutzen?

Wenn ich den TFS2010 mit SQL Express benutze, dann stehen mir nicht alle funktionen zur verfügung - darf man ihn dann trotzdem Produktiv einsetzen?

Den TFS2010 mit einem SQL Standard aus dem MSDN Paket produktiv zu benutzen, wird ja nicht wirklich im Sinne von MS sein.

Ich versteh das alles nicht.

01.06.2010 - 12:40 Uhr

Das ist doch die Idee..
Einfach die Freigabe trennen, löschen und wieder verbinden...
Ist auf jeden Fall besser als den kompletten Netzwerk-Verkehr lahm zu legen.

01.06.2010 - 10:50 Uhr

mhm...
Suchst du noch nen Job als Fachinformatiker?
Könntest hier auf jeden Fall ziemlich gut rein passen mit solchen Lösungen 😉

01.06.2010 - 10:39 Uhr

Ich habe folgenden Code um Herauszufinden, welche Dateien in meinen Freigaben geöffnet sind:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.DirectoryServices;
using ActiveDs;

namespace geoeffnetedateien
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			using (DirectoryEntry container = new DirectoryEntry("WinNT://" + "127.0.0.1" + "/LanmanServer"))
			{
				IADsFileServiceOperations fso = container.NativeObject as IADsFileServiceOperations;
				if (fso != null)
				{

					IADsCollection resources = fso.Resources() as IADsCollection;

					foreach (IADsResource resource in resources)
					{
						try
						{
							Console.WriteLine(resource.Path+" / "+ resource.User + " / " + resource.LockCount.ToString());
							
						}
						catch (System.IO.FileNotFoundException ex)
						{
							// Fehler...
						}
					}
				}
			}
		}
	}
}


Als Ausgabe bekomme ich dann:


D:\public\ / Sven / 0
D:\public\ / Sven / 0
D:\public\test\test.dbc / Sven / 0
D:\public\test\test.DCT / Sven / 0
D:\public\test\test.DCX / Sven / 0
D:\public\test\test.dbf / Sven / 0
D:\public\test\test.CDX / Sven / 0

Hierbei handelt es sich um ein paar DBF Tabellen, welche von irgendjemanden über die Freigabe im Zugriff sein kann.

Jetzt brauche ich eine Möglichkeit diese Dateien zu schliessen.
Dabei dürfen sie auch ruhig kaputt gehen, da sie danach ehh gelöscht werden 😃

Das ganze soll programmatisch passieren, weil das irgendwann nachts geschehen soll.
Da hat sich noch keiner gefunden der sich dann die Computerverwaltung des Servers aufruft und die Dateien frei gibt 😉

Ja...
Irgendwelche Ideen zum vorhaben?

31.05.2010 - 13:32 Uhr

Frag das denjenigen, der die Alte Datenbank-Struktur sowei das passende Programm geschrieben hat.
Vielleicht war er einfach nur faul? 😉

Ich hab nur die Aufgabe das ding unter MySQL 5.1 lauffähig zu machen.
Wie du schon geschrieben hast: irgendwer muss immer dran glauben, der dann stirbt 😉

31.05.2010 - 13:16 Uhr

Ah.. gefunden...
Das is der Strict Mode.. ist wohl das standard-Verhalten nach der Installation.


# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Wenn man diesen nun auf folgendes setzt:


# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Dann funktioniert mein oben beschriebenes Verhalten weiterhin.

Wenn Jetzt aber gesagt wird, das MSSQL (uns sich damit sicherlich auch andere Datenbanksysteme so verhalten), dann werde ich lieber meine Tabellen überarbeiten um irgendwo einen Standard zu verfolgen.

DANKE!

31.05.2010 - 12:42 Uhr

Weil ich dann 6 Datenbanken mit je etwas über 300 Tabellen überarbeiten müsste 😦

31.05.2010 - 09:49 Uhr

verwendetes Datenbanksystem: MySQL 5.1

Guten Morgen,

Seit kurzem setze ich hier MySQL 5.1 ein und habe jetzt folgendes "Problem":

Hier mal eine Tabellenstruktur:


CREATE TABLE IF NOT EXISTS `ss_infos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `projekt` varchar(20) NOT NULL,
  `ordner` varchar(100) NOT NULL,
  `datei` varchar(50) NOT NULL,
  `hist_id` varchar(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

Habe ich jetzt einen INSERT, mit dem nicht alle Spalten betroffen sind, bzw gefüllt werden, wie z.B. folgender:


INSERT INTO ss_infos SET projekt='1', order='/', datei='test.txt'

Hierbei wird die spalte "hist_id" nicht gefüllt - bringt er mir den Fehler das "hist_id" keinen DEFAULT Wert hat.
Ja - hat er nicht... soll er aber auch nicht...
Früher hat er da einfach nur einen leeren Eintrag gemacht (entspricht dann DEFAULT '')

Warum funktioniert sowas in MySQL 5.1 nun nicht mehr? 😦

30.04.2010 - 16:58 Uhr

Hallo,

Das Problem am Cassini ist glaube ich, dass der Cassini für jeden Vitual Path einen eigenen Port auf machen will.
Dann müsste ich für jede Seite einen eigenen Port auf machen... das irgendwie unpraktisch 😦

30.04.2010 - 08:56 Uhr

Ah...
Neue erkenntnis!

Wenn ich den bin Ordner der Seite in "F:\www&quot; kopiere, dann kann ich die seite auch im Unterverzeichnis aufrufen.

Und wie kann man das jetzt ändern? 😕

30.04.2010 - 08:17 Uhr

Hallo,

ich benutze hier Cassini für die anzeige von einer mini ASP.NET Seite.
Zusätzlich dazu soll Cassini einen Webservice bereitstellen.

Cassini ist so Konfiguriert das der Virtual Path "/" auf "F:\www&quot; zeigt.
Momentan liegt meine ASP.NET Seite noch in "/" also dementsprechend "F:\www&quot; drin.
Damit funktioniert auch alles wie es soll 😃

Wenn ich diese Seite nun aber in ein Unterverzeichnis schiebe, so dass sie in "F:\www\webseite&quot; liegt und dann auch über "http://127.0.0.1/webseite/default.aspx" aufgerufen werden müsste, kommt folgender Fehler:


Serverfehler in der Anwendung /.
Parserfehler
Beschreibung: Fehler beim Verarbeiten einer Resource, die für diese Anforderung erforderlich ist. Überprüfen Sie folgende Fehlerinformationen und ändern Sie die Quelldatei entsprechend.

Parserfehlermeldung: Der Typ "webseite._Default" konnte nicht geladen werden.

Quellfehler:

Zeile 1:  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="webseite._Default" %>
Zeile 2:  
Zeile 3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


Quelldatei: /webseite/default.aspx    Zeile: 1 

Warum findet er sein Zeug dann nicht mehr?
Was kann man dagegen tun?

Danke!

01.03.2010 - 13:01 Uhr

Nur der Vollständigkeit wegen...

Wir haben uns bzgl. dieses Problems eine Lösugn einfallen lassen, die via Broadcast ein in string ungewandeltes Enum versendet.
Auf das Broadcast-Paket reagiert jeder Rechner im netz, so das alle eine Aktualisierung mitbekommen.

Schlicht und einfach - funktioniert gut 😃