Angezeigter Datensatz für weitere Zugriffe sperren!

Reverent

Erfahrenes Mitglied
Hallo Leute,
ich habe da mal wieder zwei Fragen, und zwar:

1. Wenn ich den button1 ein zweites mal betätige, dann bekomme ich die Fehlermeldung, dass die Verbindung schon offen ist, obwohl ich die Verbindung ja wieder schliesse. Warum bleibt die Verbindung offen?

2. Anbei habe ich mal ein Datenbank Zugriff programmiert und da meine Frage:"Wenn ich ein Datensatz öffen und ihn bearbeiten will muss ich ihn doch in der Datenbank selber auf schreib geschützt setzen und wie gehts das hier in C# ?".

private void button1_Click_1(object sender, System.EventArgs e)
{
myDataSet.Clear();
myAdapter.SelectCommand.Connection = myConnection;
myConnection.Open();
myAdapter.SelectCommand.CommandText = "SELECT benutzername FROM tab_benutzer";
myAdapter.SelectCommand.ExecuteNonQuery();

myConnection.Close(); // Verbindung wird doch hier wieder geschlossen, oder ?

myAdapter.Fill(myDataSet, "benutzername");
listBox1.DisplayMember = "benutzername";
listBox1.DataSource = myDataSet.Tables["benutzername"];
}

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
textBox1.Clear();
myConnection.Open();
myAdapter.SelectCommand.CommandText = "SELECT passwort FROM tab_benutzer WHERE benutzername = '"+listBox1.Text+"'";
textBox1.Text = myAdapter.SelectCommand.ExecuteScalar().ToString();
myConnection.Close();
}

private void button2_Click(object sender, System.EventArgs e)
{
myConnection.Open();
myAdapter.UpdateCommand.CommandText = "UPDATE tab_benutzer SET passwort = '"+textBox1.Text+"' WHERE (benutzername = '"+listBox1.Text+"')";
myAdapter.UpdateCommand.ExecuteNonQuery();
myConnection.Close;
}

Danke schon mal für die Hilfe.

MfG
Reverent
 
Jetzt wäre es natürlich interessant zu wissen, welches DBMS du verwendest. Denn alle Datenbanken können das Sperren auf Datensatz-Ebene nicht. Manche machen dies automatisch bzw. per DB-Einstellung etc.
 
Hallo Reverent!

Zu deiner zweiten Frage: Du kannst die Datenbank exklusiv öffnen, damit sperrst du automatisch jegliche andere Zugriffe!

Dazu musst du einfach folgenden Textschnipsel irgendwo in deinen Connection - String einbinden:

Code:
...Mode=Share Deny Read|Share Deny Write;...
 
Danke für deine Antwort ich werde das gleich mal versuchen.
Und hast du denn noch eine Antwort auf meine erste Frage.
MfG
Reverent
 
Jein, ich hatte diese Fehlermeldung auch schon. Ich habe dann die Datenbank wie beschrieben exklusiv geöffnet und dann hats funktioniert.

Offenbar will er mit dieser Fehlermeldung ausdrücken, dass noch andere Verbindungen zur Datenbank bestehen könnten. Wäre dies der Fall, würde das Ändern der Datenbank fehlschlagen. Ich denke, die Fehlermeldung tritt bei dir nur bei Button2 auf, ein SELECT Command sollte auch so funktionieren.

Tia, ich weiss nicht ob das die richtige Antwort ist; aber probier doch mal mit exklusiv öffnen...
 
Hallo,
kann ich nur die Datenbank exklusiv öffnen? Das ist aber nicht so schön, und wenn jemand anders jetzt in einer anderen Tabelle was ändern möchte oder einfach nur einen anderen Datensatz aus der gleichen Tabelle?
Vielleicht eine Lösung:
Ich hänge an jeder Tabelle noch eine Spalte "bearbeitet" und wenn ich einen Datensatz lese schreibe ichg da eine "1" rein und wenn halt der Datensatz wieder frei ist kommt da wieder eine "0" rein.
Ist vielleicht was umständlich aber was meint Ihr?
Und wie ist das dann eigentlich mit dem Netzwerkverkehr?
MfG
Reverent
 
Zuletzt bearbeitet:
Zurück