Laden...

SqlCommandBuilder - wie aktuell ist er?

Erstellt von MrMilk vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.034 Views
M
MrMilk Themenstarter:in
75 Beiträge seit 2008
vor 15 Jahren
SqlCommandBuilder - wie aktuell ist er?

verwendetes Datenbanksystem: MS SQL Server 2005

Hallo,

und nochmals habe ich eine Frage zum SqlCommandBuilder.

Und zwar stehe ich vor folgendem Problem.

Momentan lade ich mir eine Tabelle etc. in ein DataGridView, logge die Dateien durch einen SqlcommandBuilder mit und lade sie wieder hoch.

Aber was würde zum Beispiel passieren, wenn jemand in der Zwischenzeit den Datensatz gelöscht hat und ich möchte ein Update auf diesem Datensatz ausführen?

Oder ich lege einen neuen Datensatz an, allerdings ist die Id schon vergeben(was ich nicht weiß), da jemand in der Zwischenzeit ebenfalls etwas hinzugefügt hat. Sprich anlegen doch nicht möglich.

Bestimmt gibt es hier noch viele andere Fälle...

Was kann ich hier tun?

Viele Grüße
MM

Mir fällt ein, gibt es da so etwas wie in Excel, wenn man ein verteiltes Dokument hat? Dort werden dann alle Änderungen angezeigt.

1.200 Beiträge seit 2007
vor 15 Jahren

Änderungen wirst du dir nicht so leicht anzeigen können. Wenn du dir ein typisiertes DataSet generierst, wird per default pessimistische Concurrency verwendet, d.h. ein Datensatz wird nur geupdated/gelöscht wenn er auch exakt in der ursprünglichen Form existiert. Wenn nicht, wird afaik eine Exception geschmissen.

Am besten löschst du überhaupt nichts, sondern machst einen InsteadOf Trigger für Delete auf die Datenbank und setzt nur ein Delete Flag. Dann kannst du die Änderungen über die ID abfragen und mit deiner Version im Speicher vergleichen.

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

3.825 Beiträge seit 2006
vor 15 Jahren

Aber was würde zum Beispiel passieren, wenn jemand in der Zwischenzeit den Datensatz gelöscht hat und ich möchte ein Update auf diesem Datensatz ausführen?
Oder ich lege einen neuen Datensatz an, allerdings ist die Id schon vergeben(was ich nicht weiß), da jemand in der Zwischenzeit ebenfalls etwas hinzugefügt hat. Sprich anlegen doch nicht möglich.

In diesen Fällen bekommst Du eine Fehlermeldung bei dem Update-Kommando.

Das hat ja mit dem SqlCommandBuilder nichts direkt zu tun.

Was kann ich hier tun?

Den Fehler in Deiner Applikation abfangen und entsprechend reagieren.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

M
MrMilk Themenstarter:in
75 Beiträge seit 2008
vor 15 Jahren

Hey,

erst einmal danke für die Antworte. Allerdings habe ich noch eine Rückfrage.

In diesen Fällen bekommst Du eine Fehlermeldung bei dem Update-Kommando.

Das hat ja mit dem SqlCommandBuilder nichts direkt zu tun.

Mmmh, ich daschte immer der SqlCommandBuilder wäre so etwas wie ein Logger, man gibt ihm am Anfang ein DatenGrid und dann formt er jede Änderung (welcher Art auch immer) in einen SQL Befehl um.

Zum Schluss sage ich dann so etwas wie: Führe alle Befehle aus, die der SqlBuilder erstellt hat aus.

Sehe ich das so richtig?

Viele Grüße
MM

1.200 Beiträge seit 2007
vor 15 Jahren

Der CommanBuilder hat nichts, aber auch rein gar nichts mit einem DataGrid zu tun. Gib ihm einen Select Command/DataAdapter und er generiert automatisch Inserts, Deletes und Updates.

Mit der ConflictOption kannst du das Verhalten für Concurrency steuern.

Was du mit den generierten Queries/Commands anfängst, ist deine Sache.

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

U
237 Beiträge seit 2007
vor 15 Jahren

🛈
kapitel 27-29

heute code ich, morgen debug ich und übermorgen cast ich die königin auf int

M
MrMilk Themenstarter:in
75 Beiträge seit 2008
vor 15 Jahren

Hallo,

ich habe mir nun einmal Kapitel 29 durchgelesen. Eigentlich beschreibt es genau das was ich meine, allerdings wird hier teilweise sehr hard kodiert und ich möchte nicht für jede Tabelle eine neue Methode schreiben.

Kennt jemand von euch hierzu ein Referenzprojekt wo das anderes gelöst wird?

Viele Grüße
MM

1.200 Beiträge seit 2007
vor 15 Jahren

Wie wäre es, wenn du dir alles vom DataSet-Designer autogenerieren lässt?

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

M
MrMilk Themenstarter:in
75 Beiträge seit 2008
vor 15 Jahren

Das klingt sehr interessant 🙂
Kannst du mir sagen wie man so etwas anstellt? Wäre echt super oder kennst du eine Referenz dazu?
[Nutze das VS 2005 Standard Edtion]

Viele Grüße
MM

1.200 Beiträge seit 2007
vor 15 Jahren

http://www.15seconds.com/issue/060427.htm

Hier solltest du genügend Informationen rausziehen können. Ich finde den Designer eigentlich sehr intuitiv. Einfach neue Datenquelle zum Projekt hinzufügen und dann den Wizards folgen.

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!