Laden...
R
Regenwurm myCSharp.de - Member
Student Zentralschweiz Dabei seit 02.04.2008 295 Beiträge
Benutzerbeschreibung

Forenbeiträge von Regenwurm Ingesamt 295 Beiträge

23.12.2009 - 13:47 Uhr

Zugriff von aussen auf eine DB ist immer unsicher, sofern du keine verschlüsselte Verbindung hast. Besser ist es, den DB Zugriff lediglich über ein Webinterface anzubieten.

Ich denke in meinem Fall ist dann dies wohl eher das kleinere Problem.

Wenn es nicht mehr ist, kannst du eventuell komplett auf eine Datenbank verzichten und z.B. alles in XML ablegen.

Ungern, das meiste ist bereits mit Querys versehen.

23.12.2009 - 13:20 Uhr

Hallo

Ich wusste ehrlich gesagt nicht wohin mit meinem Thema.
Sofern dies der falsche Ort ist, bitte ich einen Mod diesen zu verschieben. 😃

Ich suche für meine Applikation einen günstigen Hoster der Remotezugriff auf eine SQL Datenbank bietet.
Gibt es eventuell auch free-hoster?
Und wie sieht es jeweils bzgl. Sicherheit der Daten aus (in der DB sind Addressen enthalten).

In der Datenbank enthalten sind ~3 Tabellen à 60 Datensätze.

Gruss Regenwurm

22.12.2009 - 09:17 Uhr

Hallo

Ich habe die Lösung für mein Problem gefunden. 😃
Die Exception wird nun in der IDE ganz normal angezeigt, und gekennzeichnet.

Beim Release-Build wird aber die gewünschte, eigene Form angezeigt.

ThreadExceptionEventArgs-Klasse

Gruss
Regenwurm

22.12.2009 - 08:49 Uhr

Nicht dass ich wüsste, da das iPhone unter einem Apple OS läuft.

21.12.2009 - 15:59 Uhr

Hi jack

Nein, zur Zeit benutze ich nur den GUI-Thread.

Wo sind die Events der AppDomain zu finden?

21.12.2009 - 15:15 Uhr

Hallo

Ich bin gerade dran einen eigenen Exceptiondialog zu implementieren.
Sprich anstatt, wenn der User bspw. eine Fehlkonvertierung macht und diese noch nicht im Programmcode behandelt wird, der erscheinenden roten Dialogbox "Es ist ein Fehler aufgetreten, Debug, Ok", soll eine von mir erstellte Form erscheinen in der die Exceptiondetails stehen.

Ganz unten auf der Form hat der User die Möglichkeit, die ganzen Details mir per Email zukommen zu lassen.

Das ganze funktioniert auch TipTop in der Entwicklungsumgebung..!
Starte ich die .exe jedoch aus dem Debug Ordner aus, kommt wie immer die rote Dialogbox.

Um die Form aufzurufen, habe ich einfach in "Program.cs" den "Application.Run()" Aufruf mit einem try-catch Block umlegt:

        static void Main()
        {
            frmErrorhandler Errorhandler;

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            try
            {
                Application.Run(new frmLogin());
            }
            catch(Exception ex)
            {
                if (ex.InnerException != null)
                {
                    Errorhandler = new frmErrorhandler(ex.Message, ex.ToString(), ex.InnerException.ToString(), ex.StackTrace.ToString());
                }
                else
                {
                    Errorhandler = new frmErrorhandler(ex.Message, ex.ToString(), "null", ex.StackTrace.ToString());
                }
                Errorhandler.Show();

                Application.Run();
            }
        }

Wer kann mir helfen?

Grüsse Regenwurm

21.12.2009 - 15:09 Uhr

Hallo

Du darfst nicht von einem Thread auf ein Objekt zugreiffen, welches in einem anderen Thread erstellt wurde.

--> [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)

15.12.2009 - 16:08 Uhr

Jep, habe es vorhin gerade noch einmal durchgelesen 😃
Danke auch dir 😃

