Procédure stockée

canacana Messages postés 13 Date d'inscription mardi 2 octobre 2007 Statut Membre Dernière intervention 2 août 2011 - 10 déc. 2010 à 11:54
canacana Messages postés 13 Date d'inscription mardi 2 octobre 2007 Statut Membre Dernière intervention 2 août 2011 - 10 déc. 2010 à 11:59
Bonjour à tous,

Je développe en c# et j'utilise Linq to Sql pour attaquer ma base de donnée sql/server 2008
Le soucis que j'ai est que j'ai une procédure stockée que j'ai développé mais quand je veux l'insérer dans le DBML de mon application.
En le fessant, j'ai un message d'erreur qui me dit :
"Impossible d'identifier les types de retour des procédures stockées. Définissez le type de retour de chaque procédure dans la fenêtre de propriété."

La procédure est la suivante :

USE [Academia]
GO
/****** Object: StoredProcedure [dbo].[psx_Bulletin_Annuel] Script Date: 12/10/2010 10:54:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[psx_Bulletin_Annuel]
(
@CodeAnneeAcademique nvarchar(16),
@CodeClasse nvarchar(8),
@GenererUser nvarchar(256)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
DECLARE @LibelleClasse nvarchar(128),@result as bit, @message nvarchar(255),
@MatriculeEtudiant nvarchar(16),@NomPrenoms nvarchar(160),@DateNaissance datetime,
@LieuNaissance nvarchar(128),@NombreEtudiantClasse int,
@CoefficientGenerale float,@bactchOK bit,@EstSystemeUE bit,@DateInscription datetime ,
@CodePeriodeAcademique nvarchar(16) ,@LibelleAnneeAcademique nvarchar(128) ,
@CodeFiliere nvarchar(8) ,@LibelleFiliere nvarchar(128)

set @message='Calcul des bulletins annuels de la classe '+ @LibelleClasse

set @bactchOK=0
set @LibelleClasse= (select LibelleClasse from classe where CodeClasse=@CodeClasse)

set @LibelleAnneeAcademique=(select LibelleAnneeAcademique from AnneeAcademique
where CodeAnneeAcademique=@CodeAnneeAcademique)
SELECT @CodeFiliere= f.CodeFiliere, @LibelleFiliere=f.Libelle
FROM Filiere AS f INNER JOIN Classe AS c ON f.CodeFiliere = c.CodeFiliere
WHERE c.CodeClasse = @CodeClasse

SELECT @EstSystemeUE= m.EstSystemeUE
FROM MaquettePedagogique AS m INNER JOIN
Classe AS c ON m.CodeNiveauEtude = c.CodeNiveauEtude
AND m.CodeCycle c.CodeCycle AND m.CodeFiliere c.CodeFiliere
WHERE (c.CodeClasse = @CodeClasse)
set @NombreEtudiantClasse=0

DECLARE Etudiant_cursor CURSOR FOR
SELECT et.MatriculeEtudiant, (et.NomEtudiant+ ' ' + et.PrenomsEtudiant) as NomPrenoms,
et.DateNaissance, et.LieuNaissance,i.DateInscription
FROM Etudiant et INNER JOIN Inscription i on et.MatriculeEtudiant=i.MatriculeEtudiant
where (i.CodeClasse @CodeClasse) AND (i.CodeAnneeAcademique @CodeAnneeAcademique)
/*OUVERTURE DU CURSEUR */
OPEN Etudiant_cursor
FETCH NEXT FROM Etudiant_cursor INTO @MatriculeEtudiant, @NomPrenoms,@DateNaissance,@LieuNaissance,@DateInscription

WHILE @@FETCH_STATUS = 0
BEGIN

set @NombreEtudiantClasse = @NombreEtudiantClasse + 1
declare @IdBulletin uniqueidentifier,@IdBulletinAnnuel uniqueidentifier,
@MoyenneAnnuel decimal(18, 0), @Moyennetemp decimal(18, 0),
@EstAdmis bit, @ObservationDecision nvarchar (128) ,
@LibellePeriodeAcademique nvarchar(128),
@DateEnregistrement datetime ,@MoyenneAnnuelClasse decimal(18, 0),
@MoyenneGeneraleClasse decimal(18, 0), @MoyenneGenerale float

