Kommt jetz darauf an.
Du hast einen Namen und eine IP in Deiner Datenbank.
Jetzt kommt so etwas wie eine fachliche Anforderung ins Spiel.
Welche Fälle können vorkommen:
1. Weder IP noch Rechnername ist in der Datenbank
2. Die IP ist in der Dantenbank der Rechnername aber nicht
3. Der Rechnername ist in der Datenbank, die IP aber nicht
4. Beides ist in der Datenbank und in einem Datensatz
5. Beides ist in der Datenbank, aber in verschiedenen Datensätzen
Nun muss festgelegt werden, was zu tun ist:
1. Klar - wir tragen den neuen Satz ein.
2. Z.B. DHCP hat die IP an einen anderen Rechner vergeben.
Update des Rechnernamens?
3. Der Rechner ist bekannt, hat aber eine andere IP (z.B. DHCP).
Was tun? Ich würde sagen: Die neue IP-Adresse eintragen.
4. Auch klar - den kennen wir schon.
5. Wie bei 2 und 3. Der eine ne neue IP. Der Andere einen neuen Namen
Hier der Code mit dem sich ein bestehender Satz finden und ändern lässt:
Code:
// Verbinde mit der Datenbank
sqlConn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConn;
cmd.CommandText = @"Select * from Rechner";
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.FillSchema(ds, SchemaType.Source);
da.Fill(ds);
// Datenzeile ändern
DataRow[] editRow = ds.Tables[0].Select("Account='Test'");
if (editRow.Length == 1)
{
editRow[0].BeginEdit();
editRow[0]['IP'] = "10.10.10.10";
editRow[0].EndEdit();
}
else
{
// Nichts gefunden
// Oder mehr als einen Eintrag
}
// Hier werden die Daten in die Datenbank verfrachtet
SqlCommandBuilder cmb = new SqlCommandBuilder(da);
int count = da.Update(ds);
// mach die Verbindung zu
sqlConn.Close();
Die Zeile "DataRow[] editRow = ds.Tables[0].Select("Account='Test'");"
sucht in der Datenbank nach dem Vorkommen von "Test".
Die Zeile "if (editRow.Length == 1)"
prüft, ob ein (genau ein) Eintrag gefunden wurde. Sollte die Spalte Account
mehr als einen identischen Eintrag besitzen ist das Ergebnis natürlich auch nicht "1"
Es muss also irgendwie verhindert werden, dass ein Name mehr als einmal in
der Datenbank zu finden ist. (Nicht nur wegen der Abfrage, sondern weil es
für die Anwendung keinen Sinn macht)
Das kann man selbst machen (im Programm), oder man kann es die Datenbank
für sich machen lassen.
Dazu gibt es in der Datenbank Attribute, die man den Spalten geben kann.
Folgende Vorgehensweise:
Eine Spalte bekommt das Attribut "Indiziert - ohne Duplikate". Das führt
zu einer Exception, wenn versucht wird einen Wert doppelt einzufügen.
Das hat den klaren Vorteil, dass die Datenbank selbst dafür sorgt keine
Duplikate zu enthalten.
Das Schlüsselwort "Indiziert" hat aber noch andere Konsequenzen.
Dazu später mehr.
Erst mal das zum Laufen bringen
Codebeispiele folgen ...