verwendetes Datenbanksystem: MSSQL 2005
Hallo,
Ich verwende .NET 2.0 und ADO.NET mit typisierten DataSets. Für die einzelnen DB-Tabellen habe ich TableAdapter definiert, welche dann die Queries etc. beinhalten für die jeweilige Tabelle.
Nun habe ich aber im Management Studio ein SQL-Skript erstellt, welches gewisse Aktionen ausführt, welches mehrere Tabellen betrifft. Z.B. werden anhand von Daten in Tabelle x in den Tabellen m und n neue Zeilen eingetragen und in anderen Tabellen werden Zeilen z.B. gleichzeitig anhand von den Daten in Tabelle x gelöscht. Also habe ich SELECTs, INSERTS und DELETEs.
Da wir bisher noch keine Stored Procedures haben möchte das ganze aber nicht als SP in der DB speichern. Möchte gerne das Skript im "Code" gespeichert haben, damit wir alles am gleichen Ort haben. Nun weiss ich aber nicht wie ich das am elegantesten einbaue. Ich könnte das natürlich "manuell" einbauen und die DataSets ignorieren (mit SqlCommand etc.), anderseits gibt es vielleicht eine möglichkeit das sauberer zu machen in dem ich das (typisierte) DatSet verwende und das Query dort platziere. Es gibt dort ja die Möglichkeit Queries hinzuzufügen, allerdings kann man dort nur entweder Inserts, Selects oder z.B. Update Queries erstellen, nicht aber gemischte...
Wie würdet ihr das machen?
Gruss, Shi
Der TableAdapter ist dazu gedacht recht einfache Abfragen und Inserts/Deletes durchzuführen und einen typisierten Zugriff auf die Daten zu ermöglichen.
Er ist nicht dafür konzipiert komplexe Sachen im angeschlossenen DataSet durchzuführen.
Wenn du soetwas machen willst, erstelle deine Abfrage/Procedure in einer Partial Class, führe die Aktion per Execute-NonQuery/Scalar, DataReader oder DataAdapter aus und behandele die betroffenen Tabellen dann selber.
Ich würde das als Stored Procedure laufen lassen - schon rein aus Performance-Gründen. Ich persönlich finde das auch deutlich wartbarer - gerade bei grösseren Scripts.
Ist ja kein Argument, dass ihr noch keine SP habt und deswegen keine nutzt. 😉
Ja, das Argument ist natürlich schon schwach, aber die Leute bei uns sind meistens "Traditionalisten" - kommt mal ne neue Idee fallen sie gleich in Ohmacht 😉 Darum versuche ich nicht immer gegen Windmühlen zu kämpfen.
Habe es nun so gemacht wie FZELLE es beschrieben hat, gemäss Beispiel von: http://msdn.microsoft.com/de-de/library/system.data.sqlclient.sqlcommand.executenonquery%28VS.80%29.aspx