SELECT CodePeriodeAcademique, LibellePeriodeAcademique, MoyenneGeneraleClasse, MoyenneGenerale
INTO #TempBulletins
FROM BulletinClassique WHERE CodeClasse = @CodeClasse
and MatriculeEtudiant=@MatriculeEtudiant and CodeAnneeAcademique=@CodeAnneeAcademique

if (@EstSystemeUE=1)
begin
set @Moyennetemp=@Moyennetemp+@MoyenneGenerale
end
else
Begin
declare @coefficient int
set @coefficient=0
set @Moyennetemp=0

DECLARE Bull_cursor CURSOR FOR
SELECT CodePeriodeAcademique, LibellePeriodeAcademique, MoyenneGeneraleClasse, MoyenneGenerale
FROM #TempBulletins

OPEN Bull_cursor
FETCH NEXT FROM Bull_cursor INTO @CodePeriodeAcademique, @LibellePeriodeAcademique,
@MoyenneGeneraleClasse, @MoyenneGenerale
WHILE @@FETCH_STATUS = 0
BEGIN
--sIF (@CodePeriodeAcademique = 'S1')
IF ((@CodePeriodeAcademique 'S1')Or (@CodePeriodeAcademique 'T1'))
begin
set @Moyennetemp=@Moyennetemp+@MoyenneGenerale
set @coefficient=@coefficient+1
end
else
Begin
set @Moyennetemp=@Moyennetemp+@MoyenneGenerale*2
set @coefficient=@coefficient+2
end

FETCH NEXT FROM Bull_cursor INTO @CodePeriodeAcademique, @LibellePeriodeAcademique,
@MoyenneGeneraleClasse, @MoyenneGenerale
END
CLOSE Bull_cursor
DEALLOCATE Bull_cursor
End
set @MoyenneAnnuel=@Moyennetemp/@coefficient
set @IdBulletinAnnuel=newid()
exec dbo.psx_Bulletin_Annuel_Insert @IdBulletinAnnuel, @MoyenneAnnuel ,
@EstAdmis, @ObservationDecision,
@DateInscription, @CodeClasse,
@CodeAnneeAcademique, @LibelleAnneeAcademique,
@LibelleClasse, @MatriculeEtudiant, 0,
@NombreEtudiantClasse, @NomPrenoms, @DateNaissance,
@LieuNaissance, @GenererUser,
@CodeFiliere, @LibelleFiliere,@MoyenneAnnuelClasse

FETCH NEXT FROM Etudiant_cursor INTO @MatriculeEtudiant, @NomPrenoms,@DateNaissance,@LieuNaissance,@DateInscription
END
CLOSE Etudiant_cursor
DEALLOCATE Etudiant_cursor
exec dbo.psx_Bulletin_Annuel_MajRang @CodeAnneeAcademique, @CodeClasse
set @bactchOK=1
drop table #TempBulletins
if @bactchOK=1
INSERT INTO JournalEdu(CodeRapport, LibelleRapport, DateHeure)
VALUES (newid(),'Bulletins Annuels générés avec succès', Getdate())
else

INSERT INTO JournalEdu(CodeRapport, LibelleRapport, DateHeure)
VALUES (newid(), @message, Getdate())
END


Merci de m'aider SVP !!!

1 réponse

canacana Messages postés 13 Date d'inscription mardi 2 octobre 2007 Statut Membre Dernière intervention 2 août 2011
10 déc. 2010 à 11:59
Complément à ma requette:

Les deux procédures appelées en EXEC sont les suivantes :


