Laden...
O
oehrle myCSharp.de - Member
E-Technik Germany Dabei seit 08.06.2009 461 Beiträge
Benutzerbeschreibung

Forenbeiträge von oehrle Ingesamt 461 Beiträge

25.10.2010 - 11:39 Uhr

Hi, eine Frage. Ich habe eine Planung für Systeme in einer Abteilung entwickelt. In der Abteilung werden 3 Schichten gearbeitet. Ich habe jede Schicht in einem Panel dargestellt, die Systeme (sind dann ja uch in allen drei SChichten vorhanden) habe ich als CheckBoxen dargestellt. Damit kann also der gesamte Tagesablauf dargestellt werden, was alles läuft. Nun soll ich das System auf weitere Abteilungen übertragen. Der Aufbau der Form kann identisch bleiben, nur die Tabellen auf die ich zugreife ändern sich. Kann ich das vererben? VErerben wäre doch bestimmt deswegen besser, wenn ich nachträglich in einer MEthode was ändere, dann könnte ich das in der Basisklasse machen, und würde für die anderen Forms übernommen werden. Wäre das so korrekt?
Wenn ich die Forms kopiere, muss ich ja bei jeder Form den Code ändern, wenn etwas zu änden wäre??
Wer hat eine Lösung?

25.10.2010 - 11:32 Uhr

Hi, habe mir was gestrickt, war ja nicht schwer.
Ich nehme mein Zieldatum, das angenommen nächste Woche Mittwoch ist, und mein Startdatum, das heut (Dienstag) ist. Dann habe ich das über eine do.. while-Schleife ablaufen lassen.
Ich beginne am Starttag und addiere immer einen Tag drauf, und prüfe ob es eine Samstag ode Sonntag ist. Wenn nicht, wird ein Merker inkrementiert, ansonsten wird er nicht inkrementiert. So kann ich die Wochenendtage ausgrenzen.


 private int EditierzeitraumAuswerten(DateTime zielDatum)
        {
            int tageZaehler = 0;
            double merker = 0;
            DateTime tag;
            do
            {
                merker++;
                tag = DateTime.Now.AddDays(merker);
                if (tag.DayOfWeek == DayOfWeek.Saturday || tag.DayOfWeek == DayOfWeek.Sunday)
                    continue;

                tageZaehler++;

            } while (zielDatum.ToShortDateString() != tag.ToShortDateString());
                    
            
            return tageZaehler;
        }

22.10.2010 - 09:50 Uhr

Hi, ich stehe gerade vor einem Problem.
Ich habe ein Startdatum und ein Enddatum, diese können je nach BEdarf variieren, das also eine Zeitspanne von mehreren Tagen dazwischen sein kann. Nun kann die Zeispanne auch über das Wochenende hinaus gehen. Ich möchte dann aus dieser Zeitspanne den Samstag und Sonntag herausnehmen, das diese Tage in meiner Zeitspannenauswertung ausgeschlossen werden.
Hat dazu jemand eine Idee? Da gibts doch bestimmt etwas fertiges, oder?
Habe mich schon dran probiert aber ohne Erfolg.

18.10.2010 - 19:59 Uhr

verwendetes Datenbanksystem: <SQLEXPRESS 2008>
Ich möchte eine stored procedure haben, die mir in der datenbanktabelle eine neue Spalte erzeugt, deren Name ich ihr im Code übergebe. Der Typ der Spalte soll als 'BIT' festegelegt werden. Wie mach ich das?
Ich habe es schon geschaft eine normale Spalte als Text anzulegen, aber die Spalte soll den Typ 'Bit' haben. Kann mir jeman helfen??
Hier mal was ic hschon gesehen habe:


ALTER PROCEDURE dbo.SpalteNeu
(
	@Spaltenname TEXT
)
	
AS


	/* SET NOCOUNT ON */

DECLARE @Proc nvarchar(1000)
SET @Proc='
	ALTER TABLE [MVtest].[dbo].[HM_komplett]
	ADD '+cast(@Spaltenname as nvarchar)+' BIT
'

EXEC(@Proc)
	-- @Spaltenname 

28.09.2010 - 13:42 Uhr

Hi, habe die Klasse geändert (überschreiben von Equals() und GetHashCode())
Nun, jetzt muß ich jeden Eintrag der List in den Typ zurückcasten (CDateiInfos) und dann mit Equals auswerten. Geht das nun auch gleich mit dem Vergleich in der List??


if (listVorhandenSQLFiles.Equals(CUpdateSQL.listDateienImPool[i]))
{

}


28.09.2010 - 10:03 Uhr

Hallo, ich habe ein Datenbank, die Werte aus Dateien speichert. Diese Werte der Dateien sollen immer wieder aktualisiert werden können. Diese Dateien liegen in einem Verzeichnis auf dem Server, und es weren dort neue erstellt, oder auch die vorhandenen Dateien verändert (nur der Inhalt, nicht der Dateiname).

Nun lese ich die Dateien aus dem Verzeichnis auf dem Server ein, und schreibe den Dateinamen und das letzte Änderungsdatum in eine List<T>.

Dann lese ich aus der SQL-Tabelle alle Dateiname und ihrem letzten Änderungsdatum ebenfalls in eine List<T> ein.

Dann will ich in einer Schleife prüfen, ob alle die eine generische Liste den Eintrag von der anderen generischen Liste beinhaltet ==> List<t>.Contains()

Leider funktioniert das so nicht. Ich gebe das mal an wie ich das gemacht habe.



/// hier der Klassenaufbau für die generische Struktir der Liste
public class CDateiInfos
    {
        public string Dateiname { get; set; }
        public DateTime LetzterSchreibzugriff { get; set; }
    }

