[3.5 + ADO.net] Récup Output Parameter
Salut,
J'ai créé une Proc qui permet de paginer le jeu d'enregistrement de sortie.
Pour gérer mes boutons de pagination, j'ai besoin du nombre maxi de lignes.
Lorsque j'implémente la proc dans mon objet sqlCommand, je récupère null dans @Rows alors qu'en exécution pas à pas de la proc, j'ai bien une valeur.
Quelqu'un pourrait-il m'aider ?
Voici la proc et le code qui l'exécute
Proc
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
|
ALTER PROCEDURE dbo.SITM_SA_Users_And_Roles_List
(
@intPremiereLigne int,
@intNbrLignesPage int,
@Rows int=0 OUTPUT
)
as
SELECT
@Rows = count(aspnet_Users.UserId)
FROM
aspnet_Users INNER JOIN
aspnet_UsersInRoles ON aspnet_Users.UserId = aspnet_UsersInRoles.UserId INNER JOIN
aspnet_Roles ON aspnet_UsersInRoles.RoleId = aspnet_Roles.RoleId;
With mCte (RowNumber, idUser, txtNom, idRole,txtRole)
As
(
SELECT
Row_Number() over (order by aspnet_Users.UserName asc) as RowNumber,
aspnet_Users.UserId as idUser,
aspnet_Users.UserName as txtNom,
aspnet_Roles.RoleId as idRole,
aspnet_Roles.RoleName as txtRole
FROM
aspnet_Users INNER JOIN
aspnet_UsersInRoles ON aspnet_Users.UserId = aspnet_UsersInRoles.UserId INNER JOIN
aspnet_Roles ON aspnet_UsersInRoles.RoleId = aspnet_Roles.RoleId
)
Select *
From mCte C
Where RowNumber Between @intPremiereLigne and (@intPremiereLigne + @intNbrLignesPage -1)
RETURN |
Code C#
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
|
int intFirstRow;
int intRowsPerPage;
intFirstRow = Int32.Parse(hidFirstRow.Value);
intRowsPerPage = Int32.Parse(hidRowsPerPage.Value);
SqlConnection oConn = new SqlConnection();
SqlCommand oCmd = new SqlCommand();
SqlDataReader oDR;
string strConnString = ConfigurationManager.ConnectionStrings["SITMConnectionString"].ConnectionString;
oConn.ConnectionString = strConnString;
oConn.Open();
oCmd.Connection = oConn;
oCmd.CommandType = CommandType.StoredProcedure;
oCmd.CommandText = "SITM_SA_Users_And_Roles_List";
oCmd.Parameters.Add(new SqlParameter("@intPremiereLigne", intFirstRow));
oCmd.Parameters.Add(new SqlParameter("@intNbrLignesPage", intRowsPerPage));
SqlParameter oRows = new SqlParameter("@Rows", SqlDbType.Int);
oRows.Direction = ParameterDirection.Output;
oCmd.Parameters.Add(oRows);
oDR = oCmd.ExecuteReader();
hidRows.Value = oCmd.Parameters["@Rows"].Value.ToString();
rptList.DataSource = oDR;
rptList.DataBind();
oConn.Close(); |
Notez que j'ai aussi essayé avec la ReturnValue j'ai null aussi. Peut-être faut-il jouer sur le behavior du datareader mais je n'ai pas réussi... :(
D'avance merci pour votre aide.
Laurent