Laden...

Forenbeiträge von BenFire Ingesamt 50 Beiträge

24.01.2007 - 14:40 Uhr

Ich gehe aber davon aus, dass SVG fähigkeit unterstützt wird.
Deshalb versuch ich meine Frage noch einmal zu konkretisieren.
Erstelle ich jetzt für das Zeichnen der Bars eine extra Klasse?
Ggf möchte ich ja nicht nur einen sondern auch mehrere zeichnen.
Und wie übergebe ich dem folgenden Balken die Koordinaten des davor gezeichneten, damit dieser "weiß" , von der aus er erst zeichnen darf?

23.01.2007 - 14:03 Uhr

Sorry, hatte ich vergessen zu erwähnen,...ich Programmiere mit C#
Und nein es soll keine Webanwendung werden.
Ich will mir wie gesagt nur den Inhalt meiner Datenbank (verschiedene Abfragen)
visualisieren lassen.
Das SVG - File kann ich ja ohne Probleme auch aus dem C# heraus öffnen lassen.

22.01.2007 - 09:29 Uhr

Hallo Leute,

wie der Name des Themas schon sagt hab ich Probleme beim skalieren von Bars.
Kurz zur Sachlage:
Ich möchte die Inhalte aus meiner Datenbank grafisch darstellen.
Um das ganze auch visuell zu verdeutlichen wollte ich dies mithilfe von skalierbaren "Bars" machen.
Sprich wenn ich 100stück habe dann ist der "Bar" 1cm groß und bei 1000Stück 10cm.
Ich habe deshalb zunächst ersteinmal ein SVG - File erzeugt, welches die Grunddaten enthält....sprich die X-Y - Achsen der Grafik, da diese ja immer gezeichnet werden müssen...egal was ausgewertet wird.
Und nun möchte ich in das vorher erzeugte (ich nenne es jetzt mal) Standard-SVG File noch die Bars einfügen.
Kann mir jemand von euch einen Tip geben, wie man soetwas am elegantesten macht?
Es ist doch bestimmt nicht schick, wenn ich in meinem Programm den SVG - Code angebe und dann für width und heigth ein paar Parameter einfüge.
Ich habe von SVG bis jetzt noch nicht wirklich viel Ahnung, deswegen wäre es hilfreich für mich, wenn Ihr mir da ein paar Tips geben könnten, wie ihr soetwas realisieren würdet.
Vielen Dank.

Ben

08.01.2007 - 15:06 Uhr

So wunderbar...funktioniert einwandfrei....dankeeeschön 😁

05.01.2007 - 12:54 Uhr

ja auf der seite war ich auch schon ein paar mal.
ich werd allerdings nicht wirklich schlau daraus.
ich will meine Controlls ja nicht vom thread aktualisieren lassen,
sondern sie wieder freigeben, sobald der thread abgearbeitet ist.

05.01.2007 - 09:30 Uhr

Hallo Leute,

ich habe folgendes Problem.
Wenn ich auf einen Button klicke, dann wird ein seperater Thread aufgerufen, der die dahinterliegende Funktion abarbeitet. Soweit so gut. Das funktioniert auch alles.
Aber ich möchte, so lange der Thread abgearbeitet wird alle Button bzw. gleich das gesamte Form sperren, so das der User nicht mittendrin einfach auf Beenden klickt
während der Thread noch ausgeführt wird.

Probiert hab ich das dann damit, dass ich das Fenster per

Mainframe.ActiveForm.Enabled = false

sperre, aber spätestens beim Versuch es wieder zu aktivieren kommt folgende Fehlermeldung:
Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement Mainframe erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.

ich bräuchte quasi eine Art globale Variable (des Forms) um das enable von jeder Funktion aus zu steuern.
Oder gibt es da noch eine bessere Lösung für?

Hier mal mein bissheriger Code:


delegate bool DelegateReadATP(FolderBrowserDialog folder); 

private void readATP_Click(object sender, EventArgs e)
       {
             Verarbeitung(folder);
        }  


private void Verarbeitung(FolderBrowserDialog AtpPfad)
        {
            this.Cursor = Cursors.WaitCursor;
            ReadATP newATP = new ReadATP();
            DelegateReadATP read = new DelegateReadATP(newATP.ReadNewATP);
            AsyncCallback callback = new AsyncCallback(CallbackRead);
            //Mainframe.ActiveForm.Enabled = false;   HIER SOLL DIE FORM DEAKTIVIERT WERDEN
            read.BeginInvoke(AtpPfad, callback, null);
        }

private void CallbackRead(IAsyncResult ar) 
        {
            DelegateReadATP read = (DelegateReadATP)ar.AsyncState;
            bool check = read.EndInvoke(ar);

            if (check == true)
            {
              //Mainframe.ActiveForm.Enabled = true; UND HIER SOLL ES WIEDER AKTIVIERT WERDEN
            }
        }

04.01.2007 - 14:17 Uhr

[EDIT]Abgetrennt von Klassen architektur[/EDIT]

Hallo allerseits.

Ich hab mich hier mal ein bissel belesen, weil ich die asyncrone Abarbeitung in meinem Programm mit aufnehmen wollte.
Genauer gesagt soll beim drücken auf einen Button alle anderen gesperrt werden
bis der Thread abgearbeitet ist. Dazu bräuchte ich ja aber das AsyncResult
Beim debuggen gibt er mir aber immer folgende Fehlermeldung.
Kann mir jemand sagen, was das zu bedeuten hat?


Die Funktionsauswertung wurde deaktiviert, weil bei einer vorhergehenden Funktionsauswertung das Zeitlimit überschritten wurde. Sie müssen die Ausführung fortsetzen, um die Funktionsauswertung wieder zu aktivieren.	

Vielen Dank für eure Hilfe.

Ben

06.12.2006 - 09:24 Uhr

super das schaut gut aus.....werd ich mir mal zu gemüte führen.
Vielen Dank 😁 👍

06.12.2006 - 08:47 Uhr

Also ich würde jetzt grob gesehen eine Klasse für den Datenbankzugriff, eine für den Datenaustausch (DS / SQL-DB) , und eine für die Manipulation des DataSets schreiben.
Oder wie wäre das ganze am sinnvollsten?

04.12.2006 - 16:36 Uhr

Mit anderen Worten, es macht also wenig Sinn eine Abstrakte Klasse "MyDataTab" zu schreiben (welche alle benötigten von mir vorgesehenen Funktionen beinhaltet), wenn sich die einzelnen Tabellen von einander unterscheiden?

04.12.2006 - 12:03 Uhr

naja ich mein, dass ich meine Tabellen als Objekte sehe und dafür eine "spezielle" Klasse anlege welche dann noch meine zusätzlich benötigte Operationen beinhaltet(wie z.b. löschen einer Reihe in einer Tabelle )
Macht denn sowas überhaupt Sinn?
oder wie handelt Ihr eure DataSets?
Greift ihr einfach nur per Indizierung direkt darauf zu?
wie z.b. so DS.Tables[0].Rows[1].ItemArray[1] ?

30.11.2006 - 15:32 Uhr

Hallo

Hab mal eine Grundlegende Frage an euch.
Macht es eigentlich Sinn, objektorientiert zu arbeiten, wenn man eigentlich nur Daten aus einem XML File in eine Datenbank rüberschaufeln will???
Bzw. was wäre die Vor- Nachteile von OOP ?
Danke für eure Antworten

Ben

22.11.2006 - 11:54 Uhr

So die Sache läuft jetzt...so wie geplant.
Es funktioniert also wirklich so, wie ihr das gesagt hattet.
Ich hätte halt nur schonmal früher den Tabellennamen aus dem DataSet mitgeben sollen 😁

Vielen Dank an euch alle....und seit euch sicher...die nächste Frage wird kommen das ist gewiss 😁

21.11.2006 - 18:18 Uhr

Boaah ich glaub mir is grad aufgefallen, wo mein Fehler liegt.

bei DA.Update hab ich ihm nur das DataSet gegeben und mich geärgert, darüber, dass er noch eine Tabelle haben will, weil ich dachte das ist die Tabelle in die das Insert ausgeführt werden soll.
Nun seh ich aber gerade das da SrcTable steht :S
Ich depp!!!

Werd das morgen gleich mal probieren...heute hab ich keinen Nerv mehr dafür....vielen Dank für eure Geduld.

Mfg

Ben

21.11.2006 - 15:35 Uhr

Also passt auf...
eigentlich sollte es ja keine Grundsatzdiskussion zum Sinn/Unsinn bzw. Vor-/Nachteil von Stored Procedures werden.

Meine Ausgangssituatuion ist folgende:
ich habe 2 Tabellen, die rein funktionell gesehn alles erfüllen, was ich brauche (GeraetTabelle, TestsequenzTabelle).
Zu jedem Gerät in der Geraet Tabelle gibt es mehrere Test in der Testtabelle.
Da sich aber nun die Tests für jedes Gerät wiederholen, hatte ich gedacht die Testname,Testergebnisse auszugliedern in seperate Tabellen und in die TestsequenzTabelle nur die jeweilige ID dafür zu schreiben.