/// hier schreibe ich die Dateieinträge von der SQL-Tabelle rein
List<CDateiInfos> listVorhandenSQLFiles = new List<CDateiInfos>(); 

/// hier sind die Dateien vom VErzeichnis auf dem Server drin 
/// CUpdateSQL.listDateienImPool

            for (int i = 0; i < CUpdateSQL.listDateienImPool.Count; i++)
            {
                if (listVorhandenSQLFiles.Contains(CUpdateSQL.listDateienImPool[i]))
                {
                    listGeaenderteDateien.Add(CUpdateSQL.listDateienImPool[i]);
                }

            }


So findet er jedenfalls keine Übereinstimmung, warum weiss ich nicht. Es sind jedenfalls in beiden Listen gleiche Einträge vorhanden.
Hat jemand einen Tipp. Muss ich da noch was implementieren (Schnittstelle??)

14.09.2010 - 14:23 Uhr

Danke dir für den Link. Der Fehler war was ganz dämliches, aber auchwirklich sehr gut versteckt in einer Methode bei einem Dateizugriff.

14.09.2010 - 10:00 Uhr

Hallo, habe das mal getestet. Bekomme folgende Meldung:
==> System.NullReference Exception. Object reference not set to an instance of an object

Wie komm ich da weiter dran? Problem ist, das ich auf diesen Rechnern immer nur mal kurz ran kann und kien Debugger-System drauf ist.

14.09.2010 - 09:57 Uhr

Das mit den Standard-Bold Dates habe verwende ich schon für gesetzte Termine. Ich möchte deshalb die Feiertage in einer extra Farbe anzeigen.

14.09.2010 - 06:38 Uhr

Hallo, hat von euch schon jemand das Control so abgeändert, das man die Feiertage in einer anderen Farbe darstellen kann als die Tage des vorigen oder kommenden Monates?
Das muß doch bestimmt irgendwie möglich sein. Überschreiben (Vererbung)??

11.09.2010 - 21:29 Uhr

Hat noch jemand eine Idee wie ich rausfinden kann, was den Rechnern fehlt? Gibt es bei Windows irgendein Log-System?

10.09.2010 - 12:06 Uhr

Hi, das hatte ich schon versucht. Habe bei den ganzen Aufrufen Try-Catch eingefügt, sowie auch das mit der DEBUG-Variante.

Wie gesagt, das Programm initialisiert sich zuerst, dann wenn diese Methode mit der List<t> aufgerufen wird, schmiert das Prog ab. Ich bekomme keinerlei Hinweise von try -- catch.

P.S. Try catch ==> ich fange die oberste Ausnahme ab, das ist die Exception. Das ist doch wohl ok, oder?

10.09.2010 - 10:43 Uhr

Hallo, habe ein Programm geschrieben, dass einigen Rechnern läuft. Nun wollte ich das Programm noch auf zwei weiteren Rechnern einrichten, das Programm beendet sich aber selbst.
Zur Verknüpfung vom Programm: Meine Releasde VErsion liegt auf einem Netzlaufwerk, und wird über eine Desktopverknüpung auf den betreffenden Rechnern eingebunden. Das funktioniert soweit.

==> Das PRogramm hat ein Problem festgestellt und muss beendet werden.
Falls Sie ihre Arbeit noch nicht gespeichert hatten, können Daten möglicherweise verloren gegangen sein.

Diese MEldung bekomme ich. Habe nun auch schon gegoogelt, und was gefunden. Mein Programm arbeitet doe PROGRAM.CS ab und initialisert die erset FORM. In der Form werden VErzeichnisse auf Bestand geprüft, und dann kommts. Ich lese Daten ein, schreibe diese Daten in eine List<T>, un da kacken die beiden Rechner ab. Framework 3.5 SP1 ist installiert, auch bei der Einstellung im VS 2008 eingestellt. Wer kann mir dabei helfen?

01.09.2010 - 21:21 Uhr

Meine vorige Datenzeil wurde immer komplett null gesetzt, das hängt damit zusammen, das ich direkt vor dem AddNew() alle meine Checkboxen zuerst gelöscht habe. Das darf ich baürlich erst machen wenn die neue DataRow schon steht.
Das mit dem ConcurrencyViolation hing mit der Vergabe der automatisschen PK-ID der Tabelle zusammen. Hab ich deaktiviert, und hat gefunzt.

01.09.2010 - 17:48 Uhr

verwendetes Datenbanksystem: <SQL 2008 Express>
Hi, probiere schon seit einem ganzen Tag an einem Problem beim updaten. Zuerst mal, ich verwende ein untypisiertes Dataset.
In meiner Form benutze ich zum navigieren ein BindingNavigator. Ich füge einen neuen Datensatz über die BindingSource hinzu:
_bsHM_F.Current;.AddNew();

Dann hole ich den aktuellen Datensatz in eine DataRowView:
_drv = (DataRowView) _bsHM_F.Current;

Nun trage ich alle relevante Daten in die _drv ein und mache dann das update.
Davor generiere ich noch den SQL-CommandBuilder:
_sqlcmb = new SqlCommandBuilder(_arSqladap[0]);

Dann kommt das Update:
_arSqladap[0].Update(_MVDataSet.Tables["HMF"]);

