Ja das scheint es zu sein 🙂 Super Big THX 👍 👍
verwendetes Datenbanksystem: SQLite 3
Hallo
In einem Programm verwende ich die eingebettete Datenbank SQLite.
Jetzt habe ich folgendes Problem. Werte die in Zeilen stehen , sollen in einer Zelle zusammengefasst werden. unter MS-SQL geht sowas mit dem "Stuff" Befehl:
select stuff(( select * from tabHaustiere for XML path('')), 1, 7, ' ')
Es soll folgendes gemacht werden mit SQLite:
Quelltabelle:
Tierart # Name # Alter
hund # bello # 5
hund # struppi # 3
katze # mimi # 2
katze # karina # 8
vogel # jogi # 2
vogel # flori # 4
Zieltabelle:
Tierart # Namen # Durchschnittsalter
hund # bello, struppi # 4
katze # mimi, karina # 5
vogel # jogi, flori # 3
Bisher wäre mein SQL Befehl:
select Tierart, Concat(Name) as Namen, avg(Alter) as durchschnittsalter from tabHaustiere group by Tierart
Aber eben der bereich Concat(Name) ..... das geht nicht und den "Stuff" Befehl kenn SQLite auch nicht.
Hat jemand eine Idee?
Grüße Cornflake
Ne ist unterschiedlich meist so etwas im 5MB Bereich. Bisher ist alles auf dem Stick und wird dann meist dort direkt angepasst.
Aber ok werde dann zwei Wege testen.
Zum Einen warten bis sich alles beruhigt hat und dann erst mit dem externen Tool zu arbeiten anfangen.
Zum Anderen erstmal dann alles lokal kopieren, dort extern verarbeiten und erst zum Schluss zurückspielen. Das wird je nach Situation auch schon gemacht, aber eben nicht als feste Vorgabe.
Thx
Grüße Cornflake
Hallo
Danke für eure Antworten.
Das Problem ist, dass wenn mein Tool erkennt, dass ein USB Stick angeschlossen wurde, es ein externes Datenverarbeitungsprogramm startet. Dieses müsste ich ja dann irgendwie wieder abschießen, bzw. wenn das externe Tool versucht Daten auf dem Stick zu bearbeiten es dort dann auch zu Fehlern kommen kann. Zudem wenn ich das abschieße bleibt da noch ein Fehlerstatus zurück und das Tool lässt sich dann nicht so einfach wieder neu starten.
Daher bleibt mir wohl nichts anderes übrig als nach der Anmeldung noch ein paar Sekunden zu warten. Aber wenn dann dieses an-ab-an-ab-an kommt, darf ich nur einmal das externe Tool starten.
Hallo Leute
In meinem Programm erkenne ich mit eienr Bibliothek, ob ein USB Stick angeschlossen wurde oder abgezogen wurde und bekomme den Laufwerksbuchstaben geliefert.
Jetzt habe ich aber ein Problem.
Wenn der Stick das erste mal angesteckt wird, er also eine neue DeviceID hat.
Ich aber vorher schon einen anderen Stick angeschlossen hatte mit gleicher VendorID und ProductID, daher die Treiber für den Stick schon installiert wurden, meldet er den stick dann nach 1 sekundwe wieder ab, macht irgend was und meldet ihn dann wieder an. Ich habe damit beim ersten anschließen so ein an-ab-an-ab-an ablauf, bis er dann zum schluss angemeldet bleibt.
Das bringt meine Software durcheinander, denn beim ersten anmelden, will die vom stick etwas runterkopieren und dann ist der wieder weg.
Kann man dass irgendwie abschalten?
Oder gibts eine möglichkeit unter C# zu erkennen, dass der stick noch nicht vollständig eingerichtet ist?
Beim zweiten mal anstecken des Sticks geht dann wieder alles. es kommt dann nur ein Anmelden.
Grüße Cornflake
Danke Leute
habe jetzt 2005 Backup erstellt und das als 2008 update eingespielt.
verwendetes Datenbanksystem: MSSQL 2005 / 2008 Express
Hallo Leute
Ich habe vor mit einer Skriptdatei von einer MS SQL 2005 Express Datenbankengine bzw. DBMS auf MS SQL 2008 Express upzugraden bzw zu migirieren. Im Forum habe ich per Suche dazu noch nichts gefunden.
Von Hand stelle ich mir den Weg wie folgt vor:
Alte Datenbankdatei TEST.mdf trennen.
Danach alte 2005 Express Engine mit dem Namen TESTENGINE deinstallieren.
Dann neue 2008 Express Engine mit gleichem Namen TESTENGINE zu installieren.
Abschließend die TEST.mdf wieder an die neue 2008 SQL Engine anzudocken.
Gibts da händisch nen schnelleren Weg? bzw.
Ich bräuchte eine Lösung, die ich in eine Upgrade.sql Datei schreiben könnte und per Batch Datei und osql.exe ausführen könnte.
Habe jetzt von Hand einiges getestet, das dauert aber ewig.
Grüße Cornflake
😃 Super freu
Ja hat geklappt.
@witte: Vielen Dank, die fehlende cFach Angabe war der Grund für die ursprüngliche Fehlermeldung.
@Coffeebean: Super vielen Dank für die ausführliche Variante. Jetzt habe ich so langsam etwas mehr von dem ganzen Linq Zeugs verstanden. Die Variante werde ich auch als Vorlage für weitere Linq Probleme verwenden.
Wegen wie poste ich richtig. Habe schon vorher einiges rum gegoogelt. Aber endweder waren die Schlüsselworte falsch oder gab immer nur Lösungen für einspaltige Liste.
Falls du einen Link zu einem guten Linq Tutorial hast, dass dieses Thema nicht nur mit einfachsten Basisbefehlen bespricht, würde das mir für Zukunft auch noch sehr gut helfen. Auf der anderen Seite hatte ich schon linq 101 samples mir runtergeladen und bin da aber wieder nicht ganz durchgestiegen.
Grüße Cornflake
Hallo Coffeebean
Das mit den Filtern habe ich noch gar nicht angefangen, da es schon in der einfacheren Variante zu einem Fehler kommt.
Aktuell habe ich den Aufruf jetzt folgend umgebaut:
fächerliste = fächerliste.AsEnumerable().OrderBy(o => o.ID).GroupBy(g => g.ID).Select(s => new { ID = s.Key, Menge = s.Sum(sm => sm.Menge) }).ToList();
Die Fehlermeldung lautet:
Fehlermeldung:
Fehler 1 Eine implizite Konvertierung vom Typ "System.Collections.Generic.List<AnonymousType#1>" in "System.Collections.Generic.List<Tool.Model.cFach>" ist nicht möglich.
Hallo Leute
In meinem C# Programm habe ich eine Klasse mit folgendem Aufbau
public class cFach
{
public int ID ;
public int Menge ;
}
Diese verwende ich in einer generischen Liste, die einige Einträge enthält.
Mit Linq möchte ich nun als Ergebnis folgendes haben:
-Alle Einträge nach ID sortiert (sortieren)
-Die ID liegt zwischen 0 und 9999 (filtern)
-Identische ID werden gruppiert und die Menge summiert (kumulieren)
Die Ausgabe soll wieder genauso sein wie die Eingabe.
Bisher habe ich dazu folgendes probiert, bekomme aber immer Fehlermeldungen.
...
List<cFach> fächerliste = new List<cFach>();
cFach f = null;
f = new cFach();
f.ID = 1;
f.Menge = 2;
fächerliste.Add(f);
f = new cFach();
f.ID = 1;
f.Menge = -1;
fächerliste.Add(f);
f = new cFach();
f.ID = 2;
f.Menge = 2;
fächerliste.Add(f);
f = new cFach();
f.ID = 2;
f.Menge = 3;
fächerliste.Add(f);
f = new cFach();
f.ID = 3;
f.Menge = 1;
fächerliste.Add(f);
...
fächerliste = fächerliste.AsEnumerable()
.OrderBy(o => o.ID)
.GroupBy(g => g.ID)
.Select(s => new { ID = s.Key , Menge = s.Sum(sm => sm.Menge)});
Leider klappt diese letzte Zeile im Code nicht und ich habe k.A. was ich anders machen muss. 🙁
Hat jemand einen Tipp wie der Linq Befehl aussehen müsste ?
Grüße Cornflake
Hi
Danke Th69 🙂
Also meines erarchtens ist die MSDN Doku in diesem Punkt schlecht geschrieben. Da finde ich keinen Punkt in dem beschrieben wird, wie das mit festen Längen genau klappen soll.
Dank deines Links, hege ich jetzt wieder Hoffnung den Part ohne Umbau zum Laufen zu bekommen.
Für alle die da auch in der Klemme sitzen.
Aktuell habe ich folgenden bcp Aufruf:
C:\...\Binn>bcp tests.dbo.Foo in "C:\...\Bar.dat" -f "C:\...\Bar.fmt" -S MyServer\MyDB -T
Die Bar.fmt hat aktuell folgenden Aufbau:
10.0
5
1 SQLINT 0 14 "" 1 S1 Latin1_General_CI_AS
2 SQLNCHAR 0 39 "" 2 S2 Latin1_General_CI_AS
3 SQLFLT8 0 10 "" 3 S3 Latin1_General_CI_AS
4 SQLNCHAR 0 8 "" 4 S4 Latin1_General_CI_AS
5 SQLNCHAR 0 10 "\r\n" 5 S5 Latin1_General_CI_AS
Leider bekomme ich aktuell noch ne Fehlermeldung in der Form von:
Kopiervorgang wird gestartet...
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Unerwartetes EOF in BCP-Datend
atei
0 Zeilen kopiert.
Netzwerkpaketgröße (Bytes): 4096
Zeit (ms.) gesamt: 1123
Falls dazu jemand noch ne Idee hat, wäre super.
Vmtl. muss ich da aber nur nochn bisserl an den Längen rumspielen.
Für die SQLFLT8 Angaben, dazu steht unter SQL Datentypen etwas.
Weitere Links lassen sich gut in Google mit "bulk insert fixed length fields" oder "bulk insert fixed width file sql server" finden.
Ansonsten wäre das jetzt mal die Lösung zur obigen Frage 🙂
Grüße Cornflake
Was habe ich da falsch gepostet?
Weismat schreibt ich soll ein Format-File erzeugen und stellt dazu einen Link rein.
Wie in Punkt 1 angegeben habe ich u.a. hier Bulk insert nachgeschaut. Da steht nur etwas von Trennzeichenunterstützung. So ein Wort wie "fix position" kommt nicht vor, daher feste Positionen scheinen dort nicht angegeben werden zu können.
Wie unter Punkt 4 frage ich ja nach keiner komplett Lösung, nur gibts anscheinend da **gar keine **Lösung zu, daher die Angabe meines zukünftigen Vorgehen eine festbreiten Tabelle mit Trennzeichen vorher zu unterteilen.
Wie unter Punkt 8 angegeben habe ich den Link gelesen, aber dort steht nur wie es mit Trennzeichen geht, welches ja bei mir nicht vorhanden ist.
Evtl. war meine Ausdrucksweise mit "Format Vorgabetabellen" etwas unglücklich. Damit meinte ich eben dieses "Format-File".
Thx
🙂 werde ich mal ausprobieren
Thx für euere Antworten.
ja den Bulk Insert versuche ich auszuprobieren.
Leider kann der nur Dateien mit Trennzeichen einlesen.
Werde daher die Datei vorher nach einem Regelset selber mit Trennzeichen versehen (500 MB einlesen, bei jedem Spaltenwechsel ein Trennzeichen einfügen, 500 MB schreiben). Dann mit bcp oder bulk Insert in DB einlesen.
Leider konnte ich bisher nichts finden wie das trotz Format Vorgabetabellen geht, eine Datei ohne Trennzeichen einzulesen 🙁
verwendetes Datenbanksystem: MS SQL 2008
Hallo
Vllt hat von euch jemand so ein Problem schon gehabt.
Ich habe eine Datei mit ungefähr folgendem Aufbau.
Spalte1______ Spalte2_______________________________ Spalte3__ Spalte4 Spalte5____
1234567890123 H;LLO WELT H;LLO WELT HALLO WELT 88,88 88888 HALLO WELT
1234567890123 HALLO WELT H;LLO WELT H,LLO WELT 88,88 88888 HALLO WELT
1234567890123 H,LLO WELT HALLO WELT H;LLO WELT 88,88 88888 HALLO WELT
1234567890123 HALLO WELT HALLO WELT HALLO 88,88 88888 HALLO WELT
1234567890123 HALLO WELT HALLO WELT WELT 88,88 88888 HALLO WELT
1234567890123 HALLO WELT HALLO HALLO WELT 88,88 88888 HALLO WELT
1234567890123 HALLO WELT WELT HALLO WELT 88,88 88888 HALLO WELT
Diese möchte ich per Bulk insert in eine Datenbank importieren.
Aktuell habe ich folgendes vor:
//Quelle wäre eine DataTable in der alles passend enthalten ist
SqlBulkCopy bcpy = new SqlBulkCopy(mssqlConnection);
bcpy.WriteToServer(Quelle);
Mein Problem liegt eigentlich schon etwas weiter davor, die Datei erstmal in die DataTable zu bekommen und dann soll das möglichst innerhalb von einigen Sekunden passieren.
Wisst ihr einen Weg, wie so eine 500 MB Datei relativ schnell in eine DB importiert werden kann?
Die DB könnte auch lokal auf dem Rechner als Express Version installiert werden.
Grüße Cornflake
Hi
Danke für deine Antowrt.
In der DataTable habe ich leider kein CellFormating.
Es geht auch nicht um die Anzeige.
Das Problem ist, ich lese mehrere Dateien in diese DataTable. In den ersten Spalten stehen Dateiindividuelle Werte, nur in der letzten will ich stehen haben, aus welcher Datei die kommen.
Daher lege ich mir zuerst eine temporäre Tabelle an, in der ich die Datei einlese. Dann soll in der letzten Spalte der Dateiname festgelegt werden woher die Daten kommen. Abschließend werden in der Überfunktion diese seperaten DataTables zusammengeführt.
Aktuell habe ich es jetzt wirklich mit einer for schleife gelöst, bei der ich direkt die letzte Spalte setze.
Dachte nur, dass es dazu vllt einen Einzeiler bzw Methodenaufruf gibt, der z.B. 200000 Zeilen in einem Rutsch setzt.
Grüße Cornflake
verwendetes Datenbanksystem: C# DataTable
Hallo Leute
Ich habe mir eine DataTable zusammengebaut mit ein paar Spalten.
Wenn ich die DataTable mit einer Funktion befüllt habe, möchte ich in der letzten Textspalte überall einen gleichen Text (Dateiname) eintragen.
Nur wie geht das, ohne jede einzelne Zeile mit einem ForEach zu durchlaufen und dann den Wert in die Spalte zu schreiben.
Gibt es da einen schnelleren Weg?
Thx
Cornflake
Gelöst 😃
Also die Settings.settings Datei ist zwar auch ne XML aber hat einen abweichenden Aufbau, wie die zum Schluss erzeugte .config.
Daher -leider- sollte sich etwas ändern an der settings Datei muss die .config neu importiert werden.
Ansonsten ist der Ablauf wie folgt:
//Ressourcenname= Foo.exe.config
//Im Ordner = Resources
string strSchemaPath = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Resources.Foo.exe.config";
System.IO.Stream objIOStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(strSchemaPath);
System.IO.StreamReader sr = new System.IO.StreamReader(objIOStream);
System.IO.StreamWriter sw = new System.IO.StreamWriter("Foo.exe.config",false ,Encoding.UTF8);
sw.Write(sr.ReadToEnd());
sr.Close();
sw.Close();
objIOStream.Close();
Grüße Cornflake
Hi
Laut MSDN habe ich jetzt folgendes versucht:
Zuerst habe ich in VS die Settings.settings Datei unter der Eigenschaft Buildvorgang als Eingebettete Ressource markiert.
Danach folgenden Code zusammengebaut
string strSchemaPath = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Settings.settings";
System.IO.Stream objIOStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(strSchemaPath);
System.IO.StreamReader sr = new System.IO.StreamReader(objIOStream);
System.IO.StreamWriter sw = new System.IO.StreamWriter("Foo.exe.config");
sw.Write(sr.ReadToEnd());
sr.Close();
sw.Close();
objIOStream.Close();
Leider ist die objIOStream Variable null.
Hat jemand eine Idee was da falsch läuft?
Hi
Thx für eure Antworten.
Palladin007s Idee finde ich bisher am besten. Einziges Manko sollte sich mal an dem Dateiaufbau etwas ändern, darf man nicht vergessen die Ressource auch anzupassen.
Also das Programm besteht nur aus einer ca. 100 kb großen Datei.
Diese hat sonst keine besonderen Abhängigkeiten und kann im Prinzip auch einfach als einzelne Exe Datei weitergegeben werden.
Ich habe festgestellt, wenn keine .config vorhanden ist, nimmt das Programm die integrierten Defaultwerte. Man kann in der config ein festen Quelldateipfad und Zieldateipfad hinterlegen. Aktuell ist es so, dass wenn jemand keine Ahnung hat, kann ich Ihm mit einem Texteditor angepasst eine Config geben, in der diese Dateipfade hinterlegt sind. Wenn die in dem gleichen Ordner liegt wie die exe, dann wird die Konfig geladen und im Programm muss er sonst nichts weiter machen ausser Go zu klicken, dann wird die hinerlegte Quelldatei umgewandelt und als Zieldatei gespeichert.
Es kann aber auch sein, dass der die sich selber anpassen muss ohne dass ich die ihm schicken kann. Dann wäre es gut, wenn die automatisch sozusagen als Blankodatei vorhanden ist und er nur in einem Texteditor nach telefonischer Anweisung was eintragen muss.
Hallo
In meinem Programm nutze ich eine foo.exe.config in der ich als "Anwendung" und nicht "Benutzer" Einstellungen hinterlege. Wenn ich meine Anwendung kompiliere, entsteht auch diese Konfig Datei.
Nur wenn ich jetzt jemanden die .exe samt .config kopiere und der die .config löscht, habe ich keinen Weg gefunden diese per Code wiederherstellen zu lassen.
Das Properties.Settings.Default.Save() bringt nichts. 😦
Hat jemand von euch da ne Lösung?
Viele Grüße
Cornflake
Habe es selber gelöst. 😃
Für alle die auch mal vor diesem Problem stehen:
...
new XStreamingElement("Strassen",
(
from line in DtDaten.AsEnumerable() //hier beginnt die Abfrage der DataTable
group line by new // Hier beginnt die erste Gruppierung
{
Ort = line.Field<string>("Ort"),
Strasse = line.Field<string>("Strasse")
}
).Select((g, i) => //Hier wird die Ausgabe der ersten Abfrage aufgebaut
new XStreamingElement("Strasse",
new XElement("Ort", g.Key.Ort),
new XElement("Strassenname", g.Key.Strasse),
new XElement("Haeuser",
(
from line2 in g //Hier beginnt die Unterabfrage der ersten Abfrage
group line2 by new // Hier beginnt die Untergruppierung
{
Ort = line.Field<string>("Ort"),
Strasse = line.Field<string>("Strasse"),
Haus = line.Field<string>("Haus")
}
).Select((g2, i2) => //Hier wird die Ausgabe der Untergruppierung aufgebaut
new XElement("Hausname", g2.Select(c => (string)c.Field<string>("Haus")),
new XElement("Anzahl", g2.Select(c => (int)c.Field<int>("Anzahl")),
new XElement("Datum", g2.Select(c => (string)c.Field<string>("Datum"))
))))));
Grüße Cornflake
Hallo
Mein Ziel ist es aus einer DataTable eine XML zu erstellen.
Dazu muss die DataTable in zwei Schritten gruppiert werden. Einmal über die Strassen und darunter über die Häuser.
Ich habe eine DataTable mit folgendem Aufbau:
Datum ; Ort ; Strasse ; Haus ; Anzahl
010114 ; A ; AA ; AAA ; 1
010114 ; A ; AA ; BBB ; 2
010114 ; A ; AA ; CCC ; 3
010114 ; A ; BB ; AAA ; 1
010114 ; A ; BB ; BBB ; 5
010114 ; A ; CC ; AAA ; 2
Daraus soll folgende XML entstehen:
<root>
<info1>test1</info1>
<Strassen>
<Strasse>
<Ort>A</Ort>
<Strassename>AA</Strassename>
<Haeuser>
<Haus>
<Hausname>AAA</Hausname>
<Anzahl>1</Anzahl>
<Datum>010114</Datum>
</Haus>
<Haus>
<Hausname>BBB</Hausname>
<Anzahl>2</Anzahl>
<Datum>010114</Datum>
</Haus>
<Haus>
<Hausname>CCC</Hausname>
<Anzahl>3</Anzahl>
<Datum>010114</Datum>
</Haus>
</Haeuser>
</Strasse>
<Strasse>
<Ort>A</Ort>
<Strassename>BB</Strassename>
<Haeuser>
<Haus>
<Hausname>AAA</Hausname>
<Anzahl>1</Anzahl>
<Datum>010114</Datum>
</Haus>
<Haus>
<Hausname>BBB</Hausname>
<Anzahl>5</Anzahl>
<Datum>010114</Datum>
</Haus>
</Haeuser>
</Strasse>
<Strasse>
<Ort>A</Ort>
<Strassename>CC</Strassename>
<Haeuser>
<Haus>
<Hausname>AAA</Hausname>
<Anzahl>2</Anzahl>
<Datum>010114</Datum>
</Haus>
</Haeuser>
</Strasse>
</Strassen>
</root>
Mit Linq habe ich bisher folgendes Versucht, aber leider noch keine passende Lösung hinbekommen. Durch das doppelte gruppieren klappt es einfach nicht.
XStreamingElement xmlTree = new XStreamingElement("Root",
new XElement("info1", "test1"),
new XStreamingElement("Strassen",
from line in DtDaten.AsEnumerable()
group line by new
{
Ort = line.Field<string>("Ort"),
Strasse = line.Field<string>("Strassen")
} into g
select new
{
new XStreamingElement("Strasse",
new XElement("Ort", Ort),
new XElement("Strassenname", Strasse),
new XElement("Haeuser",
{
Strasse = g.Key,
Items = from i in g
group i by new
{
Haus = i.Field<string>("Haus")
} into d
select new
{
new XElement("Hausname", d.Field<string>("Haus")),
new XElement("Anzahl", d.Field<string>("Anzahl")),
new XElement("Datum", d.Field<string>("Datum")),
}
}
}));
Hat jemand dazu eine Lösung?
THX 😃
Hallo Leute
Ich habe mir mal ein Projekt erstellt in dem ich immer wiederkehrende Funktionen ablege. Dann habe ich bei neuen Aufgaben Solutions angelegt und das Projekt als Verweis auf die dll eingeklinkt. Nachteil ich muss zum Schluss immer dll + exe weitergeben.
Jetzt die Frage gibt es auch ne möglichkeit projekte mit hilfsfunktionen so in eine solution einzubinden, dass ich keine seperate dll mehr beim kompilieren bekomme?
Ziel es soll eine exe datei rauskommen.
Grüße Cornflake
Naja für mich ist es eigentlich praktisch oben auf den kleinen Reiter zu klicken und dann zu entscheiden, dass beim nächsten Projektmappe neu erstellen eine Release Version entsteht oder ich nochmal neu debugge.
Daher würde ich gerade gerne auf weitere externe Geschichten verzichten und solange ich nichts komplexeres beim Build brauche, auch nicht mit einer externen Skriptpflege beginnen wollen.
Aber Danke für eure Hinweise, vllt brauche ich das ja noch irgendwann mal. Hat jemand von euch schon mal über den Präbuildbefehl Werte der VS gesetzt? Kann man sowas generell?
Hallo Leute
In der Suche konnte ich unter Postbuild leider nichts passendes finden.
Folgendes Problem:
Wenn ich ein Projekt fertig habe kompiliere ich es abschließend als Release (bekommt dadurch ne neue ProductID) und schließe das Projekt danach.
Wenn ich dann Wochen später wieder etwas ändere, passiert mir es fast immer, dass ich vergesse dazu auf Debug umzustellen und habe dann schon wieder nen neuen Releasestand mit einer neuen ProductID.
Ziel:
Ich möchte jedesmal nach einem Release erstellen automatisch auf die Konfiguration Debug umstellen lassen. Ich verwendet Visual Studio 2008 Pro
Hat jemand von euch sowas schon mal gemacht?
Das hier klappt unter Postbuildereignis leider nicht. 🙁
if "$(ConfigurationName)"=="Release" $(ConfigurationName)="Debug
Viele Grüße
Cornflake
Thx für die weiteren Hinweise 😃
Mal schauen wie weit ich diese noch mit umsetzen kann.
Hi
Das mit dem kopieren geht fürs erste. Aber nicht gerade perfekt.
Wenn ich das erste mal eine .config nach dem umkopieren mit reload geladen habe, kann ich danach keine andere Datei mehr umkopieren und reloaden.
Es wird kein Fehler erzeugt aber auch keine Änderung angezeigt.
Mit reset vorher gehts auch nicht. Irgendwie muss ich das settings Objekt zurücksetzen oder neu instanzieren.
Hat jemand dazu ne Erklärung oder Tipp?
EDIT: Ok mir ist gerade aufgefallen, dass dieses Problem nur in der Entwicklungsumgebung auftritt. Wenn ich das Tool direkt starte kommt es nicht zu diesem Verhalten.
Das war mir jetzt alles zu kompliziert.
Ich habe mir ne Methode geschrieben bei der wenn man aus einer liste von .config Dateien eine auswählt, diese in die Tool.exe.config umbenannte wird und dann mit ...reload() geladen wird. Ist zwar nicht die beste lösung aber es klappt.
Hi
Ich habe das jetzt mal ausprobiert und eine Settings.cs Klasse erstellt mit folgendem Inhalt:
namespace Tool.Properties
{
class settings
{
static System.Configuration.KeyValueConfigurationCollection mySettings;
public static System.Configuration.KeyValueConfigurationCollection Default
{
get
{ return mySettings; }
set
{ mySettings = value; }
}
internal static void LadeEinstellungen(string KonfigDatei)
{
System.Configuration.Configuration config;
System.Configuration.ExeConfigurationFileMap configFile = new System.Configuration.ExeConfigurationFileMap();
configFile.ExeConfigFilename = KonfigDatei;
config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(configFile, System.Configuration.ConfigurationUserLevel.None);
config.Save(System.Configuration.ConfigurationSaveMode.Modified);
System.Configuration.ConfigurationManager.RefreshSection("applicationSettings");
mySettings = config.AppSettings.Settings;
//Tool.Default = config.AppSettings ;
}
}
}
Leider wird im intellisense in einer anderen Klasse dann leider immer noch nicht meine festgelegten Variablen angezeigt.
private void ButtonKonfigLaden_Click(object sender, EventArgs e)
{
string datei = lsbProfile.SelectedItem.ToString();
LadeEinstellungen(datei );
string StarterWert = Tool.Properties.settings.Default. //.... hier gibts keinen Startwert
}
Ich vermute mal, da ja KeyValueConfigurationCollection nicht auf meine Profil.settings Datei typisiert ist, klappt das nicht so einfach.
Ich will das ganze schon sehr gerne in seperaten Dateien lösen, da wenn sich mit der Zeit immer mehr Konfigurationen ansammeln ich nicht zum Schluss eine nicht mehr wartbare Riesendatei haben möchte.
Grüße Cornflake
Hallo
Wenn man ein Programm lädt, kann man ja Einstellungen für Benutzer oder Anwendung in einer seperaten *.config Datei hinterlegen.
Wenn mein Programm Tool heißt und ich Variable "Startwert" als String für Anwendung hinterlegen will, werden die Einstellungen dafür in der Datei
Tool.exe.config im App-Ordner gespeichert.
Diese Tool.exe.config wird beim Programmstart geladen und ich kann in meiner Anwendung über
Tool.Properties.Settings.Default.Startwert auf den unter Startwert gespeicherten Wert zugreifen.
Jetzt das Problem.
Ich habe in meinem Programmordner 5 VerX.config Dateien für mein Programm vorbereitet. Aber ich kann beim Laden der .config keinen eigenen Dateinamen angeben. Im Programm wurde bisher auf die Tool.Properties.Settings.Default.Startwert zugegriffen. Jetzt möchte ich genauso zugreifen nur, dass dahinter im Programm wähltbar eine andere .config Datei steht.
Ok ich könnte natürlich bei Bedarf mir die benötigte .config in Tool.exe.config umbenennen, aber das muss doch auch besser gehen. Vor allem wenn ich in der Anwendung den Benutzer eine vorher erstellte Konfiguration auswählen lassen will.
Im Internet habe ich rausgefunden, das man sowas per:
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = @"my.config";
Configuration myConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
KeyValueConfigurationCollection settings = myConfig.AppSettings.Settings;
lösen kann. Nur leider kann ich diese settings Variable nicht an meine Tool.Properties.Settings binden, um wieder wie vorher darauf zuzugreifen.
Hat jemand dazu eine Lösung, damit ich weiterhin per Tool.Properties.Settings.Default.Startwert auf die Einstellungswerte zugreifen kann?
Grüße Cornflake
Hallo Leute
Vllt kann mir jemand mit Linq, oder Generic Programmierung helfen.
Ursprünglich war folgende Situation vorhanden und alles funktionierte.
string Empfänger = "Tick,Trick,Track";
List<string> empf = new List<string>();
empf.AddRange(Empfänger.Split(',', StringSplitOptions.RemoveEmptyEntries));
Jetzt hat sich folgendes geändert.
public class Kontakt
{
public string NAME;
public int ID;
}
string Empfänger = "Tick,Trick,Track";
List<Kontakt> empf = new List<Kontakt>();
//!!! diese Zeile muss jetzt irgendwie umgeschrieben werden
empf.AddRange(Empfänger.Split(',', StringSplitOptions.RemoveEmptyEntries));
Ich möchte Tick,Trick,Track jetzt mit dem NAME des Kontakt neu angelegt werden.
Dass ID leer bleibt ist hierbei egal. Die ID wird dann später ergänzt. Nur ich will wieder die Liste haben am besten mit einem ein Zeiler. Bisher habe ich folgenden Ansatz gefunden.
empf.AddRange( Kontakt.OfType<NAME>().ToList());
Allerdings kann ich den so nicht verwenden. 🙁
Hat jemand eine Idee wie ich dieses Problem mit wenig Zusatzcodezeilen sauber lösen kann?
Grüße Cornflake
Hallo Leute
Ich bin im Bereich WPF noch ein Anfänger.
Daher stehe ich jetzt vor folgendem Problem.
Ich habe vor in einem Ordner alle Bilder die ich finde in eine
List<Karte> meineBilder = new List<Karte>();
zu laden und dann die Liste meineBilder in einem WPF Uniformgrid darzustellen.
Die Liste meineBilder ist vom Typ Karte und Karte hat einfach 3 Properties (KartenNr, Bildpfad, isAktiv)
Mein Problem wie bekomme ich die Bilder über diese Klasse in dem uniformgrid angezeigt...
Ablauf sollte sein:
Bisher weiß ich nicht so genau wie ich die Liste dem Uniformgrid zuweisen kann bzw. wo bei uniformgrid sowas wie items.add(...) existiert.
Das ganze soll per C# Code passieren, da die Bilder in dem Ordner verschieden in Dateiname und Anzahl sein können.
Grüße Cornflake
Arg... 🙂
**Genial ** das geht 🙂 🙂 👍
Nur warum geht das Copy nicht, bzw. wie müsste ich das dann einsetzen?
BIG THX 🙂
Hallo
Ich habe da seit dem Woe. immer noch ein Problem bei dem ich nicht weiterkomme. Ich konnte in einem Testprojekt das Problem zumindest auf einen kleinen Codeblock reduzieren.
Aufbau des Projektes...
Folgendes habe ich angelegt:
DataSet ds1.xsd
Im DataSet eine DataTable (dt1
In der DataTable eine Spalte Wert[int]
Auf der Form ein DataGridView (dgv1
Auf der Form eine Bindingsource bs1 die über eine DataSet-Instanz auf die Spalte Wert zugreift.
Auf der Form einen Button (btn1
Wenn ich jetzt den Button klicke soll in die Tabelle einfach eine Zahl geschrieben werden.
Mit dem Standardablauf .Add wird eine 1 geschrieben
Mit dem .Copy sollte eine 2 geschrieben werden.
Problem:
Es tauchen nur die 1er auf keine 2er.
Hier der Code von btn1:
DataTable dt = ds1.dt1;
//Geht
dt.Rows.Add(new object[] {1});
//Geht nicht... Warum?
DataTable t = dt.Clone();
t.Rows.Add(new object[] { 2 });
dt = t.Copy();
Bei 3 mal klicken steht in der Tabelle:
1
1
1
Es sollte aber stehen:
1
2
1
2
1
2
Was muss ich machen damit dieses .copy() funktioniert ?(
Der Grund für dieses umständliche .copy() vorgehen soll fürs erste mal nebensache sein, später wird dann das aufwendige füllen in einen eigenen Thread ausgelagert und zum Schluss die vorbereitete DataTable im GUIthread zurückgeschrieben.
Aber erstmal würde ich gerne überhaupt das .copy verstehen.
Grüße Cornflake
Hallo
Müssen DataTables wie Controls invoked werden oder zurückgegeben werden?
Ich habe folgenden Aufbau... (Alles in C# 3.0 geschrieben, )
GUI Klasse:
Erzeugt eine Dataset Instanz mit mehreren Tabellen.
Zeig den Inhalt de Tabellen in einer Datagridview über eine BindingSource an.
Ruft eine DataTable_Refresh_Thread Klasse auf mit Übergabe einer Datatable und eines Datagridviewers als Ref
++
DataTable_Refresh_Thread Klasse:++
Nimmt im Konstruktor per Ref eine DataTable und ein DataGridView entgegen.
Erzeugt einen Thread dem die DataTable weitergereicht wird und der die DataTable füllt
Abonniert einen Fertig() Event des anderen Threads, um bei eintreten das DataGridView zu Refreshen.
Startet in dem anderen Thread die ThreadRunnerMethode
Wartet 2Sek und erzeugt wieder ein Thread der die DataTable füllt.
DataTable_Refresh_Threadworker Klasse:
Nimmt als Eigenschaft die Ref auf die DataTable entgegen.
Die ThreadRunnerMethode füllt die (DataTable
Wenn dieThreadRunnerMethode fertig ist raised sie den Fertig Event.
Die oben beschriebene DataTable_Refresh_Thread Klasse funktioniert bisher in dem genannten Aufbau.
Allerdings habe ich die DataTable_Refresh_Thread Klasse in einem erweiterten Aufbau für RAPI Unterstützung nochmal.
In dieser Version wird auch (per Debugger getestet) die DataTable in dem anderen Thread gefüllt, aber irgendwie sind nach beenden dieses Threads dann die Daten weg bzw. die DataTable wieder leer.
Daher die Frage, hätte ich die Referenz der gefüllten DataTable wieder zurückgeben oder Invoken oder irgendwie ein DataTableSaveChanges aufrufen müssen ?(
Was mich wundert. In der Klasse ohne Rapi wird die übergebe Tabelle nach gleichem Schema gefüllt und das Ergebnis wird auch ohne Meldungen sauber angezeigt.
Nur in der Klasse die für das Sammeln der Daten RAPI nutzt, sind dann nach dem Füllen und verlassen des Threads keine Daten zu sehen. Läuft aber auch ohne Fehlermeldung.
Vielleicht weiß einer von euch welche Objekte invoked werden müssen, oder ob veränderte Referenzen wieder zurückgegeben werden müssen. ?(
Grüße Cornflake
Oder kann mir jemand einen Tip geben wir ich in der Frage weiterkomme?
Hi
Im Internet tummeln sich ja mittlererweile einige Beispiele, wie man Dateien per Drag & Drop in Silverlight bringt z.B. : Silverlight 4's New Drag-and-Drop Support
Leider habe ich aber per Google nichts gefunden um etwas(Bilder,mp3,Dateien) aus einer Silverlightanwendung raus in Dateisystem zu ziehen.
Hat da jemand von euch Beispielcodes?
Grüße Cornflake
Hi
Hat jemand von euch Erfahrungen, wie man eine AS2 Datenübertragung aus einer Windowsanwendung realisiert?
Ziel ist es eine CSV Datei zu verschicken.
Mit AS2 meine ich Applicability Statement 2 (AS2) mit EDI und HTTP.
Ich habe leider überhaupt keine Erfahrung mit AS2, daher wäre alles zu dem Thema hilfreich.
Am besten natürlich ein C# Beispielcode oder Sampleprojekt oder eine einfach unter C# zu verwendende Lib.
Grüße Cornflake
Hallo
Das ist mein erster Beitrag in diesem Forum, ich hoffe ihr könnt mir helfen.
Mein Problem:
Ich habe eine Klasse (z.B. clsFormulare) in der verschiede Konfigurationsdaten zu einem Thema abgelegt werden.
wenn ich diese Serialisiere kommt da eine XML raus mit einem root Element clsFormulare und den entsprechend serialisierten ChildsNodes.
Jetzt will ich aber von Hand eine Gesamtkonfig XML für mein Programm erstellen. Die soll verschiedene Hauptzweige haben und nur in einem Unterzweig die Klasse clsFormulare serialisiert enthalten.
Wie geht sowas?
Nebenbei: Kann man beim Serialisieren irgendwie festlegen, das alle Werte als CDATA abgelegt werden?
Beispielaufbau der GesamtKonfig.xml
<?xml version="1.0" encoding="windows-1252"?>
<Formulare xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<AppKonfig>
<Version>1.0</Version>
<Formulare>
<!-- ...hier drunter soll die Klasse clsFormulare serialisiert abgelegt werden -->
</Formulare>
<Syncronisationseinstellungen>
<!-- ...hier drunter soll die Klasse clsSynceinstellungen serialisiert abgelegt werden -->
</Syncronisationseinstellungen>
<startbedingungen>
<WLANAktivOnBootup>false</WLANAktivOnBootup>
<Vollbildmodus>true</Vollbildmodus>
<Programmsprache>Deutsch</Programmsprache>
<!-- ...usw.-->
</startbedingungen>
<Codierung> <![CDATA[AX2MA4SSI5ASDJL6OHS]]> </Codierung>
</AppKonfig>
Vielen Dank Cornflake