Si je lance une procédure de magasin avec deux valeurs de paramètres (admin, admin) (paramètres: admin, admin) Je reçois le message suivant:en utilisant une procédure stockée pour la connexion en C#
Session_UID User_Group_Name Sys_User_Name ------------------------------------ -------------------------------------------------- - NULLAdministratorsNTMSAdmin No rows affected. (1 row(s) returned) @RETURN_VALUE = 0 Finished running [dbo].[p_SYS_Login].
Pour obtenir le même message dans C# J'ai utilisé le code suivant:
string strConnection = Settings.Default.ConnectionString;
using (SqlConnection conn = new SqlConnection(strConnection))
{
using (SqlCommand cmd = new SqlCommand())
{
SqlDataReader rdr = null;
cmd.Connection = conn;
cmd.CommandText = "p_SYS_Login";
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter paramReturnValue = new SqlParameter();
paramReturnValue.ParameterName = "@RETURN_VALUE";
paramReturnValue.SqlDbType = SqlDbType.Int;
paramReturnValue.SourceColumn = null;
paramReturnValue.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(paramReturnValue);
cmd.Parameters.Add(paramGroupName);
cmd.Parameters.Add(paramUserName);
cmd.Parameters.AddWithValue("@Sys_Login", "admin");
cmd.Parameters.AddWithValue("@Sys_Password", "admin");
try
{
conn.Open();
rdr = cmd.ExecuteReader();
string test = (string)cmd.Parameters["@RETURN_VALUE"].Value;
while (rdr.Read())
{
Console.WriteLine("test : " + rdr[0]);
}
}
catch (Exception ex)
{
string message = ex.Message;
string caption = "MAVIS Exception";
MessageBoxButtons buttons = MessageBoxButtons.OK;
MessageBox.Show(
message,
caption,
buttons,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button1);
}
finally
{
cmd.Dispose();
conn.Close();
}
}
}
mais je ne reçois rien dans SqlDataReader rdr; Y a-t-il quelque chose qui me manque?
Je n'ai pas essayé cela, mais je soupçonne que les classes 'DataReader' ne sont jamais remplies que par des ensembles de résultats *, et non par des valeurs renvoyées. –
Pouvez-vous modifier la procédure stockée pour renvoyer la valeur de succès dans le jeu de résultats au lieu de la valeur de retour? Cela peut résoudre le problème. –
... et avez-vous inspecté la valeur de la variable 'test'? Il est complètement ignoré dans le code après sa création et son affectation. –