Ich hänge mal hier den Code ran, wenn ich die Daten sichere:


       private void stp_btnSave_Click(object sender, EventArgs e)
        {
            DataRowView drv = (DataRowView)_arBsSchichtTabs[0][_arBsSchichtTabs[0].Count-1];
            drv.Row.BeginEdit();
            if (drv != null)
            {
               if (Convert.ToDateTime(drv.Row["Datum"]) == Convert.ToDateTime("01.01.2000"))
                {
                    drv.Row["Datum"] = monthCal.SelectionStart.Date;
                    drv.Row["Datum"] = aktTagDtime;
                }

                drv.BeginEdit();
                foreach (Control ctrl in pnl_Frueh.Controls)
                {
                    if(ctrl is CheckBox)
                    {
                        CheckBox cbx = (CheckBox) ctrl;
                        drv[ctrl.Name] = cbx.CheckState;
                    }
                }
                drv.Row.EndEdit();
            }

            
            try
            {
                this.Validate();
                _arBsSchichtTabs[0].EndEdit();
            }
            catch (ConstraintException conexc)
            {
                MessageBox.Show("Es kann kein neuer Datensatz angelegt werden, wenn das Zugehörige Datum schon in einem \n anderen Datensatz verwendet wird. Bitte anderes Datum auswählen !!", "Datum wurde schon verwendet", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                _arBsSchichtTabs[0].CancelEdit();
                return;
            }

            try
            {
                _sqlcmb = new SqlCommandBuilder(_arSqladap[0]);
                              //{
                              //    SetAllValues = false,
                              //    ConflictOption = ConflictOption.OverwriteChanges
                              //};
                _arSqladap[0].Update(_MVDataSet.Tables["HMF"]);
                _MVDataSet.Tables["HMF"].AcceptChanges();
                MessageBox.Show("Datensatz wurde korrekt übernommen !", "Aktualisierung / Eintrag erfogreich");
                
            }
            catch (SqlException sqlex)
            {
                MessageBox.Show("Es kann kein neuer Datensatz angelegt werden, wenn das Zugehörige Datum schon in einem \n anderen Datensatz verwendet wird. Bitte anderes Datum auswählen !!", "Datum wurde schon verwendet", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                _arBsSchichtTabs[0].CancelEdit();

                if (monthCal.DataBindings.Control == null)
                    this.monthCal.DataBindings.Add(new System.Windows.Forms.Binding("SelectionRange", this._arBsSchichtTabs[0], "Datum", true, System.Windows.Forms.DataSourceUpdateMode.OnValidation, null, "d"));
                return;
            }
            


            if (monthCal.DataBindings["SelectionRange"] == null)
                this.monthCal.DataBindings.Add(new System.Windows.Forms.Binding("SelectionRange", this._arBsSchichtTabs[0], "Datum", true, System.Windows.Forms.DataSourceUpdateMode.OnValidation, null, "d"));

            _arBsSchichtTabs[0].Sort = "Datum ASC";
            KalenderDatumMarkieren();
            // BerechneVerbrauch();

            tsp_Speichern.Enabled = false;
        }

Ich hatte es schon soweit, dass die Datensätze korrekt abgespeichert wurden, aber der letzte Datensatz wurde immer alle Spalten in der Datentabelle auf null gesetzt. Warum?

01.09.2010 - 14:44 Uhr

Hi, ich habe das Problem vor längerem gelöst. Ich habe einfach dieseleb Query nochmals abgesetzt, und in einer weiteren var abgelegt. Dann habe ich die beiden Queries in eine neue Datentabelle eingelesen. Die Spaltennamen habe ich mir über eine SChleife aus den beiden Abfrageergebnissen ausgelesen, und so die gemeinsame Tabellenstruktur erstellt, und dann die ganzen Datenreihen aus den Ergebnissen wieder mit einer Schleife 1:1 in die Tabelle geschrieben. Dann muß die Tabelle nur noch mit dem DataGridView verbunden werden. Ist zwar ertwas umständlich, aber eine andere Lösung hatte ich nicht gesehen und funktioniert schnell und gut.

11.08.2010 - 22:04 Uhr

Hi, bevor ich da noch lang dran rumprobier, das geht also mit der JOIN definitiv so nicht, ist das korrekt???
Naja, finde das Linq schon ne tolle Sache, manche Dinge hab ich auch noch nicht begriffen. Aber wenn es sowas nicht kann, das stimmt mich ein wenig nachdenklich. Gibt's da Besserung ab FW 4.0 ??
Arbeite mit VS 2008 Prof, von 2010 hab ich mir erst die Expressversion gezogen, und weiß nicht wie da EF unterstützt wird.

Ich habe das Projekt davor mit ADO.Net realisiert. Bei der ersten Auswahl vom WErkzeugprogramm in der Kopf - Tabelle wird auf 16000 Werkzeugdaten zugegriffen, die nach diversen Abmessungen anhand der Datensaplten abgesucht werden können. Dann beginnt je nach Arbeitanwendung die Verzweigung in die 24 Tabellen. Somit muß ich z.B. wenn 3500 Datensätze in der Kopftabelle in das Auswahlkriterium fallen, von allen 3500 der Fremdschlüssel in eine Tabelle gespeichert werden (per SQL-Command), da die SQL-Abfragerei ja in den DataSet-Tabellen auch nicht funktioniert. Diese Geschichte ist für den Rechner sehr Zeitintensiv, diie Tabellen dann immer wieder direkt vom SQL-Server auszulesen, weil ich die eben nicht im Ram zwischenspeichern kann. Das ist eben das tolle an Linq to DataSet oder Linq to EF.
Muß ich mir was überlegen, wie ich die ganze Sache anders aufziehen könnte.

11.08.2010 - 00:25 Uhr

Habe das mal getestet. Geht nicht. Das ist doch irgendwie total irre, oder? Irgendwie muß es doch möglich sein, alle Tabellen von beiden tabellen in ein DGV zu bekommen.
Also, ich muß in meinem Projekt nur Abfragen machen, nichts zurückschreiben. In meinem Projekt habe ich eine Tabelle mit Werkzuegdaten, dazu sind 24 weitere tabellen mit Daten vorhanden, die über einen Fremdschlüssel zueinander passen. Dmit bei den Abfragen, die nacheinander von abfolgen können nicht zu viel Zeit verloren geht, sollen die Daten erst mal lokal abgelegt werden (RAM). Das geht mit DataSet oder Entitiy Framework. Habe dasselbe nun auch mal mit DataSet probiert, ist selbes Problem. Dort muß ich beide Typen in eine DataTable bringen (.CopyToDataTable()). Nun, irgendwie muß ich von
select new{k,g}
durchlaufen lassen (SChleife) und die Spaltentypen und Bezeichnungen in eine DataTable erzeugen lassen. Was anderes fällt mir nun nicht ein.
Sonst jemand eine Idee?

08.08.2010 - 18:33 Uhr

Hi, habe mir das durchgeschaut, aber nicht das treffende gesehen. Gib mir mal einen Tipp.
In diesem Link wird ja nur ein Beispiel von einem Objekt gemacht. Ich habe zwei Tabellen.

Mein Ansatz:


 var v = from k in _cnc.Kopf
                    join c in _cnc.C1
                        on k.Dateiname equals c.Bezeichnung
                    select new {k, c};


            dgv_SqlAusgabe.DataSource = v.ToList();                      // Die Datensätze werden im DGV nicht ausgegeben,


Funktioniert aber nur so wie zuvor beschrieben, 2 Spalten weren ausgegeben

08.08.2010 - 15:01 Uhr

Hab mir das angesehen, aber der springende Punkt habe ich nicht gefunden ?? Wie krieg ich das Zueg ins dgv??

08.08.2010 - 11:51 Uhr

Hi, habe das probiert, das Ergebnis hatte ich gestern schon.
Ich bekomme nur zwei Spalten angezeigt, aber die Anzahl der Datenzeilen die Ausgegeben werden sollten die stimmt überein, wie wenn ich das mit SQL mache. Habe mir das LinqPad gezogen, dort die DB verbunden und das mal simuliert. Ich bekomme dort alle Spalten der beidne Tabellen.
Aber im C#-Prog funktionierts nict. Vielleicht spielt die Typisierung eine Rolle?

Zuallererst mache ich von der Entity eine globale Instanz, auch von jeder Tabelle.

Nach dem Initialisieren der Form, lade ich jede Tabelle in eine List <T>. Dann habe ich alle Daten im RAM, weil ich mit meinem Programm sehr viele Suchanfragen in den Daten durchführen werde.

Nun, die Daten liegen vor, ich gebe das so ein:


            var v = from k in _cnc.Kopf
                    join c in _cnc.C1
                        on k.Dateiname equals c.Bezeichnung
                    select new {k, c};

aber als Ausgabe im DataGridView bekomme ich nur zwei Spalten, mit dem Namen der Applikation und dem Tabellennamen.
So ein Käse ...

Ha, du wohl auch Schwarzwald ??

07.08.2010 - 23:24 Uhr

Hallo, das funktioniert so nicht. Noch mal zu meiner Erklärung: Ich habe zwei Tabellen, die Tabelle _kopf und die Tabelle _c1
Die Tabelle _kopf hat eine Spalte die mit der Tabelle _c1 übereinstimmt. Es ist aber keine Fremdschlüsselbeziehung in der Datenbank angelegt. Ich möchte nun die alle Datensaätze der Tabelle _kopf, wo die Fremdschlüsselspalte identisch mit der Beziechnung in der Bezugspalte der Tabelle _c1 ist.

In SQL mach ich das über Join, oder über Where.

In Linq to EF kann man das auch über Join machen, hat aber den Nachteil das ich nicht weiß wie ich alle Spalten auf einen Schlag auswählen kann, da ich sonst bei
SELECT NEW{_kopf.xxx, _kopf.yyy, _c1.xxx, _c1.yyy .....) alles eintrgaen muß. Ich habe sehr viel Spalten und ich möchte dann diese Muster für andere Tabellen weiterverwenden. Gibts da keinen generellen BEfehl, der alle Spalten übernimmt????

07.08.2010 - 10:16 Uhr

verwendetes Datenbanksystem: <SQLEXPRESS 2008>

Hi, ich arbeite mich im moment in Linq to EF ein.
Habe schon einige Fehler geknackt, die einem Frischling so passieren.
Im moment bin ich an einer Abfrage mit Join. Die abfrage funktioniert auch. Nur möchte ich in der select new{} nicht alle Spalten der beiden Tabellen für die Ausgabe alle eingeben, sondern alle irgendwie mit einer Bezeichnung auswählen, wie bei SQL (Select * FROM _C1) als Besipiel. Geht das in Linq? Hintergund: in mnchen Tabellen sind 40 Spalten abgelegt, das ist dann mühsam.
Kann mir jemand helfen?


var v = from g in _c1
                    join p in _kopf on g.Bezeichnung equals p.Dateiname
                    select new {g,p};   // hier müßte sowas wie bei SQL select * geben

06.08.2010 - 10:35 Uhr

Hi FZelle, danke. Damit ich bisher die Ausgabe ohne Fehler anzeigen konnte, habe ich die Spalte einfach ausgeblendet. Nun aber, mein DGV wird dynamisch erzuegt, je nachdem wie ich Tabellen in der Abfrage Joine oder Spalten auswähle. Jetzt hab ich schon rumprobiert, habe auch etwas gefunden. Dann muß ich aber erst die Spalte anlegen, und dann der DGV zuweisen. Nur geht das ja nicht, weil ich die Tabelle je nach Abfrage generiere.Wie mach ich das? Muß ich da ein DataEvent abfangen und dann neu formatieren??

05.08.2010 - 22:38 Uhr

DIe Fehlermeldung tritt bei der Abfrage auf, wenn die Datenzeilen in das DataGridView übergeben werden. Bei jedem Datensatz. Und zwar bei dem SSMA_TimeStamp. Da muß er irgend was mit dem Format nicht schlucken. Muss mal noch sehen wie ich den Typ der Spalte ändere, denke daran liegts.



---------------------------
DataGridView Default Error Dialog
---------------------------
The following exception occurred in the DataGridView:



System.ArgumentException: Parameter is not valid.

   at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)

   at System.Drawing.ImageConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)

   at System.Windows.Forms.Formatter.FormatObjectInternal(Object value, Type targetType, TypeConverter sourceConverter, TypeConverter targetConverter, String formatString, IFormatProvider formatInfo, Object formattedNullValue)

   at System.Windows.Forms.Formatter.FormatObject(Object value, Type targetType, TypeConverter sourceConverter, TypeConverter targetConverter, String formatString, IFormatProvider formatInfo, Object formattedNullValue, Object dataSourceNullValue)

   at System.Windows.Forms.DataGridViewCell.GetFormattedValue(Object value, Int32 rowIndex, DataGridViewCellStyle& cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)



