Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Accesso al parametro di output della stored procedure di SQL Server in C#

Ti suggerirei di inserire il tuo SqlConnection e SqlCommand nell'utilizzare i blocchi in modo da garantirne il corretto smaltimento.

Inoltre, se non sbaglio, i parametri di output sono disponibili solo dopo aver letto completamente il set di dati risultante che viene restituito.

Dal momento che non sembra che tu ne abbia affatto bisogno, perché non usare semplicemente .ExecuteNonQuery() invece? Questo risolve il problema?

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);
}

Inoltre:poiché sembra che tu sia veramente interessato solo al conteggio delle righe, perché non semplificare la procedura memorizzata in qualcosa del genere:

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

e quindi usa questo snippet nel tuo codice C#:

    con.Open();

    object result = cmd.ExecuteScalar();

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

    con.Close();