Problem an der Sach ist, dass sich die Daten, die in die TestsequenzTabelle geschrieben werden sollen in einem XML-File Vorhanden sind.
Dieses XML File lese ich dann auf ein DataSet ein.
Nun stehen in der DataTable des DataSet ja aber die Kompletten Strings
die ja vorher noch umgewandelt werden müssen, bevor der Insert in die TestsequenzTabelle erfolgen kann.
Ich hatte mir da jetzt gedacht einer StoredProcedure die Parameter (Testname, Messwert, Ergebnis) zu übergeben, und in dieser werden dann wieder "Unterproceduren" aufgerufen, die in den jeweiligen Tabellen die zugehörigen ID suchen und diese gleich in den INSERT-Befehl der Übergeordneten SP einfügen.
So war mein Plan....ich weiss ja nicht, ob das auch noch anders gehen würde. Fakt ist das die Daten im DataSet noch in Stringform vorhanden sind und ich diese halt in ID´s umwandeln müsste.

Vielen Dank für eure Antworten 😁

21.11.2006 - 10:17 Uhr

Original von Yellow
Um es richtig zu verstehen, du willst eine flachgebügelte Struktur auf dem Client in normalisierten Tabellen auf der DB unterbringen?

-yellow

Nein auf dem Client ist die Struktur eben nicht Flachgebügelt....sondern als XML-File mit den Daten (meist als Strings) vorhanden.
Also muss das "Flachbügeln" im Programm passieren...

21.11.2006 - 10:15 Uhr

Original von Rainbird
EDIT: Mein Post war zu spät.

Hallo BenFire,

Warum willst Du das INSERT über eine Gespeicherte Prozedur abwickeln? Welche Vorteile soll das haben?

Sag nicht, dass es wesentlich schneller ist. Das stimmt nicht. So simple Befehle wie "INSERT Tabelle (Feld1, Feld2) VALUES (@val1, @val2)" kann der SQL Server wiedererkennen und den gespeicherten Ausführungsplan verwenden. Da die Werte parametrisiert sind, ist das für den SQL kein Problem.

Gespeicherte Prozeduren sind sinnvoll bei komplexen Berechnungen, die große Datenmengen betreffen. Der Geschwindigkeitsvorteil bei einfachen INSERTs, UPDATEs und DELETEs ist Nahe zu bei Null.

Beim Speichern kommt es ohnehin nicht so auf die Geschwindigkeit an, sondern auf Konsistenz. Das wiederum fördert der CommandBuilder, da der Parallelitätsverletzungen bei MultiUser-Zugriff auf die DB automatisch erkennt (Einstellbar über ConflictOption). Lese-Zugriffe müssen schnell sein. Aber auch da, macht es keinen Sinn für Abfragen wie "SELECT * FROM Tabelle WHERE ID=@id" in SPs zu packen.

Ich denke, dass viele Leute Gespeicherte Prozeduren einsetzen, weil es in vielen Büchern über SQL Server steht. Der Haken an der Sache ist, dass Bücher über SQL Server sich nur um den SQL Server drehen.

s.o. ich weiss halt nicht wie ich das sonst anders realisieren soll...

21.11.2006 - 10:08 Uhr

Ja sorry das hatte ich vielleicht falsch formuliert.
aber wenn ich mit dem DataAdapter ein Insert ausführen will schreib ich ja trotzdem:

DA.Update(DS,DT);

aber stimmt schon war mein fehler 😉

Original von Yellow
Ich bezweifle, dass du dadurch Vorteile haben wirst. Ich denke eher du kaufst dir damit Nachteile ein, wie Unflexibilität etc., nennenswerte Geschwindigkeitsvorteile wirst du jedenfalls nicht haben, da beispielsweise der SQL-Server für parametrisierte SQL-Anweisungen ebenfalls einen wiederverwendbaren Ausführungsplan erstellt. Was machst du wenn du mehrere Versionen deiner Anwendung / Komponente parallel fährst, weil du die eine Version weiterentwickelst, die ältere Version nur noch bugfixt etc... meiner Meinung nach gewinnst du damit nur einen höheren Pflegeaufwand. Stored Procedures und Stored Functions in allen Ehren, aber ich meine, man sollte sie nur bei komplexer Logik, die viele Daten handelt und wenig zurück gibt, verwenden.

-yellow

