dichiarazione ASP.NET Aggiornamento GridView
-
26-10-2019 - |
Domanda
Sto usando VS2005 C # e SQL Server 2005.
Ho un GridView e questa è la mia dichiarazione di aggiornamento in corso:
UpdateCommand="UPDATE [UserData] SET [UserID] = @UserIDe, [Username] = @Username, [Age] = @Age, [MemberType]=@MemberType WHERE [UserID] = @UserID
L'istruzione precedente aggiornerà la riga utente a identificare da UserID
.
Tuttavia, vorrei che la UserID
variabile per essere modificabile, quindi se posso modificare il mio UserID
durante l'aggiornamento della tabella, la riga non verrà aggiornata perché quel particolare UserID
potrebbe non esistere.
Come posso utilizzare il UpdateCommand
e aggiornare la riga identificando il row number
della fila modificato?
Soluzione
Questo può essere fatto tenendo traccia di tutti i valori originali. Visual Studio farà questo per voi, se si utilizza la procedura guidata per generare istruzioni SQL, e si seleziona l'opzione "Usa concorrenza ottimistica", come mostrato qui.
Un esempio di SQL generato può essere trovato qui .
Esempio di codice dalla pagina:
UPDATE Products SET
ProductName = @ProductName,
UnitPrice = @UnitPrice
WHERE
ProductID = @original_ProductID AND
ProductName = @original_ProductName AND
UnitPrice = @original_UnitPrice
Leggendo l'articolo, si dovrebbe essere in grado di applicare lo stesso tipo di query per la vostra situazione, in quanto utilizzando i valori originali dovrebbe consentire di bypassare la necessità di una chiave primaria. Tuttavia, vorrei sottolineare che avere una chiave di identificazione modificabile è un disegno molto male, come non è possibile garantire che è unico nel suo genere. si può facilmente finire l'aggiornamento più di un record, insieme a tutta una serie di altre questioni.
Altri suggerimenti
Sotto il GridView v'è la necessità di tabella per avere almeno un ID univoco al fine di aggiornare un record. Se è necessario modificare l'ID utente, è necessario disporre di una chiave fissa nella tabella. Almeno un nome come UserKey. Penso GridView potuto solo modificare e aggiornare i dati fino a quando si dispone di un puntatore a quella riga. In caso contrario, rimuovere l'UserID dalla raccolta DataKeyNames e assegnarlo con le colonne che si pensa sono unici e non cambia.