Navrhoval bych, abyste vložili SqlConnection
a SqlCommand
do používání bloků tak, aby byla zaručena jejich správná likvidace.
Také, pokud se nepletu, výstupní parametry jsou dostupné až poté, co si kompletně přečtete výslednou datovou sadu, která se vrací.
Protože se zdá, že to vůbec nepotřebujete, proč nepoužít .ExecuteNonQuery()
namísto? Vyřeší to problém?
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);
}
Také:protože se zdá, že vás skutečně zajímá pouze počet řádků - proč nezjednodušit uloženou proceduru na něco takového:
ALTER PROCEDURE GetRowCount
AS
SELECT COUNT(*) FROM Emp WHERE age > 30;
a poté použijte tento fragment ve svém kódu C#:
con.Open();
object result = cmd.ExecuteScalar();
if(result != null)
{
int ans = Convert.ToInt32(result);
}
con.Close();