To replace this default dialog please handle the DataError event.
---------------------------
OK   
---------------------------

05.08.2010 - 19:59 Uhr

Nun funktionierts soweit, bekomme nun noch bei jedem Datensatz der angezeigt wird eine Fehlermeldung für die Spallte SSMA_Timestamp. Das mag er wohl nicht, warum? Hat da jemand schone eine Idee? Ich seh mal nach....

05.08.2010 - 18:54 Uhr

verwendetes Datenbanksystem: <SQL Express 2008>

Hi, kann mir jemand auf die Sprünge hellfen? Ich arbeite mich gerade in Linq to EF ein. Ich habe die Nordwind.mdb als EntityDataModel eingebunden, habe alle Tabellen angewählt und das System die Entitäten erzeugen lassen. Dann habe ic auf meiner Form einfach mal ein DataGridView platziert, ein Button dazu, um mal zu spielen. Nun möchte ich eine Abfrage erstellen:


 private void btn_Linq_Click(object sender, EventArgs e)
        {
           NordwindEntity nw = new NordwindEntity(Settings.Default.ConString);

            var test = from p in Artikel
                       where Artikel. ??
                       select p;


            dgv_test.DataSource = test;
        }

Ich bekomme bei Artikel. keine Properties angezeigt (Artikel ist eine Tabelle (Entität) bei der Nordwind-Datenbank). Warum? Ich sehe zwar, Artikel ist eingefärbt wie eine Klasse, aber kann das sein das ich von jeder Entität ers teine Instanz erstellen muss?