Der eigentlich Grund, warum ich den ganzen Spass über eine StoredProcedure mache ist, dass ich vorhabe die Tabelle in die das INSERT ausgeführt wird in eine Normalform zu bringen.
Die Procedur soll also dazu dienen den eingegeben Parameter (z.b. ein TRUE für Ergebnis) durch aufruf einer Unterprocedur (welche in der Ergebnisnistabelle dann nach TRUE sucht und die ID zurückgibt) so zu interpretieren, dass nur die ID von TRUE in meine Tabelle geschrieben wird.

Wenn das anders gehen sollte....ich bin für jegliche Tips offen.
Aber nun hab ich halt erstmal den Weg über Stored Procedures eingeschlagen...was anscheinend nicht funktioniert :S X( 🤔

21.11.2006 - 09:59 Uhr

Ja sorry das hatte ich vielleicht falsch formuliert.
aber wenn ich mit dem DataAdapter ein Insert ausführen will schreib ich ja trotzdem:

DA.Update(DS,DT);

aber stimmt schon war mein fehler 😉

21.11.2006 - 09:13 Uhr

die SP soll ja für ein INSERT sein....nicht für ein reines Update.
Deswegen dürfte mir der Commandbuilder da nicht so viel nutzen.
Da ich ja wie gesagt das Insert der SP überlassen will 😁

21.11.2006 - 08:42 Uhr

Original von Yellow

Original von joerg.uth
Es mit einem CommandBuilder zu machen ist die zweite Wahl.
Tipparbeit hin oder her.
Weshalb nicht den CommandBuilder die SQLStatements generieren lassen?

-yellow

naja...was will ich denn da mit dem Commandbuilder SQL-Statements erzeugen lassen?
Meine SQL Statements stehen doch in der SP....zumindest hatte ich das vor.
Ich will eigentlich nur der Storedprocedure über Ihre eingangsparameter nach und nach jede Zeile übergeben. (die eingangsparameter sind die Spalten der Tabelle)

soll ich dann für jede Zeile extra ein ExecuteNonQuery Aufrufen?
Ich dacht es ist performanter das ganze per DataAdapter mit einmal rüberzuwurschteln. ???

20.11.2006 - 18:50 Uhr

Hab mal ne Frage zum Verständnis.

Ist es möglich eine StoredProcedure im Zusammenhang mit einem DataAdapter.Update(DataSet) aufzurufen???
Wenn ja, wie würde denn sowas aussehen?
Vielen Dank für Eure Informationen

Ben

10.11.2006 - 13:24 Uhr

Ersteinmal vielen dank für deine Antwort.
also ich versuchs nochmal zu erleichtern.

Eigentlich will ich nur für einen String in einer Tabelle einen Indize einer anderen eintragen.

Tabelle
Ergebnis
TRUE
FALSE
TRUE
TRUE
etc.

und um jetzt die größe der Tabelle nicht exorbitant anschwellen zu lassen, will ich halt die strings in einer anderen Tabelle definieren und in der Ausgangstabelle nur noch die jeweilige ID eintragen.
ALSO:

Tabelle
ErgebnisID
1
0
1

Hilfstabelle
ID Ergebnis
0 FALSE
1 TRUE

Ich würde also auf dem SQL-Server diese zusätzliche Hilfstabelle noch mit anlegen.
Jetzt geht es aber darum, wie ich die zuordnung realisiere, damit die DataTable (Tabelle) aus dem DataSet im C# weiss welcher String welche ID besitzt.
Also müsste ich doch zusätzlich noch die Hilfstabelle auslesen und dann nach jedem String in dieser Tabelle suchen und mir die ID geben lassen.
Oder geht das auch noch anders???
Hoffe das beschreibt mein Problem jetzt etwas besser.
Vielen Dank für Eure Mühe

Ben

09.11.2006 - 18:34 Uhr

Ist euch noch irgendetwas unklar?
Wenn ja, dann sagts dann versuch ich die frage nochmal umzuformulieren.

Ben

09.11.2006 - 11:44 Uhr

Ich bins mal wieder...

und diesmal mit einer etwas längeren Frage zum Thema Normalisierung von Tabellen aus einem XML File...

Folgende Sachlage:
Ich habe 3 Tabellen


1. DeviceDataTable
DeviceID, SerialNumber , Date


2. SequenceTable
Value, TestNameFK, DeviceFK
..........1            1
..........2            1
..........3            1
..........n            1
..........1            2
..........2            2
(Zu einem Device gehören ca. 30 Test´s.)


4. TestNameTable
TestnameID, Test
1           Test 1
2           Test 2 
3           ........
4           Test n 


Ich les 2 Tabellen aus einem XML File aus....speichere diese danach auf einem DataSet (XMLDS).
Dieses DataSet hat dann also die 2 Tabellen (DeviceDataTable und SequenceTable).
In der SequenceTable stehen die Tests mit ihrem kompletten Testnamen.
Da dies aber aus Speichertechnischer Sicht nicht die optimalste Lösung ist, würde ich das ganze halt gerne normalisieren. Sprich eine weitere Tabelle auf dem DB-Server erstellen welche dann die (aktuellen [auch erweiterbar]) Testnamen und die zugehörige ID enhält.
Es lässt sich wohl anscheinend nicht vermeiden, dass ich bevor ich die Daten aus dem XMLDS normalisiert in die DB schreiben kann noch einmal die TestNameTable aus der DB in ein DataSet lade....mir dann nach und nach die Testname aus der SequenceTable im XMLDS geben lasse .... um nach diesen in der TestNameTable zu suchen und mir dann die jeweilige ID zurückgeben lasse....oder geht das auch anders???
Mein Bedenken ist halt, dass ich für jeden Testname dann erst immer in der TestNameTable suchen muss. Das ist bei einer Tabelle noch ok, aber wenn ich dann bei mehreren Werten (also nicht nur Testname sondern auch noch Result, Testtyp etc) immer erst noch in zig Tabellen suchen muss um mir eine ID zurückgeben zu lassen....frag ich mich halt, wie performant das ganze dann noch ist.
Vielleicht hab ich da auch grad eben irgendwie die falsche Idee und es geht auch einfacher........

gleich noch eine Frage in diesem Zusammenhang.
manipuliere ich dann das DataSet/die DataTable und führe erst zum Schluss per DataAdapter ein insert aus, oder schreibe ich jeden Test einzeln mit ExecuteNonQuery in die DB, sobal ich die (Test)Zeile zusammengebastelt habe.
Was ist denn da performanter?

Ich hoffe ihr könnt mir da ein paar Tips geben.
Vielen Dank.

ben

31.10.2006 - 11:58 Uhr

super....vielen Dank für die schnelle Antwort 😁

31.10.2006 - 11:46 Uhr

Mahlzeit,

Hab mal ne Frage....ist es möglich einzelne Tabellen aus einem Dataset zu löschen?
bzw...was noch besser wäre einzelne Tabellen in ein XML-File herauszuschreiben.
kann mir da vielleicht jemand weiterhelfen?
über suchen find ich irgendwie nur mist, weil halt Tabelle, löschen und DataSet die Hauptschlagwörter sind 😁
Vielen Dank.

Ben

30.10.2006 - 16:11 Uhr

also mit anderen worten....auch das .net 2.0 unterstützt nicht den Befehl "result-document"???
das wäre schlecht. X(
wie kann man das denn dann sonst noch realisieren, wenn man noch eine seperate Datei aus dem XML herausschreiben will?
Hat da jemand ne Idee?
Danke.

Ben

27.10.2006 - 09:25 Uhr

Was heisst "nix"? Erscheint Saxon in den References? Fehlermeldung? Naja das Problem hat sich gelöst. Ich muss natürlich die DLL´s einbinden und nicht die Files in den assembly-ordner.

Ist auch kein Wunder, denn das ist kein Standard-XSLT, sondern eine SAXON-proprietäre Erweiterung.

sowas hatte ich mir ja auch gedacht, deswegen hab ich ja versucht die .net files von Saxon mit aufzuspielen. Das geht auch...er wandelt das xml auch um. nur das redirect:write wird immer noch nicht ausgeführt X(

25.10.2006 - 13:58 Uhr

soooo...also am Prozessor scheint es schonmal nicht zu liegen.
Das würde ja aber bedeuten, dass das "redirect:write" aus der XSLT - Datei im C# konverter komplett irgnoriert wird. X(

25.10.2006 - 11:20 Uhr

soooo und da ist auch schon wieder das nächste Problem.
Ich hab wie gesagt die dateien über das install-gac tool eingefügt.
Also das Tool schreibt die DLL´s in den Ordner "C:\assembly\
dort sind die Dateien auch vorhanden. wenn ich sie nun aber einbinden will (als Referenz)
dann macht er da nix.
Also hab ich die DLL´s mal direkt ausgewählt....dann hab ich immerhin im C# mit dem Intellisense die erkennung der Klassen in den DLL´s aber wenn ich mein Programm starte meint er folgendes:
"Saxon.Api.XPathSelector" sind keine Konstruktoren definiert."

was ist denn da los?
und warum lassen sich die dinger aus dem assembly-ordner einbinden?

Danke für Eure Antworten.

Ben

25.10.2006 - 10:16 Uhr

die hab ich ja probiert zu nutzen...funktioniert auch wunderbar.
nur mein redirect:write, welches ich in der xslt datei angebe wird übers c# nicht ausgeführt.
nun weiss ich aber nicht woran das liegt, also wollt ich erst einmal einen aktuellen xslt Prozessor drauf laden, um die fehlerquelle auszuschließen...was sich als wesentlich umständlicher erweisst, als ich vorerst dachte 🙁

EDIT:
Aber danke erstmal für den Tip mit der Referenz....ma schaun, wie weit ich damit komme 8)

25.10.2006 - 09:10 Uhr

hat da etwa keiner eine Ahnung von?

24.10.2006 - 18:44 Uhr

Also Leute...nachdem ich nun hier schon den ganzen Tag rumprobiere und auch schon etliche stunden mit suchen verbracht hab wollt ich euch mal fragen, wie geht.
Und zwar will ich den XSLT-Prozessor von saxon einfügen. Die install-gac.cmd hab ich ausgeführt und da scheint auch soweit alles geklappt zu haben....
die Saxon-Files stehen dann im Verzeichnis c:\WINNT\assembly\
Soooo und dann kommt mein erstes Problem.
Und zwar steht auf der Saxon-Seite bezüglich der Installation:
"It is also useful to add the /bin subdirectory to the PATH environment variable. This enables you to use the commands Transform, Query, and Validate without identifying their location explicitly.

Unless you want to use different versions of Saxon in different applications, it is simplest to make these permament settings. Go to Control Panel / System / Advanced / Environment Variables. If Saxon is used by multiple users, add a system environment variable SAXON_HOME; if there is a single user, make it a user environment variable. At the same time, edit the value of the existing PATH variable. You may need to restart applications for the settings to take effect.
"

  1. Was soll das oben angegebene bringen? / Was macht es?
  2. Ist das richtig, wenn ich bei "Umgebungsvariablen"-->Benutzervariablen als Name z.b. Saxon und als Wert den Pfad zu den Dateien angeben also in meinem Fall c:\saxon\bin ???

Und nun die eigentliche Frage.....wie sprech ich das ganze im VisualStudio unter C# an???

ich hab schon alles probiert:
using net.sf.saxon
using Saxon
using saxon
using System.Net.sf.saxon

geht alles nicht!

Muss ich noch irgendwas einfügen/einbinden,...hab ich was falsch gemacht, oder woran liegt das, dass ich hier nix zum laufen bekomme.
Also ich mein sobald das IntelliSense anspricht müsstes ja gehen.
aber das tut es nicht X( (dass das IntelliSense anspricht)
Wär euch echt dankbar, wenn ihr mir diesbezüglich helfen könntet.
Einer muss das ja schonmal gemacht haben......hoff ich
Danke

Ben

23.10.2006 - 18:14 Uhr

hat keiner von euch ne Ahnung, woran das liegen könnte?
ich will halt gerne 2 hexadezimal codierte Speichereinträge in 2 seperate dateien ablegen, auf die ich dann bei bedarf zugreifen kann.
also so dass ich dann: (standard.xml , speicher1.xml, speicher2.xml) hab.
hab auch schon überlegt das ganze als BLOB in der DB abzulegen, aber ich glaub das wird zu groß.

Ben

23.10.2006 - 12:17 Uhr

Ich hätt da mal wieder eine Frage.
Und zwar gehts diesmal darum...ich lass mir ein XML File per xslt konvertieren in eine für DataSets angepasste Form. Soweit so gut.
Allerdings steht in der xslt datei auch gleich noch ein "Redirect Write" mit dem ich einen Hexcode aus der Datei rauskopiere in ein eigenständiges File.
Allerdings wird das beim konvertieren komplett ignoriert. Aber nur in meinem C# Programm. Wenn ich das ganze über die Konsole mache gehts einwandfrei.
Fällt euch da was ein, woran das liegen könnte? und wie ich das Problem beheben kann
ist ist der C#-Code den ich zum umwandeln nutze. Einige von euch werden ihn bstimmt irgendwoher kennen 😉

    public void Umwandeln(string sXmlPfad, string sXslPfad)
        {
            try
            {
                //load the Xml doc
                XPathDocument XPathDoc = new XPathDocument(sXmlPfad);
                XslCompiledTransform XslTrans = new XslCompiledTransform();
                //load the Xsl 
                XslTrans.Load(sXslPfad);
                //create the output stream
                XmlTextWriter Writer = new XmlTextWriter("newXML.xml", null);
                //do the actual transform of Xml
                XslTrans.Transform(XPathDoc, null, Writer);
                Writer.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: {0}", e.ToString());
            }
         }

20.10.2006 - 10:55 Uhr

jupp hab ich auch grad gefunden. das ist natürlich ein Traum.
Macht das ganze westenlich leichter. 😁
Danke Jungs! 👍

19.10.2006 - 18:14 Uhr

Mahlzeit,

ich hab folgendes Problem.
Und zwar hab ich in einem Ordner mehrere XML-Files (diese haben im Inhalt die gleiche Form).
Ich habe also eine xslt Datei geschrieben, die mir das ganze in eine Dataset-verträgliche Form bringt.

Ich will nun aus dem Programm heraus die XML-Files sozusagen "on the fly" eine nach der anderen umwandeln mit hilfe der xslt datei.
Also müsste ich ja irgendwie aus meinem Programm heraus eine Eingabe auf die Konsole veranlassen, der das neue XML File erzeugt.
(per java org.apache.xalan.xslt.Process ....in "filename" out "file".... etc. )

  1. Geht sowas
  2. Wie?
  3. Ist das sinnvoll, wie ich mir das gedacht habe, oder gibt es da vielleicht noch eine bessere lösung?

Meinungen, Vorschläge und Kritik sind erwünscht 🙂
Vielen Dank für Eure Hilfe

Ben

19.10.2006 - 12:09 Uhr

Und beim einlesen geht das nur über dieses Serialisieren oder wie?
Denn wenn ich die Datei per Readxml() - Funktion einlese, hab ich ja keine möglichkeit das zu beeinflussen oder doch?

19.10.2006 - 11:48 Uhr

also nur zum verständnis...
kann ich denn die datentypen (die im Dataset liegen) nicht, bevor sie in die Datenbank geschrieben werden nochmal konvertieren?
Du meintest ja was mit dem Parse....aber ich find na nix wirklich zu und wüsst auch nicht, wie/wo ich das jetzt einfüge.
ist es denn nicht möglich im ADD-Kommando noch die Form mit anzugeben?
also:

 InsertcmdGeraet.Parameters.Add("@Tbl_Datum", SqlDbType.DateTime, 8, /*(KONVERTIERUNGSART)*/ "Ds_Datum");
18.10.2006 - 15:17 Uhr

das problem ist doch, dass ich es ja gut und gerne ändern kann
in "SqlDBType.DateTime" und auch in der DB den Datentyp auf Datetime ändere
was ich schon vorher gemacht habe.
Nur bringt mir das nix, wenn das Datum als sting reinkommt 😉
mein Problem liegt ja in der konvertierung des Strings...und nicht beim einfügen in die DB 😉

Er bringt mir dann auch weiterhin den Fehler:
"Konvertierung des Parameterwertes von String in DateTime fehlgeschlagen."

18.10.2006 - 14:25 Uhr

Hallo Leute,

ich bin mal wieder....hab diesmal folgendes Problem.
und zwar ist das Datum in meinem XML-File als string abgelegt. --> Auch im DataSet steht es dann also als String drin.
Ich wollt es aber so casten, dass ich so eine Form in die Tabelle einfüge.
10.10.2006
und nicht
10102006
das müsste ja irgendwie über Format gehen oder nicht?
Zur Zeit sie mein InsertKommando so aus.

InsertcmdGeraet.Parameters.Add("@Datum", SqlDbType.Char, 10, "Datum");

nun meine Frage...kann ich das irgendwie gleich im Insertcommando casten?

InsertcmdGeraet.Parameters.Add("@Datum", SqlDbType.Char, 10,  string.Format("{0:d}",Wert));

EDIT:

[CSHARP]InsertcmdGeraet.Parameters.Add("@Datum", SqlDbType.DateTime, 8,  string.Format("{0:d}",Wert));

wobei für Wert halt Datum stehen müsste...

geht das irgendwie?
Danke für eure hilfe.

Ben

18.10.2006 - 11:54 Uhr

Dankefein....
das bringt mich schon ein wenig weiter 😁

17.10.2006 - 17:41 Uhr

so...ich hab ihn jetzt doch erstmal genutzt, um zu schaun, ob das hier alles funzt.
kann ich mir das vom dataadapter generierte auch irgendwo anschaun
im debugger z.b. und wenn ja, wo dort genau...finds nämlich nicht 🙁
Thx

Ben

17.10.2006 - 16:33 Uhr

alles nur bitte keinen commandbuilder 😉

17.10.2006 - 15:13 Uhr

Hallo,

ich hab gleich 2 Fragen. Hoffe Ihr könnt mir da ein wenig behilflich sein.

  1. ist es möglich Daten eines XML-Files, welches auf ein DataSet (XMLDs) geladen wurden 1 zu 1 auf die Datenbank zu kopieren?
    Irgendwie scheint das nicht so richtig zu funktionieren. Das SQL-Statement dürfte eigentlich gehen. Nur das übertragen per DataAdapter bekomm ich irgendwie nicht hin.
    Hier ist mein Code:
string strInsertGeraet = "INSERT INTO Geraete_Tab (SerialNR) VALUES (SerialNR)";
SqlDataAdapter Adapter = new SqlDataAdapter(strInsertGeraet, objSQLConnection);
Adapter.Update(MyXmlDS, "Geraete_Tab");

Fehlermeldung: "Aktualisieren erfordert einen gültigen InsertCommand, wenn eine DataRow-Auflistung mit neuen Zeilen weitergegeben wird."

Eine Idee wäre ja das "ExecuteNonQuery"....aber wie bekomm ich die Daten der einzelnen Spalten des Datasets auf das "Insertcmd.Parameters.Add("@SerialNR", SqlDbType.Decimal).Value = ..???.. " ?

  1. Da ich vorhabe meine Tabelle zu normalisieren wollt ich fragen, wie ich das dann mit dem DataSet mache. Sprich,...wenn ich eine Tabelle Normalisiere, dann nutze ich ja in der "Main-Tabelle" nur noch eine ID, für eine bestimmte Bezeichnung.
    Auf dem Dataset, welches aus dem XML-File generiert wurde müsste ich ja dann, das jeweilig betreffende Feld/Attribut "umwandeln". wenn z.b. "Test1" im XML File stand, dann muss ich ja im DataSet das ganze z.b. in "1" umwandeln. Dazu müsste ich ja aber gezielt auf das jeweilige Element zugreifen. Kann mir jemand sagen, wie ich das am besten mache?
    Geht doch hoffentlich nur über eine Schleife?
    Vielen Dank für eure Hilfe

Ben

11.09.2006 - 14:29 Uhr

Jo sowas hatt´ ich mir auch schon gedacht.
Na ich werds mal probieren
Danke für eure Hilfe

11.09.2006 - 12:07 Uhr

Na das sieht doch schonmal ganz fein aus.
Sorry das ich das vergessen hab. Meine DB ist SQL....das ALTER TABLE hatte ich schon ganz vergessen, dass es sowas gibt....das macht die sache erheblich leichter 🙂

Das Insert muss ja dann halt von der Anzahl der spalten dynamisch sein.
Sprich wenn ein Atribut mehr dazukommt, so muss der Insertbefehl auch ein Attribut mehr einfügen.
Denn wie gesagt, die Anzahl ist abhängig von der Attributanzahl in der XML datei.
immer wenn dann z.b. eine neue Spalte dort auftaucht, muss sich die Tabelle vergrößern und der INSERTbefehl auch um eine Stelle verlängern.
Dann ist halt fraglich, ob das so funktioniert?

INSERT INTO [Tabellenname]
(Wert1, Wert2, Wert n, ... + neuer Wert )

11.09.2006 - 08:51 Uhr

Hallo Leute.

Hab schon die Suchfunktion vollkommen ausgereizt...aber nix zu meinem Problem gefunden.

Und zwar geht es darum, dass ich Messdaten aus ner XML-Datei auslese. Soweit so gut.
Die Attribute können allerdings auch mehr werden. d.h. Brauch ich eine Dynamische Tabelle, die nach dem auslesen des XML-Files checkt, ob sich die Anzahl der Spalten verändert hat. und wenn ja eine Neue Tabelle mit den neuen Spalten anlegt.
Das dürfte ich allerdings hinbekommen.
Nun ist aber das Problem, dass ich ja das Dataset des XML Files wieder auf die DB spielen muss. Da ich ja aber nicht weiss, wie groß meine Tabelle in den einzelnen Fällen ist, müsste ich quasi ein "dynamisches INSERT" erzeugen, mit dem ich die Daten in die Tabelle fülle.
Soweit ich das mitbekommen habe, kann ich ja nur über ein INSERT an die DB ran.
Schön wärs, wenn ich das Dataset einfach nur auf die DB übertragen könnte 🙂
Also ich hoffe ich konnte euch mein Anliegen einigermaßen gut rüberbringen.
Hoffe Ihr könnt mir diesbezüglich weiterhelfen

Gruß Micha