2009-11-27 4 views
0

Je reçois l'exception ci-dessous quand je vais entrer l'enregistrement dans une table via StoredProceduer de sqlserver J'ai un champ dont j'ai besoin de vous mettre à jour immédiatement après insertion de nouvel enregistrement dans table. pour cela j'ai créé une procédure sotred dans laquelle j'ai écrit la commande insert et après j'ai écrit une commande de mise à jour pour le même recored mais cela m'a donné l'erreur ci-dessous SQlException: Nombre de transactions après EXECUTE indique un nombre incohérent d'instructions BEGIN et COMMIT. Comptage précédent = 1, nombre actuel = 2. Une transaction non validée est détectée à la fin du lot. La transaction est annulée. Une certaine erreur dans l'exécution de la procédure stockéeException de compte de transaction dans vb.net (Exception SQL)

J'ai essayé d'une autre manière aussi comme: je viens d'écrire la commande insert dans storedprocedure et j'ai créé un trigger afterInsert dans lequel je lance la commande de mise à jour. mais je suis face au-dessus exception

Détails: Structure de la table:

CREATE TABLE [dbo].[TabStoreGRNMaster](
    [pk_grnm_id] [bigint] IDENTITY(1,1) NOT NULL, 
    [fk_col_id] [bigint] NULL, 
    [fk_sup_id] [bigint] NULL, 
    [grnm_grnno] [varchar](50) NULL, 
    [grnm_date] [nvarchar](10) NULL, 
    [grnm_partyinvno] [varchar](50) NULL, 
    [grnm_invdate] [nvarchar](10) NULL, 
    [grnm_freight] [numeric](7, 2) NULL, 
    [grnm_otherchrg] [numeric](7, 2) NULL, 
    [grnm_roundoff] [bit] NULL, 
    [Fk_User_Id] [bigint] NULL, 
    [grnm_EntryDate] [nvarchar](8) NULL, 
CONSTRAINT [PK_TabStoreGRNMaster] PRIMARY KEY CLUSTERED 
(
    [pk_grnm_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

StoredProcedure:

USE [Kollege] 
GO 
/****** Object: StoredProcedure [dbo].[StoreGRNMaster] Script Date: 11/27/2009 10:20:37 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[StoreGRNMaster] 
    (
    @pk_grnm_id   [bigint] output , 
    @fk_col_id   [bigint] = 0 , 
    @fk_sup_id   [bigint] = 0 , 
    @grnm_grnno   [varchar](50) = '', 
    @grnm_date   [nvarchar](10) = null, 
    @grnm_partyinvno   [varchar](50) = '', 
    @grnm_invdate   [nvarchar](10) = null, 
    @grnm_freight   [numeric] = 0 , 
    @grnm_otherchrg   [numeric] = 0 , 
    @grnm_roundoff   [bit] = 0 , 
    @Fk_User_Id   [bigint] = 0 , 
    @grnm_EntryDate   [nvarchar](8) = null, 
    @opt      [BIGINT] =0, 
    @del      [bit] =0 

    ) 
as 
begin 
SET NOCOUNT ON; 
BEGIN TRY 
begin transaction 
if isnull(@opt,0) = 0 begin 
INSERT INTO TabStoreGRNMaster 
    (
    fk_col_id, 
    fk_sup_id, 
    grnm_grnno, 
    grnm_date, 
    grnm_partyinvno, 
    grnm_invdate, 
    grnm_freight, 
    grnm_otherchrg, 
    grnm_roundoff, 
    Fk_User_Id, 
    grnm_EntryDate 
    ) 
VALUES 
    (
    @fk_col_id, 
    @fk_sup_id, 
    @grnm_grnno, 
    @grnm_date, 
    @grnm_partyinvno, 
    @grnm_invdate, 
    @grnm_freight, 
    @grnm_otherchrg, 
    @grnm_roundoff, 
    @Fk_User_Id, 
    @grnm_EntryDate 
    ) 
set @pk_grnm_id = @@identity 
end 
else 
begin 
if @del = 0 
UPDATE TabStoreGRNMaster 
SET 
     fk_col_id   = @fk_col_id, 
     fk_sup_id   = @fk_sup_id, 
     grnm_grnno   = @grnm_grnno, 
     grnm_date   = @grnm_date, 
     grnm_partyinvno   = @grnm_partyinvno, 
     grnm_invdate   = @grnm_invdate, 
     grnm_freight   = @grnm_freight, 
     grnm_otherchrg   = @grnm_otherchrg, 
     grnm_roundoff   = @grnm_roundoff, 
     Fk_User_Id   = @Fk_User_Id, 
     grnm_EntryDate   = @grnm_EntryDate 
WHERE 
(
pk_grnm_id = @opt 
) 

if @del=1 and isnull(@opt,0) <> 0 

DELETE from [TabStoreGRNMaster] 
WHERE 
    ([pk_grnm_id] = @opt) 
end 
commit transaction 
END TRY 
BEGIN CATCH 
raiserror ('Some Error in stored procedure execution',1,1) 
END CATCH; 
END 

Trigger:

alter TRIGGER TGRStoreGRNMasterCode 
ON tabStoreGRNMaster 
AFTER INSERT 
AS 
begin 
declare @pk varchar(10) 
declare @colcode varchar(10) 
declare @current_session varchar(20) 
declare @colid bigint 
set @pk = (select pk_grnm_id from Inserted) 
--set @colid = (select fk_col_id from Inserted) 
set @colcode= 'jiet'--(select col_code from tabcollegemaster where pk_col_id =5) (when i replace word 'Jiet' with commented qry i gets sql exception otherwise its working fine) 
select @current_session = Ses_abbrev from TabAcaSessionMast where ses_current = 1 
--update tabStoreGRNMaster set grnm_grnno= @colcode +'/' [email protected]_session+ '/' + @pk where pk_grnm_id=convert(bigint,@pk) 
update tabStoreGRNMaster set grnm_grnno= (select col_code from tabcollegemaster where pk_col_id=5) +'/' [email protected]_session+ '/' + @pk where pk_grnm_id=convert(bigint,@pk) 

end 

Répondre

0

Votre commentaire à une autre réponse a mentionné "Je maintiens des transactions de Vb.net également en appelant cette procédure stockée". C'est la cause

Vous devez équilibrer BEGIN TRAN et COMMITs/ROLLBACKs pour que @@ TRANCOUNT commence et se termine avec la même valeur pour la même portée.

Ou tout faire dans la procédure stockée ou tout faire dans le client

0

Il semble à moi comme vous êtes ne fait rien avec la transaction ouverte si une erreur est trouvée dans votre bloc TRY - le COM MIT ne fonctionnera pas, mais votre bloc CATCH n'a pas de ROLLBACK.

+0

Je suis maintenir les transactions de Vb.net également tout en appelant cette procédure stockée –