Was ist falsch?

02.08.2010 - 23:40 Uhr

Hi, es funktioniert seit längerem (aber immer noch ein Problem). Ich nutze eine Tabelle zum zwischenspeichern von Ergebnissen, die ich immer wieder in die Tabelle schreibe. Wenn ich nun eine weitere Menutabelle laden will, hole ich mir die benötigten Daten für die Auswahl der Datensätze aus der Tabelle mit dne zwischengespeicherten Daten. Das dauert alles sehr lang. Liegt daran, das ich das nicht alles komplett im DataSet abarbeiten kann (können schon,aber da funktioniert ja das JOIN nicht). Nun, wie kannn ich die Daten lokal im Cache vorhalten? Mit LinQ? Evtl. ists dort auch besser mit der Verknüpfun der Tabellen (Join) ? Hat jemand einen IDee?

23.07.2010 - 11:19 Uhr

Hallo, das Problem ist halt, das ich nicht nur in der Tabelle dann irgendwelche Daten filtern möchte, sondern die Tabelle mit einer anderen aus meinem DataSet Verjoinen möchte. Was ist die Lösung? Eine temporäre Tabelle in SQL erstellen? Dann muß ich aber wieder genau die STruktur kennen. WEnn es möglich wäre wie in Access, da kann man ja einfach aus einer Abfrage die Datensätze in eine Tabelle lenken. hat noch jemand eine Idee?

23.07.2010 - 07:53 Uhr

verwendetes Datenbanksystem: <SQL2008Express>
Hallo, ich habe Daten in einer DataView ausgegeben. Dann übertrage ich die Daten aus der DataView in eine DataTable.


 /// Daten zuvor aus der DV sichern
                    _tempTabelle = _dv.ToTable();

Jetzt möchte ich die DataTable in eine weitere Abfrage einbinden


_sqladap.SelectCommand.CommandText = "SELECT * FROM Kopf JOIN _temptabelle  ON Kopf.Dateiname = _temptabelle.Bezeichnung";

Tabeladapter füllen


_sqladap.Fill(_ds, _tempTabelle.ToString());

Da bringt mir aber der Compiler einen Fehler: ungültiger Objektname "_tempTabelle".

Ich denke ist auch klar weil die Tabelle im DataSet nicht existiert. Wie bekomme ich die da hinein? Oder ist der komplette Ansatz falsch?

30.06.2010 - 16:03 Uhr

Hallo, habe gerade noch im Forum danch gesucht. Das wird wohl nicht so funzen, mit dem aktualisieren per Code. Sieht so aus als müßte ich in untyp. DataSet verwenden.

30.06.2010 - 15:53 Uhr

Sorry, am besten die Tabellen rauskoieren und in Excel einfügen, dann passt die Formatierung.

Tabelle Maschinenliste: (hier werden weitere Maschinen manuell eingefügt)

