1 pièce(s) jointe(s)
blocage (transaction verouillée)
bonjour tout le monde.
j ai une application qui tourne avec une base dans sql server 2005, parfois j ai des requettes sql qui échoue sachant que se sont des simple requettes de mise à jour . je donne un exemple
j ai une table personne avec une colonne nom
j arrive à modifier correctement tout les noms , mai à un moment donnée un nom spécifique , une ligne précise dans ma table se bloque .
on cherchant un peu dans le net j ai trouvé qu il s agit peut etyre d'un problème de verou.
parceque une fois je redemmare mon appli tout marche bien avec cette ligne , mais je retombe encore sur une autre ligne qui se bloque.
la requette est :
Code:
1 2 3 4 5 6 7 8
| SELECT
*
FROM
master.dbo.sysprocesses PROCESSLIST
INNER JOIN master.dbo.sysdatabases DATABASELIST
ON PROCESSLIST.dbid = DATABASELIST.dbid
WHERE
(DATABASELIST.name = N'VISION_DB') |
je débute avec sql server et je sais pas comment faire pour ne pas avoir se blocage à chaque fois
voila le resultat qu il me retourne lorseque c est bloquer
procédure stockée avec valeur de retour
Bonjour,
j'ai ce même problème lorsque je teste mon application avec plusieurs clients:
Aléatoirement, à l'insertion d'une ligne, j'ai une SqlException : "Une nouvelle transaction n'est pas autorisée parce que d'autres threads sont en cours d'exécution dans la session."
j'ai lu avec intérêt les posts de ce topic, ainsi que les liens de SQLpro...
J'ai donc créé une procédure stockée:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
CREATE PROCEDURE usr_CreateNewILT
-- Add the parameters for the stored procedure here
@ProductID int,
@SerialID nchar(50),
@UserID int
AS
DECLARE @date datetime
DECLARE @ILTID int
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SET IDENTITY_INSERT dbo.ILT OFF
-- Insert statements for procedure here
BEGIN TRANSACTION
-- Is the product ID exist?
IF NOT EXISTS (SELECT * FROM [APRProduction].[dbo].[Product] WHERE [ID]=@ProductID)
BEGIN
ROLLBACK TRANSACTION
RETURN -1
END
SELECT @date = GETDATE()
--SELECT @UserID = [ID] FROM [APRProduction].[dbo].[Utilisateur] WHERE [Username]=@Username
INSERT INTO dbo.ILT WITH (TABLOCKX) (ProductID, SerialID, Date, Score, nbimpacts, Utilisateur_ID )
VALUES (@ProductID, @SerialID, @date, 0, 0, @UserID)
IF (@@ERROR <> 0) OR (@@ROWCOUNT = 0)
GOTO ROLLBACK_ON_ERROR
SELECT @ILTID = SCOPE_IDENTITY()
COMMIT TRANSACTION
RETURN @ILTID
ROLLBACK_ON_ERROR:
ROLLBACK TRANSACTION
RETURN -1
END
GO |
Cette procédure me permet d'ajouter proprement une ligne dans la table, et de récupérer l'ID de cette ligne. Ca fonctionne très bien sous SQL server...
Mais pour appeler cette procédure stockée depuis le C#... C'est beaucoup moins simple... car je ne récupère que l'ID... Du coup, je ne peux pas importer la fonction depuis mon code C#...
voir ci-dessous:
http://msdn.microsoft.com/fr-fr/libr...(v=vs.90).aspx
Citation:
Remarque
Si la valeur de Type de retour est un type simple, Visual Basic ou C# n'est pas généré automatiquement pour le Function Import.
Je n'ai vu qu'un article en anglais expliquant qu'il "suffit" de créer des tables contenant uniquement un int et de transférer les résultats vers cette table...
http://thedatafarm.com/blog/data-acc...f-ef-designer/
Quelqu'un aurait un début d'idée pour m'aider?
merci d'avance,