Frage

Ich verwende VS2005 C# und SQL Server 2005.

Ich habe eine Gridview und dies ist meine aktuelle Update -Anweisung:

UpdateCommand="UPDATE [UserData] SET [UserID] = @UserIDe, [Username] = @Username, [Age] = @Age, [MemberType]=@MemberType WHERE [UserID] = @UserID

Die obige Anweisung aktualisiert die Benutzerzeile nach Identifizierung nach UserID.

Ich möchte jedoch die Variable UserID zu bearbeiten, also, wenn ich meine bearbeite UserID Während der Aktualisierung der Tabelle wird die Zeile nicht aktualisiert, weil diese bestimmte UserID kann nicht existieren.

Wie kann ich das verwenden? UpdateCommand und aktualisieren Sie die Zeile, indem Sie die identifizieren row number der bearbeiteten Reihe?

War es hilfreich?

Lösung

Dies kann durch Verfolgung aller Originalwerte erfolgen. Visual Studio erledigt dies für Sie, wenn Sie mit dem Assistenten Ihre SQL -Anweisungen generieren und die Option "Optimistische Genauigkeit verwenden" wie gezeigt auswählen hier.

Ein Beispiel für das generierte SQL kann gefunden werden hier.

Code Beispiel von der Seite:

UPDATE Products SET
    ProductName = @ProductName,
    UnitPrice = @UnitPrice
WHERE
    ProductID = @original_ProductID AND
    ProductName = @original_ProductName AND
    UnitPrice = @original_UnitPrice

Wenn Sie den Artikel durchlesen, sollten Sie in der Lage sein, dieselbe Abfrageart auf Ihre Situation anzuwenden, da Sie die ursprünglichen Werte verwenden sollten, um die Notwendigkeit eines Primärschlüssels zu umgehen. Ich sollte jedoch darauf hinweisen, dass ein bearbeitbarer Identifikationsschlüssel ein sehr schlechtes Design ist, da Sie nicht garantieren können, dass er einzigartig ist. Sie können sehr einfach die Aktualisierung von mehr als einen Datensatz sowie eine ganze Reihe anderer Probleme beenden.

Andere Tipps

Unter der Rasteransicht muss die Tabelle mindestens eine eindeutige ID haben, um einen Datensatz zu aktualisieren. Wenn Sie die BenutzerID bearbeiten müssen, müssen Sie einen festen Schlüssel in Ihrer Tabelle haben. Nennen Sie es zumindest als UserKey. Ich denke, GridView konnte nur Daten bearbeiten und aktualisieren, solange Sie einen Zeiger auf diese Zeile haben. Entfernen Sie die BenutzerID ansonsten aus der DataKeynames -Sammlung und weisen Sie sie mit den Spalten zu, die Sie für eindeutig halten und sich nicht ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top