Hier nochmal die "Lösung".

 
          string Pfad            = null;
       private void UploadFile()
        {
            
            string FTPKomplettPfad = null;

            /* Pfad invoken, welche raufgeladen werden soll */
            #region Invoking des Dateipfades

            Pfad = getPath();
            if (Pfad == null)
            {
                //2.Durchlauf vom Thread
                //Einfach abbrechen
                return;
            }

            #endregion

            /* Relevante Daten (Host, Username, Passwort) */
            #region Daten auslesen
            string host = null;
            string username = null;
            string passwort = null;

            StreamReader readInfos = new StreamReader(Application.StartupPath + @"/config.ini");
            string[] output = readInfos.ReadToEnd().Split("\r\n".ToCharArray());
            List<string> infos = new List<string>();
            foreach (string s in output)
            {
                if (s != "")
                {
                    infos.Add(s);
                }
            }

            switch (infos.Count)
            {
                case 1:
                    //Keine Benutzerdaten im File enthalten.
                    host = infos[0];
                    break;

                case 3:
                    //FTP Host + Benutzerdaten im File enthalten
                    host = infos[0];
                    username = infos[1];
                    passwort = infos[2];
                    break;

                default:
                    MessageBox.Show("Die Konfigurationsdatei scheint beschädigt zu sein!", "Beschädigte conf-Datei", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
            }
            #endregion

            //Kompletter FTP Pfad setzen und darauf verbinden.
            FTPKomplettPfad = "ftp://" + host + "/Software/MiniSoft/" + new FileInfo(Pfad).Name;
            FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(FTPKomplettPfad);
            if (username != "")
                ftp.Credentials = new NetworkCredential(username, passwort);

            //Diverse FTP Einstellungen
            ftp.KeepAlive   = true;
            ftp.UseBinary   = true;
            ftp.Method      = WebRequestMethods.Ftp.UploadFile;

            #region File zerlegung + upload
            /* File wird in Bytes zerlegt */
            FileStream fs = File.OpenRead(Pfad);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();

            /* File wird raufgeladen */
            Stream ftpstream = ftp.GetRequestStream();
            ftpstream.Write(buffer, 0, buffer.Length);
            ftpstream.Close();
            #endregion

            MessageBox.Show("Die neue Datei wurde erfolgreich hochgeladen", "Upload erfolgreich", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void getPath()
        {
            if (txtFilePath.InvokeRequired)
                Invoke(new MethodInvoker(UploadFile));
            else
                Pfad = txtFilePath.Text;


            return null;
        }

Grüsse Regenwurm. 😃

€: Nicht perfekt, aber sie funktioniert. :-x

15.12.2009 - 15:35 Uhr

Ich muss nun doch noch einmal nachfragen.
Ich habe das ganze nun so umgesetzt.
Jedoch probiert er bei mir die Funktion 2x durchzulaufen.

        public void UploadFile()
        {
            string Pfad            = null;
            string FTPKomplettPfad = null;

            /* Pfad invoken, welche raufgeladen werden soll */
            #region Invoking des Dateipfades
            
            if (txtFilePath.InvokeRequired)
                Invoke(new MethodInvoker(UploadFile));
            else
                Pfad = txtFilePath.Text;
            #endregion

            /* Relevante Daten (Host, Username, Passwort) */
            #region Daten auslesen
            string host = null;
            string username = null;
            string passwort = null;

            StreamReader readInfos = new StreamReader(Application.StartupPath + @"/config.ini");
            string[] output = readInfos.ReadToEnd().Split("\r\n".ToCharArray());
            List<string> infos = new List<string>();
            foreach (string s in output)
            {
                if (s != "")
                {
                    infos.Add(s);
                }
            }

            switch (infos.Count)
            {
                case 1:
                    //Keine Benutzerdaten im File enthalten.
                    host = infos[0];
                    break;

                case 3:
                    //FTP Host + Benutzerdaten im File enthalten
                    host = infos[0];
                    username = infos[1];
                    passwort = infos[2];
                    break;

                default:
                    break;
            }
            #endregion

            //Kompletter FTP Pfad setzen und darauf verbinden.
            FTPKomplettPfad = "ftp://" + host + "/Software/MiniSoft" + new FileInfo(Pfad).Name;
            FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(FTPKomplettPfad);
            if (username != "")
                ftp.Credentials = new NetworkCredential(username, passwort);

            //Diverse FTP Einstellungen
            ftp.KeepAlive   = true;
            ftp.UseBinary   = true;
            ftp.Method      = WebRequestMethods.Ftp.UploadFile;

            #region File zerlegung + upload
            /* File wird in Bytes zerlegt */
            FileStream fs = File.OpenRead(Pfad);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();

            /* File wird raufgeladen */
            Stream ftpstream = ftp.GetRequestStream();
            ftpstream.Write(buffer, 0, buffer.Length);
            ftpstream.Close();
            #endregion

            MessageBox.Show("Die neue Datei wurde erfolgreich hochgeladen", "Upload erfolgreich", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

Warum?

Grüsse
Regenwurm

15.12.2009 - 13:33 Uhr

Hallo JAck30lena

Perfekt! Vielen Dank. 😃

Grüsse
Regenwurm

15.12.2009 - 13:02 Uhr

Hallo

Ich möchte, dass mein Programm einen Text, welcher in einer Textbox in dem GUI-Thread liegt, in einem 2.ten Thread bearbeiten kann.

Damit ich eine CrossThreadException bekomme, bin ich mittels google auf folgende Antwort gestossen:

http://bytes.com/topic/c-sharp/answers/567801-cross-thread-operation-not-valid#post2218778

Irgendwie will das ganze bei mir nicht funktionieren, bzw. ich habs nicht so wirklich verstanden.

        public delegate void getPath(string str);
        public event getPath gp;

        public frmUploader()
        {
            InitializeComponent();
            this.gp += new getPath(frmUploader_gp);
        }

        void frmUploader_gp(string str)
        {
            stream = File.OpenRead(str);
        }


/* ... */


            /* File in byte array laden */
            if (this.txtFilePath.InvokeRequired)
            {
                Invoke(gp, new object[] { txtFilePath.Text });
            }
            else
            {
               stream = File.OpenRead(txtFilePath.Text);
            }


Logischerweise gibt er mir wieder eine CrossThreadException aus, weil ich den Text aus der Textbox übergeben will..

Was muss ich sonst übergeben?

Ich hoffe ihr könnt mir helfen. 😃

Regenwurm

01.12.2009 - 09:46 Uhr

Hallo zusammen

Ich frage mich gerade, wie ich mittels C# die physische (tatsächlich am Computer angeschlossen Bildschirme) Anzahl der Bildschirme ermitteln kann..

Mittels

           
foreach (Screen s in System.Windows.Forms.Screen.AllScreens)
            {
                //...
            }

kann ich zwar eine Anzahl ermitteln, jedoch müssen nicht alle Bildschirme angeschlossen sein.

Gruss
Regenwurm

24.11.2009 - 17:11 Uhr

Hallo

Ich speichere Picturebox Objekte in einem Array..
Später will ich auf die einzelnen Objekte zugreiffen, genauer gesagt auf das Attribut "Left" (X-Position).

Jedoch, erhalte ich immer den Wert 0, somit kann ich auch die Labels unten nicht dynamisch perfekt hinsetzen.

Woran liegt das ganze?

Die Funktion getPctrLeft() gibt den einzelnen Pictureboxen ihren "Left" Wert zurück.

    public partial class frmMultiMonitor : Form
    {
        Monitor[] anzMonitore = new Monitor[0];
        PictureBox[] PictureBoxen = new PictureBox[0];
        ArrayList Label = new ArrayList();
        

        public frmMultiMonitor()
        {
            InitializeComponent();
            lblProgress.Text = "Wilkommen zur Multimonitor Support-Funktion" + Environment.NewLine +
                               "Das Programm durchsucht ihren Computer nun nach verschiedenen " + Environment.NewLine +
                               "Monitoren...";
            initializeMonitor();
            retrieveInformations();



        }


        public void initializeMonitor()
        {
            //..Weist den Elementen im Array das Picturebox - Objekt zu.
        }

        public void retrieveInformations()
        {
            for (int i = 0; i < anzMonitore.Count(); i++)
            {
                anzMonitore[i] = new Monitor();
            }

            foreach (Screen s in System.Windows.Forms.Screen.AllScreens)
            {
                int Height = s.WorkingArea.Height;
                int Width = s.WorkingArea.Width;
                int Farbtiefe = s.BitsPerPixel;

                if (s.Primary)
                    Height = s.WorkingArea.Height + WindowHelper.GetTaskbarHeight();

                Array.Resize(ref PictureBoxen, PictureBoxen.Count() + 1);
                initializeMonitor();

                addCtrl(new PictureBox(), Height, Width);
                addCtrl(new Label(), Height, Width, Farbtiefe);

               

                lblProgress.Text = "Es wurden " + PictureBoxen.Count() + " Monitore gefunden!";
            }
        }


        public void addCtrl(Control c, int Height, int Width)
        {
            c.Top = 12;
            c.Left = getPctrLeft();

            c.Height = Height / 20;
            c.Width = Width / 20;
            c.Name = PictureBoxen.Count().ToString();
            c.BackColor = Color.Gray;

            panel1.Controls.Add(c);
        }

        public void addCtrl(Control c, int Height, int Width, int Farbtiefe)
        {
            c.Width = 1;
            c.Text += "Auflösung: " + Width + "*" + Height + Environment.NewLine;
            foreach (char chr in c.Text)
            {
                c.Width += 6;
            }
            c.Text += "Farbtiefe: " + Farbtiefe + Environment.NewLine;
            c.Height = 40;

            

            c.Top = PictureBoxen[PictureBoxen.Count() - 1].Height + 20;
            c.Left = (PictureBoxen[PictureBoxen.Count() - 1].Left + (PictureBoxen[PictureBoxen.Count() - 1].Width / 2) - 20);
            


            panel1.Controls.Add(c);
            
        }

        public int countCtrl()
        {
            int iCount = 0;

            foreach (Control ctrl in panel1.Controls)
            {
                if (ctrl.GetType() == typeof(PictureBox))
                {
                    iCount++;
                }
            }

            return iCount;
        }

        public int getPctrLeft()
        {
            int iWidth = 0;

            if (PictureBoxen.Count() == 1)
            {
                iWidth = 50;
            }
            else
            {

                for (int i = 0; i < PictureBoxen.Count(); i++)
                {
                    if (PictureBoxen[i].Width != 0)
                        iWidth += PictureBoxen[i].Width;
                }

                iWidth += countCtrl() * 20;
            }

            return iWidth;
        }
    }

    class WindowHelper
    {
       /* ... */
    }
    }

Grüsse
Regenwurm

24.11.2009 - 10:43 Uhr

Hier mal eine Liste von kostenlosen Anbietern:
Wer ASP.net einfach nur mal im Internet ausprobieren will, findet
>
ein kostenloses ASP.net Hosting Angebot. Man bekommt 20MB Webspace,10MB SQL Speicherplatz. Allerdings dürfen normale Dateien nur 100kb groß sein....
Aber zum ausprobieren ist der ganz gut.

Gibt es sowas zZt irgendwo?
Der obengenannte Link führt mich auf einen russischen, kostenpflichtigen Hoster.

24.11.2009 - 10:18 Uhr

Sofern du ASP verwendest ja.
Bei .NET würde ich dir zu den "eigenen" HTML-Objekten raten.

24.11.2009 - 10:06 Uhr

verwendetes Datenbanksystem: <SQL 2005(?)>

Hallo 😃

Ich bin an einem Punkt angelangt in dem mein Programm nicht mehr mit der Datenbank auf dem aktuellen Stand ist.

Bei meiner Applikation ist es möglich, dass 2 Benutzer gleichzeitig auf die Datenbank zugreiffen.

Beispiel:

User A greift auf die DB zu und schaut ob Der Wert X = 1 ist. -> true
User B greift auf die DB zu und ändert den Wert X auf 2.
User A ist immernoch im Objectcontext drin und schaut sich den Wert wieder an. --> X = 1.
Wie aktualisiere ich jetzt den ganzen Context, damit auch User A merkt, dass X = 2 ist?

Grüsse
Regenwurm

17.11.2009 - 13:56 Uhr

Hallo 😃

Ich probiere gerade alle Elemente in allen Listen in einer Klasse nach etwas abzusuchen..

Jedoch will die for-each Schleife nicht wirklich über alle Listen gehen.
Ich bekomme immer den Fehler, weil die Klasse angeblich keinen 'GetEnumerator' public definiert hat.

Hier ist mein Code:


HTML tag_html = new HTML();

            foreach(List<string> liste in tag_html)
            {
                foreach (string tag in liste.OrderBy(pl => pl.Substring(0, 1)))
                {
                    //...
                }
            }

Gruss
Regenwurm

11.11.2009 - 10:11 Uhr

Ich habe das Problem mittlerweile gelöst.

Einfach eine Methode in der partiellen Klasse erstellen + aufrufen, welche den Kontext manuell hinzufügt..


            /* Liste Teams in der Listbox auf*/
            foreach (Team t in ctx.Team)
            {
                t.addCTX(ctx); //<== Separate Methode.
                if (t.containsUser(uID) == true)
                {
                    lbTeams.Items.Add(t.Teamname + "-" + t.ID);
                }
            }
09.11.2009 - 13:06 Uhr

verwendetes Datenbanksystem: <SQL Server [ADO.NET / Entity Framework]>

Hallo Zusammen

Ich habe das Problem, dass wenn ich einen neuen Eintrag in die Datenbank machen will, er mir immer eine Exception ausgibt, dass 2 verschieden Objektkontexte nicht zu einer Beziehung hinzugefügt werden können.

Das ganze passiert folgendermassen hier:

                Matches newMatch = Matches.CreateMatches(999, 0, 0, Convert.ToDateTime(tstxtDate.Text), 0, 0);
                //newMatch.Protest = new Protest();
                newMatch.Team = tContrahent.IDtoObject(tContrahent.ConvertExternTeamStringtoID(cbTeam.Text));
                newMatch.Team1 = tContrahent;
                //newMatch.Datum = Convert.ToDateTime(tstxtDate.Text);
                ctx.AddToMatches(newMatch);
                
                ctx.SaveChanges(true);
            }                
            catch
            {
                MessageBox.Show("Es ist ein Fehler während der Matcherstellung aufgetreten." + Environment.NewLine + "Bitte überprüfe alle Eingaben.", "Cast Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

Das Problem liegt in der partiellen Klasse "Team.cs" begraben, wo ich manuell einen neuen Objektkontext erstelle, und nicht den Hauptcontext benütze:

        TurnierContainer2 ctx = new TurnierContainer2();

Gut, das Problem lässt sich beheben in dem ich einfach keinen neuen erstelle, sondern die Variable nur definiere:

        TurnierContainer2 ctx;

Jetzt gibt er mir aber in der Klasse eine NullReferenceException aus, weil ctx null ist (Ihr wird ja kein Wert zugeordnert).

Wie kann ich also in einer foreach-Schleife die Applikation dazu bringen, dass sie nicht den Standartkonstruktor aufruft, sondern einen Konstruktor, welcher als Parameter den Objectcontext benötigt?

            foreach (Team t in ctx.Team)
            {
                if (t.containsUser(uID) == true)
                {
                    lbTeams.Items.Add(t.Teamname + "-" + t.ID);
                }
            }

Gruss
Regenwurm

27.10.2009 - 12:28 Uhr

Ergäbe schlussendlich aber keinen Sinn.
Wenn du das Programm an mehrere Leute verteilst und unterschiedliche Keys hast, dann musst du auch soviele Versionen erstellen.

Ich denke am besten wäre wohl die Keys in einer Datenbank hinterlegen, und diese so zu aktiveren.

27.10.2009 - 09:46 Uhr

Schau dir am besten mal folgenden Link an: http://openbook.galileocomputing.de/visual_csharp/visual_csharp_09_001.htm

€: Wieder einmal zu langsam.. 😕

26.10.2009 - 13:12 Uhr

Hallo

Wenn ich mittels der foreach Schleife alle Controls in einem Panel anwähle (hier nur Checkboxen) nimmt er für eine unverständliche Reihenfolge.

Wie kann ich einstellen welche Checkboxen zuerst "angewählt" werden sollen?

Code:

                foreach (ListViewItem lvi in listView1.Items)
                {
                    if (Convert.ToInt32(lvi.SubItems[8].Text) <= 2)
                    {
                        foreach (CheckBox cbx in panel1.Controls)
                        {
                            if (!cbx.Name.StartsWith("cbc"))
                            {
                                if (cbx.Checked)
                                {
                                    if (cbx.Text == "Telefonnummer")
                                    {
                                        Liste.Schreiben("0" + lvi.SubItems[dic[cbx.Text]].Text);
                                    }
                                    else
                                    {
                                        Liste.Schreiben(lvi.SubItems[dic[cbx.Text]].Text);
                                    }
                                    
                                    Liste.Zeileändern("rechts", "Cell", 1, "Move");
                                }
                            }
                        }
                    }
                }
            }

grz
Regenwurm

€: Ok rausgefunden.
Es ist die Reihenfolge, wie sie dem Panel hinzugefügt werden:

            // 
            // panel1
            // 

            this.panel1.Controls.Add(this.cbcMinis);
            this.panel1.Controls.Add(this.cbcLeiter);
            this.panel1.Controls.Add(this.cbcPraeses);
            this.panel1.Controls.Add(this.cbName);
            this.panel1.Controls.Add(this.cbVorname);
            this.panel1.Controls.Add(this.cbStrasse);
            this.panel1.Controls.Add(this.cbPLZ);
            this.panel1.Controls.Add(this.cbOrt);
            this.panel1.Controls.Add(this.cbGeb);
            this.panel1.Controls.Add(this.cbTelefon);

19.10.2009 - 13:45 Uhr

Hmm.. ok verlesen, tut mir leid.

Die einzige Möglichkeit die mir gerade in den Sinn kommt, ist die listbox von der DataSource zu "entbinden", sprich zuerst einmal null setzen.
Danach die listBox entleeren und dann wieder binden.

            listBox1.DataSource = null;
            listBox1.Items.Clear();
            listBox1.DataSource = myList;

Ansonsten wartest du noch auf ne Antwort von ner anderen Person hier.. 😃

Grüsse

19.10.2009 - 13:36 Uhr

Probier mal \ anstatt .

19.10.2009 - 13:30 Uhr

Oh, sorry.. 😃

Ich nehme an du füllst die Listbox mittels einem Adapter?

Wenn ja, dann solltest du einfach das DataSet mit den Daten neu füllen.

this.tblTestTableAdapter.Fill(this.DataSet.tblTest);

grz

19.10.2009 - 12:59 Uhr

Probier mal die Methode 'DataBind()'.

grz

14.10.2009 - 11:25 Uhr

verwendetes Datenbanksystem: <SQL Server>

Hallo.

Ich versuche mittels dem Entity Framework einen Eintrag in eine Tabelle zu machen.
Durch die Navigation Properties werden dem Insert-Statement die Objekte von anderen Tabellen übergeben.

Ich bekomme jedoch immer folgende Excpetion:

Unable to update the EntitySet 'tblRanking' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.

Ich habe das ganze nun mal in einer kleineren Konsolenapplikation nachgebaut, und es funktioniert immernoch nicht.

Der InputCode sieht folgendermassen aus:

                        case "ad":
                            /* Command: add(param1,param2,param3,param4,param5,param6,...)*/
                            string[] input2 = input.Split('(', ')', ',');

                            switch (input2[1])
                            {
                                case "Rangliste":
                                    tblRanking neuesRanking = tblRanking.CreatetblRanking(int.Parse(input2[2]), int.Parse(input2[3]), int.Parse(input2[4]), int.Parse(input2[5]), int.Parse(input2[6]));
                                    /* input2[x]:
                                     * -> 2: Rang
                                     * -> 3: Team_ID
                                     * -> 4: Spiele
                                     * -> 5: Punkte
                                     * -> 6: Liga_ID
                                     */
                                    foreach (tblTeam t in ctx.tblTeam)
                                    {
                                        if (t.ID == int.Parse(input2[3]))
                                        {
                                            neuesRanking.tblTeam = t;
                                        }
                                    }

                                    foreach (tblLiga l in ctx.tblLiga)
                                    {
                                        if (l.ID == int.Parse(input2[6]))
                                        {
                                            neuesRanking.tblLiga = l;
                                        }
                                    }

                                    ctx.AddTotblRanking(neuesRanking);

                                    break;

                                case "Team":
                                    break;

                                case "Liga":
                                    break;

                                case "Teilnehmer":
                                    break;

                                default:
                                    break;
                            }
                            ctx.SaveChanges();

                            break;

Und ja, die eingegeben ID's für die Teamobjekte sind in den jeweiligen Tabellen enthalten.

Guten Apettit!
Regenwurm

13.10.2009 - 08:31 Uhr

Ich kenne zwar EF nicht, aber das macht mir nix 😄

Jedenfalls bei Linq2SQL würde man die Entities aus dem Context deleten, und am erst am schluss der Schleife Context.SubmitChanges() aufrufen.

ah, bei dir heisstes .SaveChanges - ja, das jedenfalls erst am Schluß.

Hat nicht wirklich was gebracht. 😕
Bekomme immer noch die gleiche Exception wie oben.

09.10.2009 - 14:11 Uhr

Hi 😃

Nein, es steht nichts bei "Delete Function".

09.10.2009 - 13:56 Uhr

Hallo,

Weil sonst die folgende Exception auftritt:

{"New transaction is not allowed because there are other threads running in the session."}

Was meinst du genau mit der Stored Procedure?

09.10.2009 - 13:18 Uhr

verwendetes Datenbanksystem: <SQL Server>

Hallo

Ich bin wieder an einem Punkt angelangt, an dem ich trotz probieren und studieren einfach nicht weiterkomme.

Es geht darum, einen bestimmten Datensatz in eine Tabelle zu löschen.
Mithilfe von Google bin ich auf den folgenden Artikel im MSDN gestossen.

Jedoch stellt sich mir die Frage, was hier genaue SalesOrderHeader ist.

SalesOrderHeader order =
    context.SalesOrderHeader.Where
    ("it.SalesOrderID = @id", new ObjectParameter(
     "id", orderId)).First();

Wenn ich nun beispielsweise hier den ausgewählten Datensatz in der tblZugerhoerigkeit löschen will, wie mach ich das?

Ich habe hier probiert, das ausgewählte Objekt zu löschen, kommt folgende Exception: "Unable to update the EntitySet 'tblZugehoerigkeit' because it has a DefiningQuery and no <DeleteFunction> element exists in the <ModificationFunctionMapping> element to support the current operation."

Das ganze sieht bei mir so aus:

            using (TurnierApplikationEntities ctx = new TurnierApplikationEntities())
            {
                
                foreach (Zugehoerigkeit z in ctx.ZugehoerigkeitSet)
                {
                    if (Player[0] == z.User_ID.ToString())
                    {
                        //kick den Spieler aus dem Team
                        DialogResult dr = MessageBox.Show("Wollen sie wirklich den Spieler " + Player[1] + " aus dem Team entfernen?", "Spieler kicken", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                        if (dr == DialogResult.Yes)
                        {
                            /* * * * * * * drop * * * * * * */
                            ctx.DeleteObject(z); //!working
                            ctx.Connection.Close();
                            ctx.SaveChanges();

                        }
                        break;
                    }
                }
            }
08.10.2009 - 13:12 Uhr

Ah Perfekt!
Vielen Dank! 😃

08.10.2009 - 10:54 Uhr

Hallo Flo

Ah ok, hatte vorhin noch ne Idee, indem ich einfach jede Zeile mittels der foreach Schleife dem Objekt zuordne, und die dann schlussendlich "aussortiere".
Dies hier ist aber viel komfortabler. - Vielen Dank!

Ich habe noch eine Frage bzgl. der Selektion oder auch die generellen Abfragen in einer foreach-Schleife.

Ich kann ja nun beispielsweise bei 'foreach (Protest p in ctx.ProtestSet)' noch die Methode "OrderBy()" hinzufügen.

Wenn ich nun die ganzen Einträge nach der Spalte "SortierID" sortieren will, was muss ich da genau eingeben?

p.Spaltennamen geht nicht, habe ich bereits probiert.
Wenn ich OrderBy("SortierID") eingebe, will das ganze auch nicht und er gibt mir eine Exception zurück.

Doch das alleine genügt ja auch nicht, denn ich muss noch die Variante angeben (DESC, ASC).

Kannst du mir da vielleicht helfen?

Grüsse
Regenwurm

08.10.2009 - 07:48 Uhr

Hallo

Irgendwie habe ich nun den Thread aus den Augen gelassen. 😮

Das Beispiel oben ist vielleicht ein bisschen blöd formuliert.
Aber ich kann die Frage eigentlich auch konkret an einem anderen Beispiel stellen.

Ich habe nun den Anfang einer Methode, der folgendermassen aussieht:

                foreach (Protest p in ctx.ProtestSet)
                {
                    if (p.tblMatches.Match_ID == _mID)
                    {

Logischerweise wirft mir der Compiler wieder eine NullReferenceException an den Kopf bei tblMatches.

Das ist gut möglich, weil ich wahrscheinlich überhaupt nicht das geschrieben habe, was eigentlich passieren soll.

Mein Ziel ist es, alle tblMatches Objekte in der Tabelle "Protest" durchzugehen, und zu schauen welche Match_ID der Objekte gleich die der lokalen Variable _mID ist.

Ist denn dies nicht richtig?
Bzw. was fehlt hier noch?

Grüsse
Regenwurm

07.10.2009 - 09:02 Uhr

verwendetes Datenbanksystem: SQL Server 2005

Guten Morgen

Ich probiere gerade wieder mithilfe des Entity Frameworks einen Datensatz in die Datenbank zu schreiben.

normale "Scalar Properties" kann ich ja in der Methode Createxxxx(); ganz einfach hinzufügen.

Nur wie mach ich das mit den "Navigation Properties"?

Als simples Beispiel:

Ich habe eine tblProtest und eine tblMatches..

in die Tabelle 'tblProtest' will ich nun eine GUID, ein Titel (Beides 'Scalar Properties') und eine Match_ID (int) speichern.

Die Match_ID wird nun bei den Funktionsparametern nicht mehr angezeigt.
Die Match_ID ist im Code unter dem Variabeln Namen "_mID" gespeichert.

Ich habe euch zur Veranschaulichung das EDM der beiden Tabellen angehängt..
(Musste das Bild zippen, da sonst die max. Grösse gesprengt wurde. 😕 ).

Gruss
Regenwurm

30.09.2009 - 17:10 Uhr

Hallo

Bei Datenbankmodell.jpg (im .zip File zu finden) sieht man, dass sich tblTeam & tblTeam1 auf die Klasse Team beziehen.
Somit sollten sie mir doch ein ganzes Team zurückgeben.

30.09.2009 - 16:32 Uhr

verwendetes Datenbanksystem: <SQL Server>

Hallo

Ich habe eine Datenbank, welche in meiner Applikation mittels dem Entity Framework implementiert wird.

(:::

Wenn ich nun zum Beispiel, in der partiellen Klasse "Match" überprüfen will, ob ein bestimmter Spieler in einem Team ist, welches ein Match hat probier ich das folgendermassen:

        public bool UserIsInOneTeam(int UserID)
        {
            bool r_return = false;

            using (TurnierApplikationEntities ctx = new TurnierApplikationEntities())

            foreach (Team t in ctx.TeamSet)
            {
                if ((tblTeam.ID == t.ID && t.containsUser(UserID) == true) || (tblTeam1.ID == t.ID && t.containsUser(UserID) == true))
                {
                    return r_return = true;
                }
            }

            return r_return;
        }

Jedoch gibt mir der Compiler immer bei tblTeam oder tblTeam1 eine NullReferenceException zurück.

Obwohl: Die Tabellen richtig verbunden sein sollten, und nicht leer sind!

Ich kaue nun schon seit Tagen an dem Problem und habe es immer noch nicht ganz begriffen.
Sofern mehr Informationen von Nöten sind, kann ich diese gerne posten.

Kann mir jemand helfen?

Grüsse Regenwurm

30.09.2009 - 15:32 Uhr

Hallo 😃

Perfekt, nun habe ich das ganze verstanden!
Vielen Dank! 😉

Grüsse Regenwurm

30.09.2009 - 14:18 Uhr

Hallo jaensen

Ich habe mal deine Überlegung versucht "einzubauen".
Das ganze sieht nun folgendermassen aus:

        private void CheckConfirmed(int UserID)
        {
            using (TurnierApplikationEntities ctx = new TurnierApplikationEntities())
                foreach (Match m in ctx.MatchSet)
                {
                    if (m.isNotConfirmed() == true)
                    {
                        LinkLabel mll = CreateLinkLabel(m.tblTeam, m.tblTeam1, m.Match_ID);
                        mll.LinkClicked += new EventHandler(mll_LinkClicked);
                    }
                }
        }

        private LinkLabel CreateLinkLabel(Team Team1, Team Team2, int MatchID)
        {
            LinkLabel MatchLink = new LinkLabel();

            MatchLink.Text = Team1.Teamname + " : " + Team2.Teamname;
            MatchLink.ForeColor = System.Drawing.Color.Sienna;

            return MatchLink;

        }

Wenn ich nun bei

mll.LinkClicked += new EventHandler(mll_LinkClicked);

den Event erstelle, wie kann ich dann die Methoden "bearbeiten" (Form aufruf etc.)?
Bzw. sollte/muss ich eigentlich nicht bei

LinkLabel mll = CreateLinkLabel(m.tblTeam, m.tblTeam1, m.Match_ID);

ein Array erstellen?

Nun habe ich mich wohl gerade selber ein bisschen verwirrt. 😃

Grüsse
Regenwurm

30.09.2009 - 12:06 Uhr

Hallo 😃

Ich stehe vor folgendem Problem, wo mein Hirn gerade einfach nicht mehr weiter kommt.
Beziehungsweise stelle ich mir die Frage, ob dies möglich ist.

In meinem Programm hat jedes Team Spiele..
Und wenn ein solches Spiel noch nicht von beiden Seiten bestätigt wurde, soll ein Linklabel generiert werden mit der Aufschrift Team1 : Team 2.

Soweit so gut, nur wenn ich nun auf das Linklabel klicke, soll sich eine neue Form öffnen, bei welcher die ID des einen Teams übergeben wird.
Sprich, es soll ein Event generiert werden.

Ich habe mir nun vorgestellt, dass ich 2 Methoden (der überschaubarkeit halber) mache:

  • CheckConfirmed(int UserID)
  • CreateLinkLabel(Team Team1, Team Team2)

Die erste Methode überprüft in der Datenbank, ob noch unbestätigte Spiele für den Benutzer vorliegen.
Die 2. Methode wird von der ersten aus aufgerufen, und soll ein Linklabel erstellen, welches das Event "LinkClicked" hat.
In diesem Event soll dann halt der Aufruf auf eine andere Form sein, mit der Übergabe der ID des Teams.

Nun wie schon oben erwähnt, frage ich mich, ob ich in der Methode selber ein Event für das zurück zugebene Linklabel erstellen kann und wie.

Guten Appetit
Regenwurm

21.09.2009 - 11:20 Uhr

Hallo

Vielen Dank für die Antwort. 😃
Habe nun folgenden CmdCalculator als Basis genommen, und passe ihn an. 😃
--> Formel parsen

Grüsse
Regenwurm

19.09.2009 - 15:54 Uhr

Guten Abend.

Einen String kann man ja splitten indem man die Methode String.Split() verwendet.
Nun schön und gut, nur wie soll ich einen mathematischen String splitten, und dadurch noch die Regeln und Gesetze beachten (Punkt vor Strich, Klammer --> 1. Priorität, etc.)?

Ich habe mir darüber Gedanken gemacht indem ich, nachdem ich den String gesplittet habe den Ergebnissen jeweils ein Attribut "Priorität" zuweise und darin die Priorität angebe (1-x).

Doch wie soll ich nun das ganze realisieren?

Grüsse
Regenwurm

07.09.2009 - 16:32 Uhr

Hallo

Ich probiere gerade in einer Tabelle, eine Zelle nach rechts zu "rutschen".
Dazu habe ich den Befehl "MoveRight" genommen.
Jedoch will er nicht ganz.

Dafür habe ich folgende Funktion geschrieben:

        public void Zeileändern(string Richtung, string Typ, int count, string wd)
        {
            object Type = Typ;
            object Anzahl = count;
            object ext = (object)wd;

            if (wd == "wdMove")
            {
                ext = WdMovementType.wdMove;
            }


                switch (Richtung)
                {
                    case "rechts":
                        sftWord.Selection.MoveRight(ref Type, ref Anzahl, ref ext);
                        break;

                    case "links":
                        sftWord.Selection.MoveLeft(ref Type, ref Anzahl, ref ext);
                        break;

                    case "oben":
                        sftWord.Selection.MoveUp(ref Type, ref Anzahl, ref ext);
                        break;

                    case "unten":
                        sftWord.Selection.MoveDown(ref Type, ref Anzahl, ref ext);
                        break;

                    default:
                        break;
                }
            }

Der Aufruft erfolgt folgendermassen:

            Editor.Zeileändern("rechts", "Cell", 1, "wdMove");

Wo liegt nun genau das Problem?

Ich bekomme immer folgenden Error: "Bad Parameter (COMException was unhandled)"

€:

Habs nun hinbekommen (Nach einer ganzen Woche -.-').

Der erste Parameter muss auch noch umgewandelt werden:

        public void Zeileändern(string Richtung, string Typ, int count, string wd)
        {
            object Type = Typ;
            object Anzahl = count;
            object ext = wd;

            if (wd == "wdMove")
            {
                ext = WdMovementType.wdMove;
            }

            if (Typ == "Cell")
            {
                Type = WdUnits.wdCell;
            }


            switch (Richtung)
            {
                case "rechts":
                    sftWord.Selection.MoveRight(ref Type, ref Anzahl, ref ext);
                    break;

                case "links":
                    sftWord.Selection.MoveLeft(ref Type, ref Anzahl, ref ext);
                    break;

                case "oben":
                    sftWord.Selection.MoveUp(ref Type, ref Anzahl, ref ext);
                    break;

                case "unten":
                    sftWord.Selection.MoveDown(ref Type, ref Anzahl, ref ext);
                    break;

                default:
                    break;
            }
        }

07.09.2009 - 13:49 Uhr

**verwendetes Datenbanksystem: MS SQL Server **

Hallo

Bei meinem derzeitigen Projekt verlangt mein Betreuer von mir, dass ich das sogenannte "Entity Framework" verwende.
Ich habe mich im Internet umgeschaut, und herausgefunden dass damit irgendwelche SQL Abfragen und die generelle SQL Einbindung in das Programm erleichtert werden soll.

Aber wie genau muss ich das verstehen?

Freundliche Grüsse
Regenwurm

14.07.2009 - 15:12 Uhr

Ich plane einen Bot für ein MMORPG zu erstellen.
Es soll nicht ein nonplusultra Bot sein der perfekt wird, jedoch nimmt es mich mal Wunder wie solche Bots funktionieren, und ich denke dies wäre sicherlich eine denkbar logische Weise wie so ein Bot funktioniert.

Grüsse
Regenwurm

€: Musste jetzt zuerst mal bei Wiki schauen was du mit Man in the middle meinst.
Nein, soetwas habe ich nun wirklich nicht vor. 😉

14.07.2009 - 13:59 Uhr

Hallo

Ich habe eine Client - Server Verbindung von 2 kompilierten *.exe's vor mir.
Nun will ich mit einem dritten Programm den Client "kontrollieren".

Sprich, wenn vom Server ein bestimmtes Packet "in den Client" reinkommt soll mein drittes Programm dem Server etwas zurücksenden.

Muss ich dafür den Client in irgend einer Weise hooken?
Oder mit welchen Möglichkeiten kann ich dies realisieren?

Freundliche Grüsse
Regenwurm

19.01.2009 - 19:10 Uhr

ok thx 😉
Nun fehlt mir noch "FileStream" 😕

19.01.2009 - 18:27 Uhr

Was brauch ich für assembly verweise?
Finde bei Google nichts gescheites.

Benutze VS 08.