ID MaschName Typ Druckluft Oel KVA Zentralv
1 WZ300x1 Rund 300 450 25 2
2 WZ300x2 Rund 300 450 25 1
3 WZ300x3 Rund 300 450 25 3
4 USx1 Dreh 100 120 10 1
5 MSKx1 Fraes 125 245 15 2

Nun die zweite Tabelle, in der die ganzen aktivierten Maschinen welche dann in der Übersicht angeklickt werden, abgespeichert werden und die VErbrauchswerte addiert und ebenfals in diese Tabelle in die VErbrauchsspalten eingefügt wird.

ID WZ300x1_Fruehschicht WZ300x1_Spaethschicht WZ300x1_Nachtschicht WZ300x2_Fruehschicht WZ300x2_Spaethschicht WZ300x2_Nachtschicht Datum SummeOelvebrauch SummeLuftverbrauch SummeKVA Zentralversorgungen
1 TRUE FALSE FALSE TRUE TRUE TRUE 30.06.2010 1350 900 75 7
2 FALSE TRUE FALSE FALSE FALSE FALSE 01.07.2010 450 300 25 2
3 FALSE FALSE FALSE TRUE FALSE FALSE 02.07.2010 450 300 25 1
4 FALSE FALSE TRUE FALSE FALSE FALSE 03.07.2010
5 FALSE FALSE FALSE FALSE TRUE FALSE 04.07.2010

Nun, so sieht der Aufbau Grundsätzlich aus. Nur habe ich im Moment 60 Maschinen und viel mehr Verbrauchswerte.
In der zweiten Tabelle wird also die Tagesüberischt für alle drei Schichten abgelegt, und die Verbruachswerte sowie die aktiven VErsorgungseinheiten abgelegt und berechnet.

Wird jetzt in der Maschinentabelle eine neue Maschine eingetragen, muß die zweite Tabelle automatisch erweitert werden (Spalten einfügen, was nun auch schon funktioniert). Nun muß ich noch das typ. DataSet automatishc aktualisieren lassen, habe aber noch keine Ahnung wie ich das machen soll.

30.06.2010 - 14:02 Uhr

Werde eine erstellen und euch zeigen (heute mittag oder heute abend noch)
Gruß
oehrle

30.06.2010 - 10:24 Uhr

Hi, ich habe dich verstanden. Das ist auch korrekt mit der Datenkonsistenz. Aber ich denke in meinem Fall wäre das noch so OK. Es funktioniert nun auch, mit einer gespeicherten Prozedur eine neue Spalte mit Namen einzufügen. Nun habe ich aber noch ein anderes "dickes" Problem. Ich arbeite mit einem typ. DataSet. Das heißt auch, wenn ich in der Tabelle neue Spalten hinzufüge, sind die zwar drin, aber nicht im typ. DataSet. Da muß ich die erst wieder manuell anwählen und das DataSet neu generieren lassen. Gibts da die Möglichkeit, das automatisch generieren zu lassen?

29.06.2010 - 17:26 Uhr

Ein (sehr einfacher) Ansatz ist z.B. schon mal, Deine Spalten von den eigentlichen Inhalten zu trennen - z.B. ungefähr so wie im angehängten Schema.gif. (Man beachte: Ich hab hier nur ca. 5 Minuten Zeit investiert - es geht definitv besser...)

Dann kannst Du (im Prinzip) beliebig viele Spalten in die (hier "Bezeichner" genannte) Referenztabelle eintragen und die eigentlichen Daten (in der "Werte"-Tabelle) nur noch darauf verweisen lassen.
Damit ist es z.B. sehr leicht möglich (man beachte die Anführungszeichen!) "über die Spalten zu aggregieren" (z.B. mit SUM oder AVG) indem Du nach der BezeichnerId gruppierst.

Bart Simpson

Also, ich hab eeine Tabelle, in der jede Maschine einen Datensatz abbildet. In diesem Datensatz sind auch dann Verbrauchswerte usw. für jede Maschine eingetragen. Wenn ein Wochenpaln erstellt wird, wird für jeden Tag und jede Schicht diese aktuelle Maschinenliste geöffnet, jede Maschine mit ihrem Namen aus Datenreihe (Spalte) ausgelesen und dynamisch eine Checkbox mit dem Namen und DataBinding zur CheckBox mit der BindingSource erzeugt. Nun wählt man in einem Kalender den Wochentag aus, markiert alle Maschinen die an dem Tag arbeiten sollen (das Datum wird überprüft, damit kein identischer Tag 2x angelegt werden kann). Dann wird der Datensatz in der Tabelle Maschinenschicht abgelegt. Das sind 60 Maschinen, * 3 Schichten macht dann 180 Spalten. Kommt nun eine Maschine hinzu, dann sind das gleich drei Spalten eil wir drei Schichten pro tag haben. Nun, ic würde die Tabelle dann gern eaus dem COde heraus erweitern und den Spalten die Namen der maschinen mit den SChichthürzel geben.

29.06.2010 - 15:52 Uhr

Hallo Bart, dann geb mir noch einen Tipp bevor ich falsch ansetze.

29.06.2010 - 14:27 Uhr

Die Attribute können allerdings auch mehr werden. ... Brauch ich eine Dynamische Tabelle, die nach dem auslesen des XML-Files checkt, ob sich die Anzahl der Spalten verändert hat.
Wenn du meinst, ob du die Tabelle in der Datenbank dynamisch anpassen kannst: Ja, jedes halbwegs vernünftige RDBMS kennt die DDL-Syntax "ALTER TABLE". Alternativ kannst du auch neue Tabellen anlegen, die diese zusätzlichen Daten aufnehmen. (Nach dem Sinn frage ich besser nicht, denn damit zwingst du, entsprechende Dynamik vorausgesetzt, jeden SQL Server in die Knie.)
Besser wäre es hier, du wüsstest, wieviele Felder du maximal haben musst und würdest die Tabelle(n) statisch vordefinieren. Selbst wenn die Antwort lautet "Es ist unbestimmt, wieviele Felder meine Datensätze haben.", hast du damit schon eine klare Aussage getroffen, für die es optimale DB-Design-Patterns gibt. ... Aber das würde jetzt wohl zu weit führen, fürchte ich...

