Hello,

je galère avec les SqlParameter...
En gros, voilà le code :
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
18
19
20
21
                SqlCommand sqlCmdCreeTache = new SqlCommand();
                sqlCmdCreeTache.CommandType = CommandType.StoredProcedure;
                sqlCmdCreeTache.CommandText = "[ma_proc]";
                sqlCmdCreeTache.Connection = ConnexionBD;
                sqlCmdCreeTache.Transaction = transac;
 
                SqlParameter sqlPrmGrpId = sqlCmdCreeTache.Parameters.Add("@GRP_ID", SqlDbType.UniqueIdentifier);
                sqlPrmGrpId.Value = (Guid)new GuidConverter().ConvertFromString("12345678-9123-4567-8901-234567890123");
 
                SqlParameter sqlPrmCreateur = sqlCmdCreeTache.Parameters.Add("@CREATEUR", SqlDbType.NVarChar);
                sqlPrmCreateur.Value = LoginOperateur;
 
                SqlParameter sqlPrmDateCrea = sqlCmdCreeTache.Parameters.Add("@DATE_CREATION", SqlDbType.DateTime);
                sqlPrmDateCrea.Value = DateTime.Now;
 
                SqlParameter sqlPrmCodRet = sqlCmdCreeTache.Parameters.Add("@ID", SqlDbType.UniqueIdentifier);
                sqlPrmCodRet.Direction = ParameterDirection.ReturnValue;
 
                sqlCmdCreeTache.ExecuteNonQuery();
 
                id = Convert.ToString(sqlCmdCreeTache.Parameters["@ID"].Value);
et la proc (je n'ai pas la main dessus) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ALTER PROCEDURE [dbo].[ma_proc]
	@ID uniqueidentifier OUTPUT,
	@GRP_ID uniqueidentifier,
	@CREATEUR varchar(255),
	@DATE_CREATION datetime
 
AS
SET NOCOUNT ON
SET @ID = NEWID()
BEGIN
 
INSERT INTO ...
 
END
Et donc 2 questions :
1) paramètre OUTPUT
à l'exécution j'ai cette exception : "La procédure ou fonction 'ma_proc' attend le paramètre '@ID', qui n'a pas été fourni."
Pourquoi fournir une valeur puisqu'il s'agit d'un paramètre de retour ?
Et surtout, comment ? (un sqlPrmCodRet.Value = ... ne fonctionne pas)
(PS : et pas besoin de faire un return @ID à la fin de la proc ?)

2) paramètres facultatifs
certains paramètres sont facultatifs : y a-t-il un moyen de ne pas renseigner les .Value ? (La procédure ou fonction 'ma_proc' attend le paramètre '@XXX', qui n'a pas été fourni.)