Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Accéder au paramètre de sortie de la procédure stockée SQL Server en C#

Je vous suggère de mettre votre SqlConnection et SqlCommand à utiliser des blocs afin de garantir leur élimination appropriée.

De plus, si je ne me trompe pas, les paramètres de sortie ne sont disponibles qu'après avoir lu complètement l'ensemble de données résultant renvoyé.

Puisque vous ne semblez pas du tout en avoir besoin, pourquoi ne pas simplement utiliser .ExecuteNonQuery() Au lieu? Cela résout-il le problème ?

using (SqlConnection con = new SqlConnection("Data Source=localhost\\SQLEXPRESS;Initial Catalog=answers;Integrated Security=True"))
using (SqlCommand cmd = new SqlCommand("dbo.GetRowCount", con))
{
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int));
    cmd.Parameters["@count"].Direction = ParameterDirection.Output;

    con.Open();
    cmd.ExecuteNonQuery();  // *** since you don't need the returned data - just call ExecuteNonQuery
    int ans = (int)cmd.Parameters["@count"].Value;
    con.Close();

    Console.WriteLine(ans);
}

Aussi :puisqu'il semble que seul le nombre de lignes vous intéresse vraiment, pourquoi ne pas simplifier votre procédure stockée en quelque chose comme ceci :

ALTER PROCEDURE GetRowCount
AS
   SELECT COUNT(*) FROM Emp WHERE age > 30;

puis utilisez cet extrait dans votre code C# :

    con.Open();

    object result = cmd.ExecuteScalar();

    if(result != null)
    {
        int ans = Convert.ToInt32(result);
    }

    con.Close();