Wenn du meinst, ob du ein Statement dynamisch erzeugen kannst: Ja, auch das ist möglich. Vergewissere dich zunächst, dass die ausgelassenen Felder in der Datenbank NULL-Werte erlauben (oder sichere sie durch defaults ab).

the rough way
Anschließend erzeugst du ein Statement, das etwa so aussehen könnte

  
  
-- T-SQL Statement  
-- Insert mit wahlfreien Attributwerten  
  
INSERT INTO [Tabellenname]  
(Wert1, Wert2, Wert3, ...) -- Hier alle Felder der Tabelle aufnehmen, für die "not NULL" definiert ist, oder denen Werte zugewiesen werden (müssen)  
VALUES   
(oWert1.Value, oWert2.Value, oWert3.Value, ...) --- Hier alle Daten für einen Satz aufnehmen. Dabei gilt, dass Wert1 den oWert1.Value aufnimmt. Nicht vorhandene Werte mit NULL (oder Default-Werten) belegen.  

the smart way
Wenn du mit SQL-Syntax nicht vertraut bist, geht das übrigens auch mit dem CommandBuilder (SqlCommandBuilder, OdbcCommandBuilder). Die machen das automatisch (zur Laufzeit und deshalb dynamisch an die eingelesenen Daten angepasst) für dich. Daher funktioniert der folgende Weg durchaus auch:

Schön wärs, wenn ich das Dataset einfach nur auf die DB übertragen könnte. ... "dynamisches INSERT" ...
Geht auch.

  1. XML-Daten in das Dataset einlesen.
  2. Datatables um die "fehlenden" Spalten erweitern. (Optional, wenn die Datenbank/Tabelle es zulässt.)
  3. DataAdapter erzeugen. (Connection, etc.)
  4. Insert-Command am DA etablieren (vordefiniert oder dynamisch generiert)
  5. DataSet tabellenweise oder en bloc über DataAdapter "updaten"

Jeder Weg hat Vor- und Nachteile: Der direkte Weg ist effektiver, performanter, sowie leichter zu skalieren und warten. Der smarte Weg ist einfacher und schneller geschrieben, dafür aber auch um Längen weniger performant. Welchen du wählen solltest, hängt von Anforderungen ab, die du hier nicht (ausreichend) dargestellt hast.

Hallo, ichhabe gerade das selbe Problem. Ich lese eine Tabelle mit Maschinen ein und stelle die jeweils in drei Panels da (jedes Panel für eine Schicht, Schichtarbeitsmodell).
Das pasiert also dynamisch. Nun kann es sein das morgen drei neue Maschinen gekauft werden. Ich trage diese Maschinen auch in die Liste ein. DIe Maschinen werden nun beim PRogrammstart automatisch in den Panels aufgelistet. Wenn ich nun die Maschinen für die Wochenübesicht einplane, habe ich das Problem das die drei neuen Maschinen nicht als Spalten in der Kalendertabelle, wo alle Maschinen in der Tagesübersicht aufgelistet sind nicht vorhanden sind. Ich müßte diese nun auch dynamisch der SQL-Tabelle zufügen. Im Dataset habe ich das schon gemacht, funktioniert dort auch.
Jetzt muß ich die neuen Spalten nur noch per Transact-SQL einfügen? Wie binde ich das in meinen Code ein? Habe das gerade mal versucht aber funzt nicht ??
(Verwende typ. DataSet).

13.06.2010 - 11:11 Uhr

Super CSL, deine Lösung funzt. Natürlich schreibe ich das Quatsch, aber in der ganzen Hilfe von MSDN findet man auch kein solches Beispiel. Anahnd solcher Lösungen findet man dann auch selber wieder weiter . Bin aber bisher auf keinen rünen Zweig gekommen, da kann man auch gerne mal resignieren. Danke dir für die Hilfe.

13.06.2010 - 11:05 Uhr

Nain daran liegts nicht. Dies war eine abgewandelte Form fürs Forum, da ist mir leider der Fehler passiert.

12.06.2010 - 19:59 Uhr

verwendetes Datenbanksystem: <MSSQLExpress 2008>

Hi, habe ein Problem mit LINQ und XElement. Ich möchte das nachfolgende File (habe es nachfolgende beigefügt) den Wert von <P02_01> auslesen. Kriegs aber nicht gebacken, da ich mit LINQ auch noch nicht so frisch bin. Kann mir da jemand Beistsand leisten?


<?xml version="1.0" encoding="utf-8"?>
<Parameterfile>
  <Parameterdaten>
    <Diameters Numberrange="1" />
    <AxialLength Numberrange="2">
      <P2_01>24.3</P2_01>
      <P2_02>20</P2_02>
    </AxialLength>
    <RadialLength Numberrange="3">
      <P3_01>23.5</P3_01>
      <P3_02>19.01</P3_02>
    </RadialLength>
    <AnglesDimensions Numberrange="4" />
</Parameterdaten>
</Parameterfile>

Hier meine Abfrage. Funktioniert leider nicht. Entweder ich muß die Abfrage noch weiter verschachteln oder ich bin zu blöd für LINQ. Irgendwie muß ich an den Wert des Elemtes <P02_01> kommen .Value muß das sein.