USE [Academia]
GO
/****** Object: StoredProcedure [dbo].[psx_Bulletin_Annuel_Insert] Script Date: 12/10/2010 10:58:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[psx_Bulletin_Annuel_Insert]
(
@IdBulletinAnnuel uniqueidentifier,
@MoyenneAnnuel decimal(18, 0) ,
@EstAdmis bit ,
@ObservationDecision nvarchar (128) ,
@DateInscription datetime ,
@CodeClasse nvarchar(8) ,
@CodeAnneeAcademique nvarchar(16) ,
@LibelleAnneeAcademique nvarchar(128) ,
@LibelleClasse nvarchar(128) ,
@MatriculeEtudiant nvarchar(16) ,
@Rang int ,
@NombreEtudiantClasse int ,
@NomPrenoms nvarchar(128) ,
@DateNaissance datetime ,
@LieuNaissance nvarchar(128) ,
@DateEnregistrement datetime ,
@GenererUser nvarchar(256) ,
@CodeFiliere nvarchar(8) ,
@LibelleFiliere nvarchar(128) ,
@MoyenneAnnuelClasse decimal(18, 0)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

INSERT INTO BulletinAnnuelClassique
(BulletinAnnuelID, MoyenneAnnuel, EstAdmis, ObservationDecision, DateInscription, CodeClasse, CodeAnneeAcademique, LibelleAnneeAcademique,
LibelleClasse, MatriculeEtudiant, Rang, NombreEtudiantClasse, NomPrenoms, DateNaissance, LieuNaissance, DateEnregistrement, GenererUser,
CodeFiliere, LibelleFiliere,MoyenneAnnuelClasse)
VALUES (@IdBulletinAnnuel, @MoyenneAnnuel, @EstAdmis,
@ObservationDecision, @DateInscription, @CodeClasse,
@CodeAnneeAcademique, @LibelleAnneeAcademique,
@LibelleClasse, @MatriculeEtudiant, @Rang,
@NombreEtudiantClasse, @NomPrenoms, @DateNaissance,
@LieuNaissance, getdate(), @GenererUser,
@CodeFiliere, @LibelleFiliere,@MoyenneAnnuelClasse)
END


et le Second :




USE [Academia]
GO
/****** Object: StoredProcedure [dbo].[psx_Bulletin_Annuel_MajRang] Script Date: 12/10/2010 10:59:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[psx_Bulletin_Annuel_MajRang]
(
@CodeAnneeAcademique nvarchar(16),
@CodeClasse nvarchar(8)
)

AS
BEGIN
DECLARE @rang int,@IdBulletin uniqueidentifier,
@NombreEtudiant int ,@MoyenneAnnuelClasse decimal(18, 2)--,@MoyenneAnnuel decimal(18, 2)

SET NOCOUNT ON;

set @MoyenneAnnuelClasse= (SELECT sum(MoyenneGenerale) FROM BulletinClassique AS B
WHERE (B.CodeClasse @CodeClasse)and B.CodeAnneeAcademique @CodeAnneeAcademique )

SELECT BulletinID
Into #temp3
FROM BulletinClassique AS B
WHERE (B.CodeClasse @CodeClasse)and B.CodeAnneeAcademique @CodeAnneeAcademique
order by MoyenneGenerale desc
set @NombreEtudiant=(SELECT count(BulletinID) FROM #temp3 )

DECLARE temp_cursor3 CURSOR FOR
SELECT * from #temp3
set @rang=1
OPEN temp_cursor3
FETCH NEXT FROM temp_cursor3 INTO @IdBulletin
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE BulletinAnnuelClassique
SET rang = @rang,NombreEtudiantClasse=@NombreEtudiant,
MoyenneAnnuelClasse=@MoyenneAnnuelClasse/@NombreEtudiant
WHERE (BulletinAnnuelID = @IdBulletin )

-- Get the next element.
set @rang=@rang+1
FETCH NEXT FROM temp_cursor3 INTO @IdBulletin
END
delete from #temp3
CLOSE temp_cursor3
DEALLOCATE temp_cursor3
drop table #temp3

END
0
Rejoignez-nous