canacana
Messages postés13Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention 2 août 2011
-
10 déc. 2010 à 11:54
canacana
Messages postés13Date d'inscriptionmardi 2 octobre 2007StatutMembreDerniè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;
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
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
canacana
Messages postés13Date d'inscriptionmardi 2 octobre 2007StatutMembreDerniè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;
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