Eigentlich habe ich gedacht dass es mit XElement auch relativ einfach sein sollte, weil man damit auch sehr toll und einfach XML-Files erstellen kann.


 private void btn_XmlLaden3_Click(object sender, EventArgs e)
        {

            textBox2.Clear();
            textBox1.Clear();

            // XDocument xdoc = XDocument.Load(@"c:\testStruktur.xml");

            XElement root = XElement.Load(@"c:\testStruktur.xml");


            var test = from el in root.Descendants()
                       where el.Name.ToString() == "P02_01"
                       select el;


            textBox1.Text = (string) test.Value;        /// Wie bekomme ich mit LINQ den Wert von <P02_01> ?????


        }

Hat jemand den treffenden Tipp für mich?

08.06.2010 - 17:49 Uhr

Hallo gfoidl,

ich denke Drawing 3D ist erst mal genau das zum Einsteigen. Danke dir.

08.06.2010 - 16:35 Uhr

Habe ich irgendwelche Nachteile oder Vorteile gegenüber DirectX? Ich bin da eh ein Frischling. Evtl. gibts da auch etwas um andere Datenformate einzulesen (CAD-Daten oder so ...)

Es ist also mehr für den technischen Bereich gedacht.

08.06.2010 - 16:10 Uhr

Hallo, habe mir das mal angesehen. Also das VTK kann ich schlecht beurteilen, da man nicht allzuviel Doku dazu findet (auch so gut wie keine Beispiele). und XNA, ist das doch hauptsächlich für Spieleprogrammierung? Ich möchte mit drehenden Werkzeugen experimentieren, so mein Wunsch. Und das in 3D, aber ich denke das ist hammerhart.
Welche guten, kostengünstigen alternativen gibts noch für C# ?

08.06.2010 - 13:18 Uhr

Hallo, ich habe schon mal ein bischen 3D bei DirectX-3D geschnuppert. Ich muss ein rotierendes Teil erzeugen, das auf einen anderen Gegensatnd trifft, und den Abdruck darstellen, das in 3D. Nun habe ich mir schon überlegt was man dazu nimmt. Was sagt die Community dazu? Welche alternativen gibt es? OpenGL kann man anscheinend auch ohne Probleme auf andere Betriebssysteme übertragen (neu kompilieren). Was ist nun die bessere Alternative? Ich programmiere C#. Wer kann dazu ein gutes Buch empfehlen (VErständliche schreibweise?)

02.06.2010 - 17:03 Uhr

Also, für alle die sich damit auch schon schwer getan haben, unter folgendem Link eine Lösungsvariante dazu.

http://entwickler-forum.de/showthread.php?t=42954

Das mit dem eindutigen Identifier mit dem Datum funktioniert bei mir auch, sozusage als PK.

Ich hoffe damit auch mal anderen helfen zu können.

01.06.2010 - 22:43 Uhr

Ja, hatte ich auch eingefügt. Was passiert eigentlich genau wenn die BindingSource.Add() losgetreten wird? Da passiert doch intern was, oder? Und genau da muß ich irgendwo ein Ereignis abfangen, vemute ich. Komisch , ob nur ich das PRoblem habe? Hatte denn dieses PRoblem noch niemand?

01.06.2010 - 09:00 Uhr

Hallo, mein Problem hat sichnoch nicht gelöst. Das gibt noch ein Fall für XY ungelöst. Ich habe getern abend noch rumprobiert. Ich habe in meiner einzigen Tabelle das Datum nicht als PK festgelegt, aber es darf nicht null sein. Nun arbeite ich mit einem typ. DataSet und habe einen BindinNavigator in der Form. Ich habe die Controls gebunden, über den Designer. Wenn ich nun am BindingNavigator das "gelbe Pluszeichen" klicke, wird ein neuer Datensatz in der Form angelegt, ich mache meine Einträge und klicke den Spiecherbutton. Dann motzt meine Appliaktion und sagt das "Datumsfeld sei null".

Da passiert intern irgenetwas, wobeo das Datum nicht übernommen wird. Wer kann mir helfen? Ich habe die Controls auch schon manuell gebunden. Da konnte ich das erste mal ein Datensatz einfügen, beim zweiten mal bekomme ich dann die Meldung das das Datum null ist.
Für sachdienliche Hinweise bin ich sehr dankbar.

28.05.2010 - 13:53 Uhr

Ja ist korrekt. MSSQL 2008. Also kein Datum als PK verwenden. Es darf bei mir nicht Null sein, ein Defaultwert habe ich dafür nicht. Das Datum wird von einem MonthCalender oder DateTimePicker geholt.

28.05.2010 - 12:57 Uhr

verwendetes Datenbanksystem: <SQL2008>

Hallo, ich habe ein Formular erstellt, bei dem verschiedenen Eingaben getätigt werden. Unter anderem wird das Datum eingegeben. Das Datum wird als DateTime abgelegt.
Das Datum dient auch als Primärschlüssel. Nun bekomme ich beim Befehl

bindingSource.AddNew();

immer die Meldung, das die Spalte keine Nullwerte Akzeptiert. ICh hab schon alles getestet, aber irgendwie funzt das nicht. Ich habe doch nur eine Tabelle. Das sollte das doch funktionieren. ICh arbeite mit einem typisierten DataSet. Dazu habe ich eine Bindingsource, meine Controls (CheckBoxen) sind alle gebunden. da kann doch normal nicht schief gehen, oder?

28.05.2010 - 12:50 Uhr

Hallo, habe rumprobiert, und versucht mit SQL Zugriff zu bekommen. Das Geht aber nur mit SQLOLEDB. Mit SQLCLIENT spaggt das Dataset, weil die ganzen Connections und so weiter mit OLEDB bestückt sind. Mehr kann man wohl auch nicht machen, oder?