Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Tabellenupdate mit JOIN
DoubleM - Mi 31.07.13 12:40
Titel: Tabellenupdate mit JOIN
Hallo liebe Gemeinde,
ich arbeite mich langsam in die Thematik ein und bin auf ein Hindernis gestoßen.
Ich habe vor über mein GridView eine Störungsübersicht darzustellen.
Dazu habe ich 2 Tabellen (Stoerungen, Mitarbeiter)
Im SQL Server habe ich schon eine Beziehung zwischen beiden Tabellen hergestellt.
Meine Select-Anweisung im GRID funktioniert tadellos.
SQL-Anweisung
1: 2: 3:
| SELECT Stoerungen.S_ID, Mitarbeiter.Name, Stoerungen.S_device, Stoerungen.S_desc, Stoerungen.S_Filiale, Stoerungen.S_status, Stoerungen.S_creationdate, Stoerungen.S_Ursache, Stoerungen.S_Bearbeiter, Stoerungen.S_lastdate FROM Stoerungen INNER JOIN Mitarbeiter ON Stoerungen.S_Mitarbeiter = Mitarbeiter.M_ID |
Zu einer SELECT-Anweisung braucht man clevererweise auch eine UPDATE Anweisung.
An diesem Punkt hakt es gerade, vielleicht habe ich auch einfach nur einen fehlerhaften Ansatz.
Rein gedanklich sollte er anhand des Namens aus der Tabelle Mitarbeiter die Mitarbeiter.M_ID mit dem Wert Stoerungen.S_Mitarbeiter gleichsetzen.
Ich habe die Namen mittels DropDownList aus der Tabelle Mitarbeiter entnommen.
Vielen Dank schonmal für Eure Hilfe.
Moderiert von
Th69: SQL-Tags hinzugefügt
Ralf Jansen - Mi 31.07.13 14:01
Hier fehlt irgendwie die konkrete Frage.
Was ist jetzt dein Problem beim Update?
DoubleM - Mi 31.07.13 15:43
Die konkrete Frage lautet:
Wie würde die entsprechende UPDATE Anweisung lauten, damit die Werte korrekt gepeichert werden
Tabelle1: Mitarbeiter
M_ID int (FK mit Stoerungen.Mitarbeiter)
Name nvarchar
Tabelle2: Stoerungen
S_ID bigint
Mitarbeiter (FK mit Mitarbeiter.M_ID)
Filiale
S_device
S_desc
...
Mein GridView greift auf alle Werte der Stoerungen-Tabelle zu.
Statt des Mitarbeiter int Werts wird in dem GridView der Name aus Tabelle Mitarbeiter angezeigt.
Beim Update muss natürlich der Int-Wert (M_ID) genommen werden und in das Feld Mitarbeiter der Tabelle Stoerungen geschrieben werden.
Derzeit hänge ich genau dort fest und benötige bei der Umsetzung Hilfe!!!
Ich hoffe, dass mein Problem somit ausführlich dargelegt wurde.
Vielen Dank vorab schon einmal für Eure Mühen!
FinnO - Mi 31.07.13 16:04
Moin,
meinst du soetwas?
SQL-Anweisung
1:
| UPDATE t1, t2 SET t1.c1 = 1, t2.c1 = 2, t1.c2 = 4 WHERE (t1.id = t2.id) |
Ralf Jansen - Mi 31.07.13 16:24
Ich vermute mal du willst nur die Stoerungen Tabelle updaten und S_ID ist der primäre Schlüssel richtig? Die Mitarbeiterdetails an dieser Stelle mitzuändern wäre wohl unfug.
Du willst vielleicht die Zuordnung des Mitarbeiters zu einer Störung ändern aber bestimmt nicht den Namen des Mitarbeiters.
Wenn du die M_ID(oder S_Mitarbeiter -die wäre ja gleich) brauchst mußt du die auch mit in die Select Liste aufnehmen. Man kann nur verwenden und ändern was man auch mit aus der DB geholt hat ;)
Eine Update wäre dann der übliche Aufbau wie bei jedem Update in ADO.Net (so wie ihn eine DataAdapter oder CommandBuilder automatisch generieren würde).
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| UPDATE Stoerungen SET S_device = @S_device_neuerWert, S_desc = @S_desc_neuerWert, S_Filiale = @S_Filiale_neuerWert, -- und noch viele mehr S_Mitarbeiter = @S_Mitarbeiter_neuerWert WHERE S_ID = @S_ID AND S_device = @S_device_alterWert AND S_desc= @S_desc_alterWert AND S_Filiale = @S_Filiale_alterWert, -- und noch viele mehr AND S_Mitarbeiter = @S_Mitarbeiter_alterWert |
Je nachdem wie du die Daten anzeigst ist es vielleicht ratsam gar keinen Join zu verwenden sondern nur die Stoerungen Tabelle anzuzeigen. Den Namen des Mitarbeiters anstatt S_Mitarbeiter anzuzeigen könnte man dann z.b. per Lookup Column in einem Grid.
DoubleM - Mi 07.08.13 14:17
Hallo liebe Gemeinde,
erst einmal vielen Dank an alle, die mir so fleißig geholfen haben.
Ich war gerade dabei, das Bsp. von Ralf zu übertragen, leider klappt es nicht oder ich habe mich falsch angestellt.
Bei meiner recherche bin ich nun soweit, dass ich in meiner Gridview alle Werte der einen Tabelle Stoerungen abbilde.
Beim Editieren wird eine 2. SQL Source angezapft, die wiederum meine Mitarbeiter und ID zuordnet und als Dropdownlist anzeigt.
XML-Daten
1: 2:
| <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:cpInternConnectionString %>" SelectCommand="SELECT DISTINCT [Name], [M_ID] FROM [Mitarbeiter]"></asp:SqlDataSource> |
Nur wenn diese Werte übernommen werden sollen, bspw. Mitarbeiter ändert sich, wird der Wert nicht übernommen.
Ich hoffe, dass es das war was gemeint war Ralf mit der Lookup Column??
Moderiert von
Th69: XML-Tags hinzugefügt
mmgg - So 06.07.14 23:15
müsste der WHERE Abschnitt nicht auch auf 'NULL' checken?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!