Autor Beitrag
Dayi
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 17.10.07 18:16 
Mein Problem ist ziemlich banal und für jemanden, der sich auskennt eher lächerlich. Ich hoffe dennoch, dass sich jemand mal die Zeit nimmt, sich folgendes Textsegement anzuschauen und zu sagen, wie ich es richtig machen kann.

Ich habe hier ein Formular, in der ich Daten zu einer Tabelle aufnehme und gleichzeitig zu einer damit in Verbindung stehender Tabelle. (1:N Beziehung) Die Primärschlüssel erfolgen über Autowerte, das sich nur schwer oder garnicht ein Primärschlüssel definieren lässt.

Mein Problem ist, dass die Anwendung so läuft, aber theoritsch bei gleichzeitigen Zugriffen zu Fehlern kommen kann, bezüglich der Beziehungen. Siehe Code:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
            //Thread erstellen
            //SQL Befehl zum erstellen des Threads
            DBCommand.CommandText = "INSERT INTO tblThread (Datum, Ueberschrift, StudentenID) VALUES ('" + DateTime.Now.ToShortDateString() + "', '" + txtUeberschrift.Text + "', 1)";
            //Befehl ausführen
            DBCommand.ExecuteNonQuery();
            
            //ID des erstellten Datensatzes auslesen
            DBCommand.CommandText = "SELECT * FROM tblThread ORDER BY ID DESC";
            DBReader = DBCommand.ExecuteReader();
            DBReader.Read();
            //ID des Threads merken
            ID = Int64.Parse(DBReader["ID"].ToString());  //Das ist sehr kritisch, wenn jemand gleichzeitig in tblThread was eingetragen hat, stimmt diese ID einfach nicht...
            //Reader immer schön wieder schließen
            DBReader.Close();

            //Thread mit Ordner verknüpfen
            //Da in der Radiobuttonlist die Knoten mit der Verknüpft werden drinsteht, kann hier direkt verknüpft werden
            foreach (ListItem LI in rblKnoten.Items)
            {
                //Kommando zum erstellen einer Verknüpfung
                DBCommand.CommandText = "INSERT INTO tblRelOrdnerThread (IDOrdner, IDThread) VALUES (" + LI.Value + ", " + ID.ToString() + ")";
                //Befehl ausführen
                DBCommand.ExecuteNonQuery();
            }


Es gibt hier also einen kritischen Abschnitt, der nicht richtig gesichert ist. Ich hoffe, ich konnte nach einem langen Arbeitstag mich noch verständlich ausgedrückt.

Viele Grüße
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 18.10.07 12:52 
Bei meinen bisherigen Erfahrungen - Einzelplatz - habe ich noch keine Zugriffsprobleme, kann deshalb nicht im Detail Auskunft geben. Die Probleme dürften aber primär innerhalb der Datenbank bestehen bzw. gelöst sein, ggf. durch DbTransaction. Es ist deshalb sinnvoll, dass Du das tatsächlich verwendete DBMS bzw. den DbProvider angibst.

Gruß Jürgen