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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top