Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récupérer les valeurs remvoyées par une procédure stockée

2 réponses
Avatar
Patrick
Bonjour,

Dans notre base de données SQL Server, il y a une procédure stockée qui
renvoie 2 valeurs.

Comment dois-je l'appeler et comment puis-je récupérer les valeurs renvoyées
par cette procédure ?

Merci pour votre aide.

--
Patrick

2 réponses

Avatar
Patrick Philippot
Bonjour,

Dans notre base de données SQL Server, il y a une procédure stockée
qui renvoie 2 valeurs.



S'il y a 2 valeurs retournées, je suppose donc qu'il ne s'agit pas d'une
valeur de retour de la procédure mais de 2 paramètres out? Ou d'une valeur
retournée par la procédure stockée et l'autre via un paramètre out?

Comment dois-je l'appeler et comment puis-je récupérer les valeurs
renvoyées par cette procédure ?



Dans tous les cas, le processus se résume à ceci:

- Création d'un objet SqlCommand
- Déclaration des paramètres *à passer à* la procédure dans l'objet
Paramters de la SqlCommand
- Déclaration des paramètres en retour (soit valeur de retour, soit
paramètre out)
- Appel
- Récupération des valeurs en retour dans l'objet Parameters de la
SqlCommand.

Code C# (extrait de la doc MS):

SqlCommand sampleCMD = new SqlCommand("SampleProc", nwindConn);
//on dit que la commande est une procédure stockée
sampleCMD.CommandType = CommandType.StoredProcedure;

// On dit qu'il y a une valeur de retour
SqlParameter sampParm = sampleCMD.Parameters.Add("RETURN_VALUE",
SqlDbType.Int);
sampParm.Direction = ParameterDirection.ReturnValue;

// On déclare un paramètre "in"
sampParm = sampleCMD.Parameters.Add("@InputParm", SqlDbType.NVarChar, 12);
sampParm.Value = "Sample Value";

// On déclare un paramètre "out"
// On fait cela poru chaque paramètre "out" (dans votre cas il peut y en
avoir 2 - ou un seul
// et une valeur de retour, je ne sais pas)
sampParm = sampleCMD.Parameters.Add("@OutputParm", SqlDbType.NVarChar, 28);
sampParm.Direction = ParameterDirection.Output;

nwindConn.Open();
SqlDataReader sampReader = sampleCMD.ExecuteReader();
Console.WriteLine("{0}, {1}", sampReader.GetName(0), sampReader.GetName(1));
while (sampReader.Read())
{
Console.WriteLine("{0}, {1}", sampReader.GetInt32(0),
sampReader.GetString(1));
}

sampReader.Close();
nwindConn.Close();

// On récupère la valeur de retour et le paramètre "out"
Console.WriteLine(" @OutputParm: {0}",
sampleCMD.Parameters["@OutputParm"].Value);
Console.WriteLine("RETURN_VALUE: {0}",
sampleCMD.Parameters["RETURN_VALUE"].Value);

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Patrick
Merci.

--
Patrick


"Patrick Philippot" wrote:

Bonjour,

> Dans notre base de données SQL Server, il y a une procédure stockée
> qui renvoie 2 valeurs.

S'il y a 2 valeurs retournées, je suppose donc qu'il ne s'agit pas d'une
valeur de retour de la procédure mais de 2 paramètres out? Ou d'une valeur
retournée par la procédure stockée et l'autre via un paramètre out?

> Comment dois-je l'appeler et comment puis-je récupérer les valeurs
> renvoyées par cette procédure ?

Dans tous les cas, le processus se résume à ceci:

- Création d'un objet SqlCommand
- Déclaration des paramètres *à passer à* la procédure dans l'objet
Paramters de la SqlCommand
- Déclaration des paramètres en retour (soit valeur de retour, soit
paramètre out)
- Appel
- Récupération des valeurs en retour dans l'objet Parameters de la
SqlCommand.

Code C# (extrait de la doc MS):

SqlCommand sampleCMD = new SqlCommand("SampleProc", nwindConn);
//on dit que la commande est une procédure stockée
sampleCMD.CommandType = CommandType.StoredProcedure;

// On dit qu'il y a une valeur de retour
SqlParameter sampParm = sampleCMD.Parameters.Add("RETURN_VALUE",
SqlDbType.Int);
sampParm.Direction = ParameterDirection.ReturnValue;

// On déclare un paramètre "in"
sampParm = sampleCMD.Parameters.Add("@InputParm", SqlDbType.NVarChar, 12);
sampParm.Value = "Sample Value";

// On déclare un paramètre "out"
// On fait cela poru chaque paramètre "out" (dans votre cas il peut y en
avoir 2 - ou un seul
// et une valeur de retour, je ne sais pas)
sampParm = sampleCMD.Parameters.Add("@OutputParm", SqlDbType.NVarChar, 28);
sampParm.Direction = ParameterDirection.Output;

nwindConn.Open();
SqlDataReader sampReader = sampleCMD.ExecuteReader();
Console.WriteLine("{0}, {1}", sampReader.GetName(0), sampReader.GetName(1));
while (sampReader.Read())
{
Console.WriteLine("{0}, {1}", sampReader.GetInt32(0),
sampReader.GetString(1));
}

sampReader.Close();
nwindConn.Close();

// On récupère la valeur de retour et le paramètre "out"
Console.WriteLine(" @OutputParm: {0}",
sampleCMD.Parameters["@OutputParm"].Value);
Console.WriteLine("RETURN_VALUE: {0}",
sampleCMD.Parameters["RETURN_VALUE"].Value);

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr