Bonjour,
Dans une table sous SQL server j'ai un champ "numéro" et un champ "IncrementON".
En mode ajout ou modification, le champ numéro s'incrémente automatiquement de la façon suivante :
Si (IncrementON = True et numéro = 0) alors Numero = max(Numero) + 1
Ainsi dans la table il n'y a pas de numéro en doublon, sauf 0.
J'arrive très bien à gérer cela grâce à un trigger :
Problème dans mon code C#/Windows form/DatagridView/bindingsource/linq :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SET NOCOUNT ON; DECLARE @Numero integer; DECLARE @idTable integer; DECLARE cursor1 CURSOR FOR SELECT IdTable1 FROM inserted WHERE IncrementON = 1 AND Numero = 0 OPEN cursor1; BEGIN TRANSACTION tr1; SELECT @Numero = MAX(Numero) FROM Table1 FETCH NEXT FROM cursor1 INTO @idTable; WHILE @@FETCH_STATUS = 0 BEGIN SET @Numero = @Numero + 1 UPDATE Table1 SET Numero = @Numero WHERE IdTable1 = @idTable FETCH NEXT FROM cursor1 INTO @idTable; END COMMIT TRANSACTION tr1; CLOSE cursor1; DEALLOCATE cursor1;
Lors du context.SubmitChanges(), la colonne "Numero" reste à 0.
Si j'ajoute aContext.Refresh(RefreshMode.OverwriteCurrentValues, context.Table1) la colonne se met à jour, mais il faut attendre 11 à 20 secondes avant de reprendre la main, le chargement initial ne prends qu'une seconde pour une centaine d'enregistrements dans la table actuellement.
Piste :
1/ soit accélérer le refresh : comment ?
2/ soit transformer le trigger en code et le placer dans mon programme : où placer le code et à quoi ressemble-t-il ?
3/ Reloader entièrement les données du context => mais comment ?
Avez-vous une idée?
Merci beaucoup.
Laumon.
Partager